网络爬虫---爬取糗事百科段子实战
Python网络爬虫
1.知识要求
- 掌握python基础语法
- 熟悉
urllib
模块知识 - 熟悉
get
方法 - 会使用浏览器伪装技术
如果您对相关知识遗忘了,可以点上面的相关知识链接,熟悉一下。
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)
(9)觉得可以,点个赞再走!
网络爬虫---爬取糗事百科段子实战相关推荐
- Python之爬取糗事百科段子实战
"简说Python",选择"置顶/星标公众号" 福利干货,第一时间送达! 阅读本文大约6分钟,实战学习,老表建议你反复看,反复记,反复练. // 本文作者 王豪 ...
- 爬虫爬取糗事百科段子
目录 糗事百科段子爬取 爬虫功能介绍 所需软件 网页解析 找到所需信息所在代码段 获取信息 编程思路分析 获取当前所有段子 对提取的内容进行优化 数据合并 查看点赞数最多的内容 总结 最后 附代码 糗 ...
- python爬虫经典段子_Python爬虫-爬取糗事百科段子
闲来无事,学学python爬虫. 在正式学爬虫前,简单学习了下HTML和CSS,了解了网页的基本结构后,更加快速入门. 1.获取糗事百科url 2.先抓取HTML页面 importurllibimpo ...
- 【网络爬虫】爬取糗事百科段子
1.前言 自动爬取糗事百科段子,使用Python编写. 输出文件路径需根据实际自己修改哦,默认的是输出100条段子,终止条件可以自己设置. 另糗事百科可能会改版,如有问题,欢迎留言,或者自行更改正则表 ...
- 爬虫实战1:爬取糗事百科段子
本文主要展示利用python3.7+urllib实现一个简单无需登录爬取糗事百科段子实例. 如何获取网页源代码 对网页源码进行正则分析,爬取段子 对爬取数据进行再次替换&删除处理易于阅读 0. ...
- 转 Python爬虫实战一之爬取糗事百科段子
静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...
- 【Python爬虫系列教程 28-100】小姐姐带你入门爬虫框架Scrapy、 使用Scrapy框架爬取糗事百科段子
文章目录 Scrapy快速入门 安装和文档: 快速入门: 创建项目: 目录结构介绍: Scrapy框架架构 Scrapy框架介绍: Scrapy框架模块功能: Scrapy Shell 打开Scrap ...
- Python爬虫实战之爬取糗事百科段子
Python爬虫实战之爬取糗事百科段子 完整代码地址:Python爬虫实战之爬取糗事百科段子 程序代码详解: Spider1-qiushibaike.py:爬取糗事百科的8小时最新页的段子.包含的信息 ...
- Python爬虫实战一之爬取糗事百科段子
点我进入原文 另外, 中间遇到两个问题: 1. ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) 解 ...
最新文章
- Securing the Deep Learning Stack
- 如何快速将Android库发布到JCenter
- C# 序列化与反序列化json
- r语言安装ipsolve_R语言矩阵操作之矩阵运算
- nagios整合ganglia实现hadoop、Hbase监控及手机短信报警
- 图像识别---opencv安装
- [2018.10.17 T1] 斜率
- Centos软件安装库文件缺失(sqliteman安装中Could not find QScintilla library)
- 关于 ThreeJS 线宽 lineWidth 无法正常显示 太大 需要缩小 窗口缩放会影响线粗细 等问题
- 安卓开发之Intent使用介绍(显式Intent和隐式Intent)
- mysql gtid 1236错误_错误1236
- 程序员必看!掌门一对一java开发
- c语言静态变量与局部变量,C语言 全局变量、静态全局变量、局部变量、静态局部变量...
- 我们如何建立Schrödinger的div? 与Vue!
- 语义分析的一些方法(三)
- 小米智能家居技术分析
- Java详解去除字符串中空格的方法
- macino404 || cinema 4D 基础解释 || 第一篇
- Apache IoTDB PMC 乔嘉林荣获 2022 杰出开源贡献者|开源技术强大,开源文化活跃...
- 虾皮怎么注册开店,怎么开本土店铺?