他说:“只是单纯的想用 Python 收集一些素颜照,做机器学习使用”,“我信你个鬼!”
今天,他爬取了 上千张 相亲素颜照。跟我说?刷相亲平台,收集素颜照,训练机器模型。这也能信?她们明明化妆了。
阅读本文你将收获
近万张素颜头像;
lxml
解析库初识;XPath
语法初识;Cooike
反爬;女朋友(没准是意外收获)
Python 采集 19 楼相亲女生头像
从本篇博客开始,你将进入爬虫 120 例的第二个小阶段,requests
+ lxml
实现爬虫。
requests
相信通过前面 10 个案例,你已经比较熟悉了,接下来我们在其基础上,新增一款爬虫解析库 lxml
。该库主要用于 XML
,HTML
的解析,而且解析效率非常高,使用它之后,你就可以摆脱编写正则表达式的烦恼了。
目标数据源分析
爬取目标网站
本次抓取目标是 19 楼女生相亲频道,该分类频道截止 7 月 1 日还在持续更新中。
https://www.19lou.com/r/1/19lnsxq.html
以下图片来自网页截图,如有侵权,及时联系橡皮擦哦~
本次爬取的目标为上图头像图片,文件名保存为标题内容。
使用的 Python 模块
requests
模块lxml
模块fake_useragent
模块
重点学习内容
lxml
模块初识。
列表页分析
本次抓取围绕列表页即可完成任务,列表页排序规则如下:
图片所在标签如下所示,提取工作交给 lxml
模块完成,当然为了联系熟练程度,你依旧可以使用 re
模块完成一版。
lxml 基础知识
提前通过 pip install lxml
对该库完成安装。
导入该库与该库的基本使用。
上述代码注释中提及的 XPath 对象,关于 XPath,是一门在 XML/HTML 文档中查找信息的语言,大意为通过特定语法在 HTML 中提取数据的语言,基础知识的学习,可以参考 https://www.w3school.com.cn/xpath/xpath_intro.asp,最佳的学习技巧是边查边用。
整理需求如下
批量生成待抓取列表页;
requests
请求目标数据;lxml
提取目标数据;保存图片。
编码时间
在编码时,为了防止直接被反爬识别,所在爬取过程中,增加一个等待时间,限制爬取速度(当然在后续发现没有对 IP 的限制,直接移除即可)。
代码编写过程中,如果出现如下错误,更新 fake_useragent
即可。
更新脚本如下:
如果依旧失败,建议自己写随机生成 UserAgent 的函数。
一点点反爬
爬取该目标数据时,直接通过 requests
请求目标地址,会返回如下代码,该代码不是目标数据所在页面,即网站存在反爬技术。
直接请求目标网址,得到的响应代码如下图所示,注意红框位置。
对 requests
请求到的数据进行分析,发现在返回的代码中设置了 Cookie
,该值进行反复测试之后,发现为固定值,后续直接通过 requests
参数 headers
设置即可。
获取到目标页面源码之后,就可以通过 lxml
进行页面提取操作了,在前文已经进行了简单的描述。重点学习的分为两个部分内容:
首先通过
lxml
模块中的etree
对象,将 HTML 源码进行序列化,即转化为 Element 对象;然后对
Element
对象进行解析,这里用到的解析语法是 XPath,本文用到了路径解析,在完整代码部分有注释说明。
完整代码
为了提高效率,你可以取消 5 秒等待,也可以采用多线程,不过尝试几秒钟就好了,不要过度抓取哦,毕竟咱们只为学习。
上述代码还存在一个重要知识点,在获取到的源码中图片的 src
属性为 dot.gif
(加载图片),data-src
属性存在值。
具体对比如下图所示,上图为直接查看页面源码,下图为服务器直接返回源码。
这部分给我们的爬取提示为,任何数据的解析提取,都要依据服务器直接返回的源码。
抓取结果展示时间
爬虫 120 例,第 11 例完成,希望本篇博客能带给你不一样的惊喜与知识。相关资料可以在下面直接获取。
完整代码下载地址:https://codechina.csdn.net/hihell/python120,NO11。
以下是爬取过程中产生的各种学习数据,如果只需要数据,可去下载频道下载~。
爬取资源仅供学习使用,侵权删。
版权声明: 本文为 InfoQ 作者【梦想橡皮擦】的原创文章。
原文链接:【http://xie.infoq.cn/article/a4b0f408ccb4e28edf8d50201】。文章转载请联系作者。
评论