动态网页抓取(爬取百度百科的历史记录,结果在时隔四个月之后再次遇到的对手)

优采云 发布时间: 2022-04-04 02:02

  动态网页抓取(爬取百度百科的历史记录,结果在时隔四个月之后再次遇到的对手)

  动态页面爬取

  很久没有写爬虫了。今天敲了一个爬虫——爬百度百科的历史记录。结果时隔四个月再次遇到的对手居然是动态页面(我一开始觉得百度太简单了。),但经过一番努力,还是达到了自己的目标,然后就写了博客作为评论。

  一、概念

  动态页面实际上是相对于静态页面的。面对静态页面时,直接查看响应一般是网页的整个代码,而动态页面则不然。一般来说,当再次打开动态页面的响应时,会与您在网页上看到的有所不同。

  二、练习和练习前

  因为我很喜欢练习,所以我会一言不发地练习,练习会给你真正的知识,你多练习就会明白。

  目标网页:万科百度百科历史版本实现环境:win32版本:python3.6.2 实际目标:获取万科百度百科历史版本历史修改时间并制作图表或csv文件

  三、流程说明

  和所有爬虫一样,我们的第一步会是分析网页,因为我们的目标选择的是动态网页,所以我们还需要跟踪json文件等等。过程:

  1、网页分析2、查询跟踪json等文件或xhr 3、文本匹配4、绘制或制作csv

  四、工具准备

  我们需要的库是(所有最新版本):

  1.requests 2.re(以下库对于爬虫来说不是必需的,但它们是我这次需要的)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,发现这个很熟悉的字段(当然我可能很熟悉)

  

  显而易见的答案就在这里,只需解释一下

  get historylist ,获取历史数据tk,我猜是万科的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的原因,我可以说博主是不是突然不想写了?

  以下为代码:(注:博主懒得写评论了,不明白的可以评论提问,谢谢)

  原创地址:%257b%2522重量%255fid%2522%253a%25226780366574501%2522%252℃%2522%252℃2522%2522%253a%25222014071 <4. pc%255pl%2522%257d&request_id = 6780366574501& biz_id = 0 & utm_medium。=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-12-80112434.pc_search_result_cache&utm_term=java%E7%88%AC%E8%99%AB

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线