Python网络爬虫技术与实战
上QQ阅读APP看书,第一时间看更新

3.6.4 使用urllib库爬取百度贴吧

创建一个tieba.py的文件,代码如下。


#!/usr/bin/env python
import urllib.request

def load_page(request):
    """
    加载网络的页面信息
    :param request: 请求参数
    :return:返回服务端的响应信息
    """
    return urllib.request.urlopen(request)

def write_page(response, filename):
    """
    将响应返回的信息写入文件保存
    :param response:服务器返回的响应信息
    :param filename:保存的文件名
    :return:
    """
    content = response.read()
    with open(filename, 'wb') as f:
        f.write(content)

def spider(url, headers, startPage, endPage):
    """
    爬取网页的方法
    :param url: 请求的url
    :param headers:自定义的请求头信息
    :param startPage:请求的开始页面
    :param endPage:请求的结束页面
    :return:
    """
    for page in range(startPage, endPage + 1):
        page = (page - 1) * 50
        # 通过研究页面的规律,拼接需要请求的完整url
        fullUrl = url + '&pn=' + str(page)
        print(fullUrl)
        # 获取请求对象
        request = urllib.request.Request(fullUrl, headers=headers)
        # 加载页面,返回服务端的响应
        response = load_page(request)
        # 拼接文件名
        filename = '第' + str(int(page / 50 + 1)) + "页.html"
        # 写入文件
        write_page(response, filename)

if __name__ == '__main__':
    # 百度贴吧的url
    url = 'https://tieba.baidu.com/f?'
    # 防止ip被禁,重新指定User-Agent字段信息
    headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'}
    # 通过输入关键字查询
    keyword = input('请输入关键字:')
    # 输入文字(中文)进行urlencode编码
    keyword = urllib.request.quote(keyword)
    # 拼接url
    fullUrl = url + "kw=" + keyword
    # 输入起始页
    startPage = int(input("输入起始页:"))
    # 输入结束页
    endPage = int(input('输入结束页:'))
    
    # 开始抓取页面
    spider(fullUrl, headers, startPage, endPage)

运行tieba.py文件,控制台会给出提示“请输入关键字:”等,如图3-7所示。

图3-7 爬取结果