爬虫---基本概念

1.什么是爬虫
爬虫,就是抓取网页数据的程序
2.爬虫怎么抓取网页数据
网页的三大特征:
(1)网页都有自己唯一的url(统一资源定位符)来进行定位
(2)网页都使用HTML(超文本标记语言)来描述页面信息
(3)网页都使用http/https(超文本传输协议)协议传输HTML数据

爬虫的设计思路:
(1)首先确定需要爬取的网页url地址。
(2)通过http/https协议来获取对应的HTML界面
(3)提取HTML页面里有用的数据
a.如果是数据,就保持起来
b.如果是页面里的其他url,那就继续执行第二步

3.urllib2模块
Python自带的模块:/usr/lib/python2.7/urllib2.py
Python的第三方模块:/usr/local/lib/python2.7/site packages

(1)urlopen()函数

# 引入模块
import urllib2
# 向指定的url地址发送请求,并返回服务器响应的类文件对象
response = urllib2.urlopen('http://www.baidu.com/')

# 服务器返回的类文件对象支持Python文件对象的操作方法
# read()方法就是读取文件里的全部内容,返回字符串
html = response.read()
print(html)

(2)Request()函数

# 引入模块
import urllib2

headers = {
'User-Agent':Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
}
# 通过urllib2.Request()方法构造一个请求对象
request = urllib2.Request('http://www.baidu.com/', headers=headers)
# 向指定的url地址发送请求,并返回服务器响应的类文件对象
response = urllib2.urlopen(request)
# 服务器返回的类文件对象支持Python文件对象的操作方法
# read()方法就是读取文件里的全部内容,返回字符串
html = response.read()
print(html)

(3)response方法
response是服务器响应的类文件,除了支持文件操作的方法外,还支持一下常用的方法

# 返回http的响应码,成功返回200 
response.getcode()
# 返回实际数据的url,防止重定向问题
response.geturl()
# 返回服务器响应的http报头
response.info()

4.第一个爬虫程序

import urllib
import urllib2

def loadPage(url, filename):
    '''
    作用:根据url发送请求,获取服务器响应文件
    url:爬取的url地址
    filename:处理的文件名
    '''
    print('正在下载' + filename)
    headers = {
'User-Agent':Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
            }
    request = urllib2.Request(url, headers=headers)
    return urllib2.urlopen(request).read()

def writePage(html, filename):
    '''
    作用:将HTML文件写入到本地
    html:服务器相应文件内容
    filename:处理的文件名
    '''
    print('正在保存' + filename)
    # 文件写入
    with open(filename, 'w') as f:
        f.wrire(html)
    print('-'*30)

def tiebaSpider(url, beginPage, endPage):
    '''
    作用:贴吧爬虫调度器,负责组合处理每个页面的url
    url:贴吧url的前部分
    beginPage:起始页
    endPage:结束页
    '''
    for page in range(beginPage, endPage + 1):
        pn = (page-1) * 50
        fullurl = url + '&pn=' + str(pn)
        filename = '第' + str(page) + '页.html'
        html = loadPage(url, filename)
        writePage(html, filename)
    print('谢谢使用')

if __name__='__main__':
    kw = raw_input('请输入爬取的贴吧名:')
    beginPage = int(raw_input('请输入起始页:'))
    endPage = int(raw_input('请输入结束页:'))

    url = 'http://tieba.baidu.com/f?'
    key = urllib.urlencode({'kw':kw})
    fullurl = url + key
    teibaSpider(fullurl, beginPage, endPage)

猜你喜欢

转载自blog.csdn.net/jian15093532273/article/details/80313793