虽然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|  ') # 将除了汉字以外的所有字符去掉

整体代码为:

 # -*- coding:utf-8 -*-
# 2018/9/13 12:00
import requests
import re
import time
from requests.packages.urllib3.poolmanager import PoolManager
from requests.packages.urllib3.exceptions import InsecureRequestWarning,InsecurePlatformWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
requests.packages.urllib3.disable_warnings(InsecurePlatformWarning) class Qiubai_spider(object):
"""糗事百科段子爬虫""" def __init__(self):
self.base_url = "https://www.qiushibaike.com/hot/"
self.headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"}
self.analysis_pattern = re.compile('<div class="content">.*?</div>', re.S)
self.analysis_pattern_t = re.compile(r'<.*?>|&(.*?);|\s|  ')
# 第一次解析 <div class ="content" >(.*?)</div>
def send_request(self, url):
"""发送请求"""
time.sleep(2)
try:
response = requests.get(url, headers=self.headers)
return response.content
except Exception, err:
print err def write_file(self, data, page):
"""写入数据"""
with open('qiushiduanzi1.txt', 'a') as f:
filename = "第" + str(page) + "页的段子\n"
print filename
f.write(filename)
for content in data:
second_data = self.analysis_pattern_t.sub('', content)
f.write(second_data)
f.write("\n\n\n") def analysis_data(self, data):
"""数据分析提取"""
analysis_list = self.analysis_pattern.findall(data)
return analysis_list def start_work(self):
"""启动爬虫流程"""
for page in range(1, 10):
# 拼接url
url = self.base_url + "page/" + str(page) + '/' + '.html' # 发送请求
data = self.send_request(url) # 解析数据
analysis_db = self.analysis_data(data) # 写入数据
self.write_file(analysis_db, page) if __name__ == '__main__': tool = Qiubai_spider()
tool.start_work()

糗事爬虫代码

爬取后的效果:

最新文章

  1. IoC/DI基本思想的演变
  2. OD调试篇12
  3. 拼音 名字 排序 a-z的比较 ( sortUsingComparator )
  4. poj3683 Priest John&#39;s Busiest Day
  5. 指向函数的指针数组(C++)
  6. gratitute
  7. C# 数据类型映射 (SQLite,MySQL,MSSQL,Oracle)
  8. 软键盘android:windowSoftInputMode属性详解
  9. Sandcastle生成帮助文档
  10. 2017年AR大会上海站干货分享
  11. 域名系统DNS
  12. 新概念英语(1-73)The way to King Street
  13. linux中tar及压缩解压命令用法
  14. Python函数基础--def及return语句地操作
  15. Windows 服务器自动重启定位
  16. tensoFlow之DNN文本分类
  17. U盘内容被病毒隐藏的解决办法(亲测可用)
  18. 关于plot画图的原理
  19. Mysql字符串转换为整型
  20. poll() can&#39;t detect event when socket is closed locally?

热门文章

  1. RocketMQ 源码学习笔记 Producer 是怎么将消息发送至 Broker 的?
  2. Timed out after 30000 ms while waiting to connect
  3. 开发一个带UI的库(asp.net core 3.0)
  4. mac下的环境变量
  5. Spring中@Import的各种用法以及ImportAware接口
  6. RF中for循环
  7. 如何成为一个伟大的 JavaScript 程序员
  8. libevent::日志
  9. lcx 内网转发
  10. {每日一题}:四种方法实现打印feibo斐波那契数列