Python之爬取糗事百科段子实战
“简说Python”,选择“置顶/星标公众号”
福利干货,第一时间送达!
阅读本文大约6分钟,实战学习,老表建议你反复看,反复记,反复练。
本文作者
王豪:行路难,多歧路,今安在,埋头苦改bug会有时,直到bug改完才吃饭。
1.知识要求
如果您对相关知识遗忘了,可以点上面的相关知识链接,熟悉一下。
2.爬取糗事百科段子实战
目的:爬取前糗事百科前20页的所有段子
(1)首先,我们按照今天头条推文爬取csnd
首页的信息的方式,去爬取糗事百科段子相关内容,你会发现运行后程序报错,看错误原因:Remote end closed connection without response
远程关闭了链接,导致无法响应。说明,该网站有反爬技术,对方能够识别我们是爬虫,而不是浏览器访问,所以我们要将爬虫伪装成浏览器。
(2)要想伪装成浏览器,首先要获取浏览器用户代理
(3)构造报头,并伪装
#采用浏览器伪装技术,先设置报头
headers = ('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5558.400 QQBrowser/10.1.1695.400')
#设置开启工具
opener = urllib.request.build_opener()
#添加报头,将爬虫伪装成浏览器成功
opener.addheaders = [headers]
(4)采用get
方法来实现网页自动换页,从而爬取前糗事百科前20页的所有段子。通过换页观察不同页的网址,我们发现每页网址都是:https://www.qiushibaike.com/text/page/页码/
的形式,通过这我们就能实现自动换页。
#爬取前20网页信息
for i in range(0, 20):#构造每一页的网址this_url = "https://www.qiushibaike.com/text/page/" + str(i+1) + "/"#读取每一页的数据data = urllib.request.urlopen(url).read().decode('utf-8', 'ignore')
(5)获取正则表达式,观察下面红色方框的内容,发现都是呈<div class="content">.*?<span>(.*?)</span>
的形式,所以我们可以构造正则表达式pat="<div class="content">.*?<span>(.*?)</span>"
,注意.
不能匹配换行符,所以,我们要用re.S
让其能匹配换行符。
#设置正则表达式pat = '<div class="content">.*?<span>(.*?)</span>'#进行信息提取,因为有换行符,所有要用re.S按.能匹配换行符this_data = re.compile(pat, re.S).findall(data)
(6)最终代码入下:
#网络爬虫之爬取糗事百科段子实战
import re
import urllib.request
#糗事百科官网网址
url = "https://www.qiushibaike.com/text/"
#采用浏览器伪装技术,先设置报头
headers = ('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5558.400 QQBrowser/10.1.1695.400')
#设置开启工具
opener = urllib.request.build_opener()
#添加报头,将爬虫伪装成浏览器成功
opener.addheaders = [headers]
#将opener安装为全局
urllib.request.install_opener(opener)
#爬取前20网页信息
for i in range(0, 20):#构造每一页的网址this_url = "https://www.qiushibaike.com/text/page/" + str(i+1) + "/"#读取每一页的数据data = urllib.request.urlopen(url).read().decode('utf-8', 'ignore')#设置正则表达式pat = '<div class="content">.*?<span>(.*?)</span>'#进行信息提取,因为有换行符,所有要用re.S按.能匹配换行符this_data = re.compile(pat, re.S).findall(data)for d in this_data:print(d.strip()) #字符串的前面和后面有的有换行符,可以用strip()方法去掉字符串首位处的换行符和空格print('--------------------------------------')
(7)运行程序,能够看到网上前20页的段子全被爬下来了,爬取成功!
(8)如果要使程序变得健壮,还可以添加异常处理。代码如下:
#网络爬虫之爬取糗事百科段子实战
import re
import urllib.request
import urllib.error
#糗事百科官网网址
url = "https://www.qiushibaike.com/text/"
#采用浏览器伪装技术,先设置报头
headers = ('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5558.400 QQBrowser/10.1.1695.400')
#设置开启工具
opener = urllib.request.build_opener()
#添加报头,将爬虫伪装成浏览器成功
opener.addheaders = [headers]
#将opener安装为全局
urllib.request.install_opener(opener)
#爬取前20网页信息
for i in range(0, 20):#异常处理try:#构造每一页的网址this_url = "https://www.qiushibaike.com/text/page/" + str(i+1) + "/"#读取每一页的数据data = urllib.request.urlopen(url).read().decode('utf-8', 'ignore')#设置正则表达式pat = '<div class="content">.*?<span>(.*?)</span>'#进行信息提取,因为有换行符,所有要用re.S按.能匹配换行符this_data = re.compile(pat, re.S).findall(data)for d in this_data:print(d.strip()) #字符串的前面和后面有的有换行符,可以用strip()方法去掉字符串首位处的换行符和空格print('--------------------------------------')except urllib.error.HTTPError as e:if hasattr(e, 'code'):print(e.code)if hasattr(e, 'reason'):print(e.reason)
我是老表,踏实的人更容易过好生活,本文完。
推荐阅读:
数据分析从零开始实战
仔细阅读下面四篇文章,快速掌握Python基础知识要点。
完整Python基础知识
我是老表,支持我请转发分享本文。
/你学Python的态度/
留言 Python666 或 我爱Python,表明你的学习态度。
点个在看,表明态度↓↓↓
Python之爬取糗事百科段子实战相关推荐
- 网络爬虫---爬取糗事百科段子实战
Python网络爬虫 1.知识要求 掌握python基础语法 熟悉urllib模块知识 熟悉get方法 会使用浏览器伪装技术 如果您对相关知识遗忘了,可以点上面的相关知识链接,熟悉一下. 2.爬取糗事 ...
- 转 Python爬虫实战一之爬取糗事百科段子
静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...
- Python爬虫实战之爬取糗事百科段子
Python爬虫实战之爬取糗事百科段子 完整代码地址:Python爬虫实战之爬取糗事百科段子 程序代码详解: Spider1-qiushibaike.py:爬取糗事百科的8小时最新页的段子.包含的信息 ...
- Python爬虫实战一之爬取糗事百科段子
点我进入原文 另外, 中间遇到两个问题: 1. ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) 解 ...
- Python爬取糗事百科段子+定时发送QQ邮箱
文章目录 前言 1. 库导入及介绍 2. 获取网页源码 3. 提取需要的信息 4. 优化输出数据 5. 发送邮件 6. 实现定时发送 7. 源码 前言 学习Python爬虫也有段时间了,总想着搞点事做 ...
- Python爬取糗事百科段子
Python爬取糗事百科段子 Python2.7.15 今天我们来爬取糗事百科的段子 一.获取糗事百科的网页源码 首先,打开浏览器,进入糗事百科,复制它的网址. 然后我们翻个页,可以看到,网址变成了这 ...
- 【Python爬虫系列教程 28-100】小姐姐带你入门爬虫框架Scrapy、 使用Scrapy框架爬取糗事百科段子
文章目录 Scrapy快速入门 安装和文档: 快速入门: 创建项目: 目录结构介绍: Scrapy框架架构 Scrapy框架介绍: Scrapy框架模块功能: Scrapy Shell 打开Scrap ...
- 爬虫实战1:爬取糗事百科段子
本文主要展示利用python3.7+urllib实现一个简单无需登录爬取糗事百科段子实例. 如何获取网页源代码 对网页源码进行正则分析,爬取段子 对爬取数据进行再次替换&删除处理易于阅读 0. ...
- Python3写爬虫(五)爬取糗事百科段子
2019独角兽企业重金招聘Python工程师标准>>> 最近几天开始用Python3改写网上用Python2写的案例,发现完全可以用Python3来重构Python2的源码.本篇文章 ...
最新文章
- 优化算法optimization:AdaGrad
- 图解VC++6.0和ACE 5.4 开发入门
- vue js 定义对象_JS标准内置对象Proxy及Vue中的proxy.js文件
- Mybatis bug修正
- 如何旋转Android模拟器显示? [重复]
- 数字后端基本概念-合集
- PYTHON笔记 面向对象程序设计
- Ubuntu 18.04修改默认源为国内源
- [MATLAB]线性方程组应用--小行星运行轨道计算问题
- 光照与渲染(十)- 自发光材质
- 自动控制原理9.1---线性系统的状态空间描述(中下)
- 大数据分析如何跟踪迁移模式
- SOLIDWORKS Routing进阶篇——管道设计技巧分享
- oracle驱动下载
- 销售战纪——我第一次真正意义上的销售工作
- Java图片Base64格式压缩大小至40k之内
- while(0),while(1),while(表达式)
- 不胜人生一场醉数据库正文 Oracle的逻辑结构(表空间、段、区间、块)——段...
- 哪些PCB缺陷适合用X-ray检测技术?
- 实现页面的简繁体的切换