[爬虫]用python的requests模块爬取糗事百科段子

  虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更简洁方便。Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。

  爬取糗事百科网站https://www.qiushibaike.com/段子,需要分两步解析数据的过程。首先将html页面整体爬下来,然后再利用正则将不需要字符过滤。

  第一步解析:

re.compile('<div class="content">.*?</div>', re.S) # 匹配出包含段子的标签

  第二步解析:

re.compile(r'<.*?>|&(.*?);|s|  ') # 将除了汉字以外的所有字符去掉

整体代码为:

 1 # -*- coding:utf-8 -*-
 2 #  2018/9/13  12:00
 3 import requests
 4 import re
 5 import time
 6 from requests.packages.urllib3.poolmanager import PoolManager
 7 from requests.packages.urllib3.exceptions import InsecureRequestWarning,InsecurePlatformWarning
 8 requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
 9 requests.packages.urllib3.disable_warnings(InsecurePlatformWarning)
10 
11 class Qiubai_spider(object):
12     """糗事百科段子爬虫"""
13 
14     def __init__(self):
15         self.base_url = "https://www.qiushibaike.com/hot/"
16         self.headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"}
17         self.analysis_pattern = re.compile('<div class="content">.*?</div>', re.S)
18         self.analysis_pattern_t = re.compile(r'<.*?>|&(.*?);|s|  ')
19     # 第一次解析 <div class ="content" >(.*?)</div>
20     def send_request(self, url):
21         """发送请求"""
22         time.sleep(2)
23         try:
24             response = requests.get(url, headers=self.headers)
25             return response.content
26         except Exception, err:
27             print err
28 
29     def write_file(self, data, page):
30         """写入数据"""
31         with open('qiushiduanzi1.txt', 'a') as f:
32             filename = "" + str(page) + "页的段子
"
33             print  filename
34             f.write(filename)
35             for content in data:
36                 second_data = self.analysis_pattern_t.sub('', content)
37                 f.write(second_data)
38                 f.write("


")
39 
40     def analysis_data(self, data):
41         """数据分析提取"""
42         analysis_list = self.analysis_pattern.findall(data)
43         return analysis_list
44 
45     def start_work(self):
46         """启动爬虫流程"""
47         for page in range(1, 10):
48             # 拼接url
49             url = self.base_url + "page/" + str(page) + '/' + '.html'
50 
51             # 发送请求
52             data = self.send_request(url)
53 
54             # 解析数据
55             analysis_db = self.analysis_data(data)
56 
57             # 写入数据
58             self.write_file(analysis_db, page)
59 
60 if __name__ == '__main__':
61 
62     tool = Qiubai_spider()
63     tool.start_work()
糗事爬虫代码

爬取后的效果:

原文地址:https://www.cnblogs.com/skyell/p/9641082.html