网页爬虫抓取百度图片(爬取百度百科的历史记录,结果在时隔四个月之后再次遇到的对手)
优采云 发布时间: 2022-02-06 01:03网页爬虫抓取百度图片(爬取百度百科的历史记录,结果在时隔四个月之后再次遇到的对手)
动态页面爬取
很久没有写爬虫了。今天敲了一个爬虫——爬百度百科的历史记录。结果时隔四个月再次遇到的对手居然是动态页面(我一开始觉得百度太简单了。),但经过一番努力,还是达到了自己的目标,然后就写了博客作为评论。
一、概念
动态页面实际上是相对于静态页面的。面对静态页面时,直接查看响应一般是网页的整个代码,而对于动态页面则不然。一般来说,当再次打开动态页面的响应时,会与您在网页上看到的有所不同。
二、练习和练习前
因为我很喜欢练习,所以我会一言不发地练习,练习会给你真正的知识,你多练习就会明白。
目标页面:万科百度百科历史版
实现环境:win32
版本:python 3.6.2
实用目标:获取万科百度百科历史版的历史修改时间,制作图表或csv文件
三、流程说明
和所有爬虫一样,我们的第一步会是分析网页,因为我们的目标选择的是动态网页,所以我们还需要跟踪json文件等等。
过程:
1、网页分析
2、查询、跟踪json等文件或xhr
3、 用于文本匹配
4、绘制或制作 csv
四、工具准备
我们需要的库是(所有最新版本):
1.请求
2.回复
(以下库对于爬虫来说不是必需的,但它们是我这次需要的)
3.matplotlib(用于可视化)
4.datetime(准时运行)
5.Pandas(python强大的数据处理库)
6.os(在系统上运行)
(我更喜欢原来的re库,当然这里使用正则表达式可以解决所有问题)
你需要知道的:
1.python 语法基础
2.正则表达式匹配规则
(爬行动物不需要以下内容)
3.datetime 一些基本函数
4.Matplotlib 可视化操作(虽然这对于非爬虫来说是必须的,但很多情况下数据可视化会让数据更直观,更容易做出判断)
5.pandas库的基本使用(非爬虫必备,数据分析必备)
五、网页分析
首先我们打开我们的目标页面→万科百度百科历史版。
好像一切正常,然后我们查看url,也有前面提到的规则,但是真的一切正常吗?
如果你把这个页面做为静态页面,那肯定是注定要失败的,因为我从一开始就是这样做的,当你在第一页查找代码时,你会发现一切正常,但是当你在第二页查找代码时page 有时,您会发现一个事实,即您在第二页甚至最后一页上看到的最后一个代码是相同的。你觉得这有悖常理吗?
六、关注
事实上,事实并非如此。这是正常的事情。很多页面会做成动态的,使用json或者其他文件来传输数据(不准确,也可能使用java、JavaScript等代码调用端口等),这样比较安全。
此时很多人会选择使用fiddle等第三方软件抓包,比较方便,但是这里笔者比较难,所以直接在控制器平台上观看即可。
经过一番搜索,我们锁定了几个我们需要的文件和 xhr 文件。
很多网页的数据都会隐藏在json中。这可能是一样的吗?当然检查后失败了,然后我们看xhr,发现这个很熟悉的字段(当然我可能很熟悉)
显而易见的答案就在这里,只需解释一下
获取历史列表,获取历史数据
我猜这个东西是万科的quantio语句(不知道这个词是不是拼错了,不过我用的很少,前后端工作的朋友可能知道)
Lemmald,这不就是万科在百度的号码吗?
一看就知道是第七页
大小显示 25 条消息
这个发现很棒,解决了很多问题。
七、假的
作为爬虫,了解反爬虫套路是非常有必要的。如果你在xhr上进行正常爬虫,你会发现返回给你的是{error: xxxxx},此时你应该警惕,这证明你的机器人的身份被百度识破了,它拒绝了给你数据,所以我们需要做一些简单的伪装。前面已经讲过改头文件了,这次我会多讲。
1.headers 伪装,服务器使用它来确定您正在使用的浏览器。当出现这种情况时,服务器会认为这是来自浏览器的正常请求。
2.Referer:浏览器使用它来确定您从哪个网页跳转。
3.ip伪装,这个只要构造好ip池就没有问题。
4.cookie伪装,cookie被服务器用来识别你当前的状态,比如你是否已经登录等。每次你向服务器请求cookie时,都会相应更新。
最常用的就是上面这些了,从上到下越来越难调整了。面对百度,光改headers显然是不够的,于是加了Referer和cookie码(关键是两个月前就建立了。IP池已经废掉了,懒得整)。
好了,到这里我们发现可以正常获取数据了。
八、文本匹配
不得不说,在解决了以上问题之后,文本匹配就变成了最简单的事情。
其实这是一种类似字典的格式,但是作者懒得想了,决定用一个简单粗暴的正则表达式。
九、转换时间戳
这时候我们就会发现,creattime给出的时间到底是什么鬼?
但如果你仔细想想,你会发现它是一个时间戳
python 中的时间戳:自 1/1/1970 12:00AM 以来的秒数
是不是很破?
幸运的是,解决这个问题只需要几段简短的代码
输入时间戳,好了,问题解决了。
十、绘图和csv
图片
CSV
十个一、总结和代码
感觉这次爬虫还行。两个多月后想起来也不容易。写这个博客纯粹是一个评论。至于怎么做图和怎么做csv的原因,我可以说博主是不是突然不想写了?
这是代码:
(注:博主懒得写评论了,不明白的可以评论提问,谢谢)
———————————————
版权声明:本文为CSDN博主“独孤天”的原创文章,遵循C*敏*感*词*.0 BY-SA版权协议。转载请附上原文出处链接和本声明。
原文链接: