python获取response括号⾥的内容_Python爬⾍第⼀战爬取⼩
前⾔:
本⽂章将通过分析爬⾍的思想,再加以利⽤两个 Python 库,即 requests 库和 re 库,让你顺利⼊门爬⾍,通过本篇⽂章,你将学会:
独⽴做出爬取⼩说的爬⾍
利⽤Python取得所要信息
利⽤Python筛选出特定信息
还没有搭建好python环境的请看这⾥
顺⼿牵⽺:极其简单的Python环境搭建-Python新⼿教程z huanlan.zhihu
背景:
背景
看⼩说的时候虽然能免费阅读⼩说内容,但是因为弹窗⼴告的存在,阅读体验不佳
作为⼀个资深⼩说控,我学会 Python 爬⾍之前每天必做的事便是打开⼿机或者电脑,进⼊⼩说⽹站,然后再打开我喜欢看的⼩说,
被⼴告弹框所⼲扰,
牺牲⼀部分,⽐如说我看⼩说的时候会 被⼴告弹框所⼲扰⼩说是免费的,但是俗话说便宜没好货,我们在 享受
享受便宜的同时,也在 牺牲
不佳,既然有了问题,那我们便想着去解决,所以我⼀开始的解决⽅式是给浏览器安装去⼴告插件,这么⼀做之后这让我的阅读体验 不佳
答案体验的确好了不少,但是如果是⼿机端,我则⽆法使⽤这个⽅法,并且去⼴告插件也不是万能的。那么,还有什么解决⽅式吗? 答案是肯定的!
解决⽅式:
现在有请我们今天的主⾓登场,它就是⼤名⿍⿍的 Python编程猫社区作品
python入门教程app
Python!
问题的吧?
你⼀定很好奇,Python 是怎么解决
解决这个问题
且听我慢慢道来......
思路分析:
对症下药
看⼩说的时候会被弹框⼴告⼲扰
症:看⼩说的时候会被弹框⼴告⼲扰
症:
到了症,那接下来⾃然是对症下药了,且再听我慢慢道来。既然⼴告对阅读有⼲扰,那么我们⾃然想
到把⼴告去除,关键是不能⽤⼴告去除插件,那怎么办呢?
这个问题问的好,其实我们可以换个⾓度思考问题
你看我们的⽬的是获得没有⼴告的阅读界⾯,这时候很多⼈想到的是直接把⼴告去除
的确如此,但是现在⽆法使⽤去⼴告插件,所以此路不通。
这时候不要轻⾔放弃,要记住条条⼤路通罗马。我们可以换个⾓度思考
既然你⼴告不⾛,那我⼩说⽂字就⾛呗,这不就实现⼴告与纯⽂字分离了吗?
通过以上分析,我们到了药!
药:把⼩说⽂字内容从⼩说所在地⽅提取出来
所以
是时候对症下药了,那么这个药是怎么制成的呢?且再听我慢慢道来!
预备知识
说明:不了解没关系,本⽂附有相关链接供你学习,代码实战部分也会讲解基本⽤法
说明
requests 库
如果把requests 库⽐作⼀个⼈,那么它的主要⼯作便是取货
库的安装⽅法:打开命令⾏,输⼊ pip install requests 然后等待安装完成,出现successfully说明安装成功。
这是相关链接
Python爬⾍之requests库的使⽤ - 墨鱼菜鸡 - 博客园w wwblogs
re 库
如果把re库⽐作⼀个⼈,那么它的主要⼯作便是从给定信息中提取出特定信息
这是相关链接
Python 正则表达式 | 菜鸟教程w ww.runoob
实战部分:
爬⾍,说⽩了就是利⽤技术去获取位于⽹络上的信息,就像你要⼀本书⼀样,你若想到书,就得知道它的位置,在⽹络中,信息的位置被称为 URL
URL 标记着信息的位置,故此,我们要想获得想要的信息们需要知道信息的 URL,那么我们怎么获得 URL 的呢?凭空臆想⾃然是不⾏的咯!虽然可能成功,但成功概率⾮常低!
归纳推理‘这⼀⽅法,它与⼈类的发展息息相关,因为⼈类可以通过归纳,在⼤量的基本数据⽀持下,合说到获取 URL 就不得不谈到 ’归纳推理
理地归纳出某个事物的特点。
例如
通过观察⼈类的⾏⾛⽅式,可以归纳出⼈类具有直⽴⾏⾛的特点
那归纳推理在爬⾍中是怎么应⽤的呢?
我们不妨回忆以下看⼩说的部分流程:
1. 打开⼩说⽹站
2.点击要看的书籍并进⼊章节⽬录
float是什么意思c++语言3.点开具体章节开始⼩说正⽂的阅读
这是⼀个通⽤流程,下⾯我们来具体化流程
1.打开笔趣阁( www.xbiquge.la)
2.点击⼩说《三⼨⼈间》( www.xbiquge.la/10/10489/)并看到章节⽬录
3.点击第⼀章 “我要减肥”( www.xbiquge.la/10/10489/4535761.html )开始阅读
你⼀定会想,这哪有体现归纳推理呢?
⾜够多的基础上,上⾯我给的⼩说章节 URL 还不够多,所以我再给⼏个:
别急,且再听我慢慢道来,归纳推理是建⽴在样本⾜够多
第⼀章⼩说地址:www.xbiquge.la/10/10489/4535761.html
第⼆章⼩说地址:www.xbiquge.la/10/10489/9683462.html
第三章⼩说地址:www.xbiquge.la/10/10489/9687224.html
求同存异
3 个或许不算多,但我相信以你的冰雪聪明,⼀定已经发现这 3 个 地址的共性了吧? 好,接下来让我们 求同存异
同:
www.xbiquge.la/10/10489/
异:
4535761.html
java程序设计教程第三版雍俊海答案
9683462.html
9687224.html
所以如果我们⽤ x 来代表⼩说章节 URL 的共性,y 代表不同点,z 代表⼩说章节完整 URL 那么应该有:
z=x+y
equests 库了,它在本⽂的爬⾍中的作⽤是x 我们已经知道了,所以要求 z,当然是要去求 y,那么 y 是怎么求的呢? 这就⽤到我们的 requests 库
向某个地址发送请求(就像你⽤浏览器打开⽹页那样,只不过没有图形界⾯和⼀些动态元素),然后获得相关信息。
打个⽐⽅
requests是⼀个⼈,它具有取货的能⼒,如果你告诉它货物所在地址,它可以帮你去把货物取回来,取货物⽤到
的⽅法是 get
或许你还不理解,没关系,下⾯有相应的解释
回到求解 y 的问题,求解 y 得知道它在哪⾥对吧?
那么 y 在哪⾥呢?
我们回忆⼀下看⼩说的第 2 步,即:
点击要看的书籍并进⼊章节⽬录
这⼀步骤中,如果我们点击章节⽬录中的任意章节,我们很快就能看到⼩说内容
故此
逃跑吧少年神明服下载链接做出猜想:
⼩说章节这⼀货物的地址存放在⼩说⽬录这个仓库中
那怎么验证猜想的正确性呢?
requests 库咯!
当然是使⽤我们的 requests 库
获取章节地址的思路:
通过requests这个⼈访问⼩说总⽬录这⼀⼤仓库,然后从仓库中取货,这样便得到⼩说章节地址这些货物
请看代码
#导⼊requests这个⼈,让他帮我们取货
import requests
#这是书籍的地址
book_url='www.xbiquge.la/10/10489/'
#通过requests库的get⽅法向⼩说⽬录地址发送请求,即让requests这个⼈去book_url这个地址取货response_(book_url)
#设定编码,因为⽹址⽤ utf-8 编码,不然会导致中⽂显⽰乱码
#通俗地说那就是requests这个⼈与仓库语⾔不同,沟通有障碍,所以通过 encoding这个⽅法来同化沟通语⾔ding='utf-8'
#输出货物部分信息
print()
#部分结果
'''
<dd><a href='/10/10489/4534454.html' >写在连载前</a></dd>
<dd><a href='/10/10489/4535761.html' >第⼀章我要减肥!</a></dd>
<dd><a href='/10/10489/9683462.html' >第⼆章王宝乐,你⼲了什么!</a></dd>
<dd><a href='/10/10489/9687224.html' >第三章好同学,⼀切有我!</a></dd>
'''
仔细看我们便发现 y 隐藏在形如:
<dd><a href='/10/10489/4535761.html' >
的⼀段⽂本中,所以我们到了y所在位置,验证前⾯的猜想是正确的!
re库登场了!
接下来要做的便是把它揪出来,那怎么把它揪出来呢?这就轮到我们的re库
re库的简略介绍
re也是⼀个⼈。它的⼯作是审阅信息,⽽如果你要叫它帮你办事,你需要知道怎么和它沟通,它有
⾃⼰的语⾔,明⽩它的语⾔之后才能给它分配任务
下⾯简略介绍它的语⾔:
符号 . 对于我们⽽⾔是⼀个单纯的英⽂句号,但在re这个⼈的认知⾥,它代表着任意符号(除了换⾏符)符号 * 对于我们⽽⾔是⼀个单纯的星号,但在re这个⼈的认知⾥,它代表着任意多个字符
例如 :
你好*
上⾯的三个字符对于re这个⼈⽽⾔,它的理解有:
你好
你好好
在jquery你好好好
......
这下⼦你明⽩了吧?
符号 () 对于我们⽽⾔是单纯的括号,⽽在re这个⼈的认知⾥,它的作⽤是吧 ()⾥⾯的内容包围起来,下⾯会有实例介绍
注: (.*?) 这个表达式可以匹配任意⽂本,后⾯会多次涉及
请看编写正则表达式的代码:
#匹配形如 /10/10489/9683462.html 的内容的正则表达式
regx="<dd><a href='(.*)' >"
chapter_href_list=re.findall(regx,)
'''
函数使⽤说明,re是个⼈,通过 .这个符号可以到它具有的能⼒,.后⾯的findall表⽰筛选信息这个能⼒要使⽤findall这个能⼒,我们需要在括号⾥⾯的第⼀个参数位置填写筛选的⽅法,即正则表达式,第⼆个参数是筛选的信息来源,这⾥的信息来源 是requests这个⼈去⼩说章节总⽬录这个仓库中提取到的货物
'''
print(chapter_href_list)
#部分结果
'''
['/10/10489/4535761.html',
'/10/10489/9683462.html',
'/10/10489/9687224.html']
'''
#可以看到,匹配结果是列表类型
接下来是求解z的⽅法,即拼接⼩说具体章节URL
您瞧:
#定义⼀个列表来存储⼩说章节地址
chapter_url_list=[]
#⽤于后⾯拼接⼩说章节地址
base_url='www.xbiquge.la
#遍历 chapter)href)list 中的所有元素并与 base_url ⼀起拼接成⼩说地址
for i in chapter_href_list:
#这⼀部分即 z=x+y
url=base_url+i
'''
print(url)
下⾯是 print 之后的⼀个结果
www.xbiquge.la/10/10489/4535761.html
'''
chapter_url_list.appeend(url)
#就这样,我们把所有章节的地址存进了 chapter_url_list 这个列表⾥⾯

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。