
上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 爬取结果