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

优采云 发布时间: 2022-04-17 12:21

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

  动态页面爬取

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

  1、概念

  动态页面实际上是相对于静态页面的。面对静态页面时,直接查看响应通常是网页的所有代码,否则,动态页面的响应通常与再次打开动态页面的响应时在网页上看到的不同. Python

  2、先练练练再练

  既然我很喜欢练习,我就一言不发地练习,练习会给你真知,多练习你就会明白。混帐

  目标页面:万科百度百科历史版

  实现环境:win32

  版本:python 3.6.2

  实践目标:获取万科百度百科历史版的历史修改时间,制作图表或csv文件github

  3、流程说明

  像所有爬虫一样,我们的第一步是分析网页。由于我们针对的是动态网页,因此我们还需要跟踪 json 文件。

  工艺:网络

  一、网页分析

  二、查询、跟踪json等文件或xhr

  三、 用于文本匹配

  四、画图或做csv正则表达式

  4、工具准备

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

  1.请求

  2.回复

  (以下库对于爬虫来说不是必需的,但它们是我这次需要的)

  3.matplotlib(用于可视化)

  4.datetime(准时运行)

  5.Pandas(python强大的数据处理库)

  6.os(在系统上运行)

  (我更偏向于原来的re库,虽然这里使用正则表达式可以解决所有问题)后端

  你需要知道的:浏览器

  1.python 语法基础

  2.正则表达式匹配规则

  (爬行动物不需要以下内容)

  3.datetime 一些基本函数

  4.Matplotlib 可视化操作(虽然这对于非爬虫来说是必须的,但是很多情况下数据可视化会让数据更直观,更容易做出判断)

  5.pandas库的基本使用(非爬虫必备,但数据分析必备)安全

  5、网页分析

  首先,我们打开我们的目标页面→万科百度百科历史版。

  

  好像一切正​​常,然后我们查看url,也有前面提到的规则,但是真的一切正常吗?

  

  

  如果把这个页面当成静态页面,肯定就结束了,因为我从一开始就是这样做的,当你查询第一页的代码时,你会发现一切正常,但是当你查询第二页的代码时. 有时你会发现,你在第二页甚至最后一页看到的最后一个代码都是一样的,你觉得这有悖常理吗?

  6、关注

  其实不然,这是很正常的事情。很多页面会做成动态的,使用json或者其他文件来传输数据(不准确,而且大多使用java、JavaScript等代码调用ports等),这样比较安全。

  这时候很多人会选择使用fiddle等第三方软件抓包,比较方便,但是这里笔者比较难。

  经过一番搜索,我们锁定了几个我们需要的文件和 xhr 文件。

  

  很多网页的数据都会隐藏在json中。这可能是一样的吗?当然查了就失败了,所以当我们看到xhr的时候,发现这个很熟悉的字段(虽然大部分都是我熟悉的)

  

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

  获取历史列表,获取历史数据

  我猜这个东西是万科的quantio语句(不知道这个词是不是拼错了,但是用的比较少,前后牵扯的朋友可能知道)

  Lemmald,这不就是万科在百度的号码吗?

  一看就知道是第七页

  大小显示 25 条消息

  这个发现很棒,解决了很多问题。

  7、假装

  作为爬虫,了解反爬虫套路是非常有必要的。如果你在xhr上进行正常的爬虫,你会发现返回给你的是{error: xxxxx},这个时候你应该警惕。这证明你的机器人的身份已经被百度看到了,它拒绝给你数据,所以我们需要做一些简单的伪装。前面已经讲过改头文件了,这次我会多讲。

  1.headers 假装服务器使用它来确定您正在使用的浏览器。当出现这种情况时,服务器会认为这是来自浏览器的正常请求。

  2.Referer:浏览器使用它来确定您从哪个网页跳转。

  3.ip假装,这个只要建好ip池就没有问题了,建议去西刺代理检查一些需要的

  4.Cookie 假装服务器使用 cookie 来识别您当前的状态。例如,如果您已经登录,或者其他什么,每次您请求服务器时,cookie 都会更新。

  最常用的就是上面那几个了,从上到下越来越难整。面对百度,仅仅改变headers显然是不够的,所以我添加了Referer和cookie代码(关键是两个月)。之前创建的IP池已经废掉了,懒得整)。

  好了,到这里我们发现可以正常获取数据了。

  8、文本匹配

  不得不说,在解决了以上问题之后,文本匹配就变成了最简单的事情。

  

  其实这是一种类似字典的格式,但是作者懒得想了,决定用一个简单粗暴的正则表达式。

  9、转换时间戳

  这时候我们就会发现,creattime给出的时间到底是什么鬼?

  但是如果你仔细想想,你会发现这是一个时间戳

  python中的时间戳:从1970年1月1日凌晨12:00到今天的秒数

  是不是很破?

  幸运的是,解决这个问题只需要几段简短的代码

  

  输入时间戳,好了,问题解决了。

  10、绘图和csv

  图片

  

  CSV

  

  11、总结和代码

  这次感觉爬虫就好了。两个多月后想起来也不容易。写这个博客纯粹是一个评论。至于怎么做图和怎么做csv的原因,我可以说博主是不是突然不想写了?

  以下是代码:(注:博主懒得写评论了,看不懂可以评论提问,谢谢)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线