温馨提示:
爬虫玩得好,监狱进得早。数据玩得溜,牢饭吃个够。
《刑法》第 285 条,非法获取计算机信息系统数据罪。
违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。
正文:
豆瓣电影排行榜,这个网站,是Ajax动态加载数据的网站,这样的网站有两个特点:
【1】 右键 -> 查看网页源码中没有具体数据
【2】 滚动鼠标滑轮或者其他动作时加载,或者页面局部刷新
比如:腾讯招聘、小米应用商店、京东等等都是这样的网站类型
那对于这种网站的话,我们拼接URL地址、查看URL规律、正则和xpath都是没有意义的了,那只能是F12抓包找
我们进入到豆瓣电影网站,找到排行榜点进去:
我们先看看剧情的排行榜的电影吧:
然后我们按照步骤一步一步走,先看看源代码中有没有数据:
很显然是没有的,这个就是Ajax动态加载的特点,那我们就去F12抓包去,打开F12后先刷新页面,然后滚轮先在页面中往下走走,加载出点数据,毕竟最后还是要找URL地址规律的,然后点到XHR里面找数据包,先随便找一个吧:
我们看这个,哎呀这个是吗???其实不是的,因为刚才我们经过上面的步骤,滚动滑轮,加载数据,那不能就加载出一个吧,所以我们接着往下看:
我们看这个,数据显示的是数字的,这个是不是就是对应上面的什么剧情类总数、我没有看过的、可在线播放的数量啊
所以这个也不是,但是有点接近了对吧,我们接着看下一个数据包,因为不知道它页面数据的数据包是哪一个,我们只能一个一个看
这个就是了,我们看到这里面有什么国家、上映时间、电影名字和主演什么的,这个就是响应的JSON数据
一旦我们在Preview找到了相应的数据,我们就点开Headers进行分析,我们看这个请求方式是正常的GET请求,那URL的地址就是Preview中响应数据的地址,也就是JOSN数据地址
对于GET请求数据这么多,我们看下面的这个东西 Query String Parameters,这个就是查询参数的意思,这个查看参数就是上面URL地址 ? 后面的东西,就是给你格式化输出了下,然你好看一点
https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=0&limit=20
type=11&
interval_id=100%3A90&
action=&
start=0&
limit=20
所以我们到现在的话,就可以发现一个问题了,就是页面是
POST请求,去找FormData;
GET请求,去找Query String Parameters
那我们分析Query String Parameters里的数据规律
这样我们也不知道是什么,那就对比,我们找下一个数据包对比一下看看,这个
type还是11,可能是电影的类别吧;
interval_id还是100:90;
action还是没变;
start这个变了,它从上一个数据包的0,变成20了;
limit还是20也没变,这个应该是动态加载一次的电影数量吧
那我们在找一个数据包看看变化的规律,这个没变的还是没变,变了的还是那一个,这样看的话,这个start,下一次变得话就是60了,所以我们找到了规律就是:0、20、40、60…:
而且其他查询参数里面也没有时间戳、也没有加密的,所以我们就直接写代码
那我们先去弄一下URL地址,就是我们之前抓到的JSON数据地址:
https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=0&limit=20
那我们复制到浏览器看一下是什么样的,这就是那个JSON数据,我们在页面中更好看点,因为我们之前安装的这个插件JSONView,如果不装这个的话,我们打开这个网址的时候可能是乱的,但是数据是对的,就是看着比较乱
这里丢个链接,就是我们安装的步骤,可以安装一下,按照我里面说的走就可以安装
https://blog.csdn.net/Yxh666/article/details/111300868