中国裁判文书网全网最新爬虫分析
本文主要介绍交流一下裁判文书网的爬去规则,我主要是因为公司要求而去分析这个网站的,一看是看该网站服务器各种卡,蛋疼。用python的selenium模块去写太麻烦了,做不到大量爬取,迫不得已自己不断研究,终于攻破了该网站的js代码参数
![](http://upload-images.jianshu.io/upload_images/7787792-c04d4944f2db56c9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000/format/webp)
思路主要通过python去破解网站js的加密数据。该网站请求数据都是通过post请求的,分析一下header,会发现,它是一个post请求,请求的表单数据包括param、index、page、order、direction、vl5x、number、guid这几个参数。很显然,param是查询字符串,index是页码,page是一页展示的数据量,order是排序方式,其中,vl5x、number、guid是js代码加密生成得可变参数。一次性向对方服务器发送请求后获取相应得数据得。
![](http://upload-images.jianshu.io/upload_images/7787792-eb054fb3860b12bc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/631/format/webp)
![](http://upload-images.jianshu.io/upload_images/7787792-019f5ad15e86f554.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000/format/webp)
现在最关键得是如何解密这三个参数?我主要用得是python得PyV8模块去调度js代码,列出代码中使用得python模块。
![](http://upload-images.jianshu.io/upload_images/7787792-2b39a20e9b454c14.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/769/format/webp)
找一个浏览器里已经用过的vl5x去post ListContent,返回的是remind key,因此这个vl5x值是实时计算生成的。
到底这个值是怎么计算的呢,既然浏览器能算出vl5x的值,那算法应该隐藏在网页的JS文件中。好吧,继续找,在Lawyee.CPWSW.List.js文件里找到了这段代码:
![](http://upload-images.jianshu.io/upload_images/7787792-f2f3018e920c3270.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/790/format/webp)
vl5x的值是是用getKey()函数算出来的,而getKey里面传入得参数是你每次登陆网站,自动给你分配得动态cookies而产生得。
![](http://upload-images.jianshu.io/upload_images/7787792-67166490425c9c6e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/787/format/webp)
![](http://upload-images.jianshu.io/upload_images/7787792-f5e9ddc4c880d488.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/795/format/webp)
这样我们就可以得到vl5x动态参数。接下来就是比较麻烦得guid参数了,guid其实是一个动态的随机生成参数,附上python代码:
![](http://upload-images.jianshu.io/upload_images/7787792-528b6eedf159d84d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/999/format/webp)
然后拿这个guid参数取请求该网站的getcode网址,拿到number参数。
![](http://upload-images.jianshu.io/upload_images/7787792-cc74fbee01412f32.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/971/format/webp)
![](http://upload-images.jianshu.io/upload_images/7787792-ebe67cd3c7046751.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000/format/webp)
这样我们三个参数同时拿到,一次性向服务器发送请求,获取数据
![](http://upload-images.jianshu.io/upload_images/7787792-6446b5c8b975c47f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/732/format/webp)
这样我们就可以直接获取大量的司法文书数据了,展示一下效果
![](http://upload-images.jianshu.io/upload_images/7787792-867ba08cd1b4a401.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000/format/webp)
大家可以有问题可以和我交流学习,这个技术分享出来,希望可以帮到更多的人。
作者:再敲一串代码
链接:https://www.jianshu.com/p/da54d322ba31
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。