动态网页抓取(动态网站的爬取包含下以下三个步骤:抓包 )

优采云 发布时间: 2021-10-01 22:08

  动态网页抓取(动态网站的爬取包含下以下三个步骤:抓包

)

  众所周知,动态网站通常使用ajax等异步加载技术来加载网页。与静态网页相比,动态网页通常收录多个请求,而数据往往不存在于网页的源代码中。打包查找并分析数据所在的请求,并编写响应的爬虫代码。动态网站的爬取包括抓包、参数分析、数据提取三个步骤。(以下以爬取b站评论为例)

  一、抓包

  抓包的方法有很多,比较常用的比较有用,比如fiddle,一个抓包软件和浏览器自带的开发者调试工具(即f12),这里只介绍chrome的f12。

  f12里面有很多菜单,这里我们只需要用到网络,下面是我们会经常用到的功能

  

  上面三个箭头所指的按钮的功能是从左到右

  1. 开关,红色开始捕捉,灰色停止。开启后,之前的拍摄历史将被清除

  2.清除历史记录

  3.搜索功能,可以查询哪些包有指定字段

  下面一栏是过滤器,你可以选择要查看的包类型。一般动态网页的封装是xhr

  接下来,开始抓包。抓包一般有两种方式:

  1.通过触发指定事件定位数据所在的包

  

  分析网站,很明显,可以触发b站评论变化的事件是点击如图所示的两个按钮,向下滑动到评论所在的地方。这里我们选择要触发的按钮事件。

  

  很明显,我们需要的包就在眼前,点击查看内容,发现是一个json文件,然后我们就确认了这就是我们想要的包。

  一些动态的网站可能会在网站加载时触发事件,或者传入的包根本不是xhr包,导致历史记录中有大量我不知道的包知道要做什么。前面提到的搜索功能会起作用

  

  打开搜索框后,填写我们需要在搜索中定位的数据,如图

  

  可以看到,数据包很快就被我们找到了。这种方法比第一种更有效,但效率不如第一种,而且各有优缺点。

  二、分析参数

  异步数据包不像网页那样具有唯一的 uri。网站作为传输数据的api,通常只使用一个api传输一种类型的数据,使用包中的参数通知服务器后台应该返回什么数据,以及我们需要的参数要分析的是这些影响背景的关键数据。

  点击我们找到的包,选择header,可以看到有几个下拉列

  

  我们需要注意的有三列:

  1.响应头

  请求头,我们抓取静态网站时也会用到的一组参数,比如user-agent,referer等字段,有的网站会在请求头中传递一些数据来通知后台,主要用于反爬虫,除了user-agent和referer,其他字段很少用到。具体分析,爬的时候注意。

  2.表单数据

  请求体,只存在于POST请求中,也是一组需要分析的参数,因为我们很少爬到POST请求的api,所以就不展开了。

  3.查询字符串参数

  这是最重要的一组参数,存在于 url 中。url链接问号后面的一串字符串是用来传递这组参数的,但是我们在f12中可以直观的看到,如下图所示。

  

  接下来我们需要开始分析这些参数,找出哪些有用,哪些不需要传输,哪些没用但需要传输。这里没有灵丹妙药。无非就是在删除参数后访问和检查传入的数据,或者寻找使用相同api的事件。有什么不同?我们可以使用python shell或者写一个python脚本来测试,例如

  

  经过测试,我们知道callback、jsonp、_参数是不需要的,type是需要但是没有意义,pn表示页数,sort表示排序方式(即热排序和最新排序),oid指定只有视频(但不是 av 编号),因此我们可以通过循环 pn 来抓取所有评论。

  三、提取数据

  大多数api使用json数据格式来传输数据。当然也有把参数直接加到网页url返回html的情况(可以用bs解析)。要解析 json,我们需要使用 json 库。我不会在这里详细介绍 json。知识(有需要的去百度一下

  

  如图,我们要找的路径是root->data->reply。每条评论的内容、作者、时间等都在这里

  四、总结

  动态网站的爬取主要在于对异步加载等前端技术的理解程度,以及对web开发的理解。虽然作为爬虫工具,前后端技术学习都是没落,甚至有些网站用js反向爬取,难度可以更高。但是对于数据挖掘来说,这种基本的爬虫技术就足够了,网上90%的数据爬取是没有问题的。

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线