对爬取中国裁判文书网的分析

相信做爬虫的小伙伴们遇到‘中国裁判文书网’,就感觉无从下手。没关系,救星来了,帮你快速理清爬虫思路。
一.工具:谷歌浏览器
JavaScript Eval在线加密/解密,编码/解码工具 https://wangye.org/tools/scripts/eval/
二.要爬取的内容:所有案件的决定书的详细内容。
首先需要进入详情页,得到详情页的数据。
在这里插入图片描述
但右键查看‘网页源代码’,却什么内容都没有。
三.裁判文书网分析:
1.该网站是动态网站,(源代码里面有用的信息都没有)–>网页源代码是否含script标签–>列表页是否有专门的json接口->经发现:列表页有json接口。
2.研究json接口,发现参数vl5x,guid是随机字符串,其余的参数都是固定的。所以需要分析出这两个参数的来源,以及参数值是怎么设置的。
在这里插入图片描述
3.参数来源一般有以下几个:
①某一个url(一般不需要看Img/css/js,可能会在 网站的url/json的url),它的响应头Set-Cookie里面可能含有这些参数。注意:将网站的cookie从浏览器中全部清空(浏览器的更多工具->清除浏览数据)。因为cookie会有过期时间,如果cookie没有过期,服务器是不会将cookie放在set—cookie中返回。
②从json接口返回的json数据中,可能含有后续请求的参数,翻页参数中很常见;
③js加密得到的参数:文书网,工商信息网,美团网,抖音,知乎;
a.简单的js加密,可以直接使用python语言还原出来;
b.在python中执行js代码,execjs(windows)直接调js,不用还原。pypv8(Linux)直接可以调用js文件中的函数。
c.非常异常复杂的js加密,考虑APP端的信息爬取;(一般APP端的爬取比windows的稍简单)
先来分析vl5x参数**********
4.通过查找,Set—Cookie/json中都没有参数vl5x,此时去全局搜索vl5x,在Lawyee.CPWSW.JsTree.js文件和Lawyee.CPWSW.List.js文件这两个文件中,找到了参数cl5x
在这里插入图片描述
5. 发现参数vl5x是通过data: { “Param”: treeparam, “vl5x”: getKey(), “guid”: guid1, “number”: yzm1 }中的getKey()函数得到的一个值,接下来去分析getKey()函数
在这里插入图片描述
6.在Lawyee.CPWSW.ListExtend.js文件第371行中,发现了getKey函数的定义。
7.在getKey函数的定义中,发现eval()函数,该函数是对js代码进行加密的函数,所以需要对eval()函数进行还原。还原成js函数。先示范操作其中的一条语句eval(de("eval(_fxxx( )))),鼠标三击,将其复制,粘贴到上面的网站中:
用function (p, a, c, k, e, d) { e = function © { return (c < a ? “” : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) }; if (!’’.replace(/^/, String)) { while (c–) d[e©] = k[c] || e©; k = [function (e) { return d[e] } ]; e = function () { return ‘\w+’ }; c = 1; }; while (c–) if (k[c]) p = p.replace(new RegExp(’\b’ + e© + ‘\b’, ‘g’), k[c]); return p; }替换_fxxx
用function de(str, count, strReplace) {
var arrReplace = strReplace.split(’|’);
for (var i = 0; i < count; i++) {
str = str.replace(new RegExp(’\{’ + i + ‘\}’, ‘g’), arrReplace[i]);
}
return str;
}替换de
在这里插入图片描述
8.按照第7.8步,点击“解密”,依次将所有语句都解密出来,将最终结果粘贴到新创建的wenshu.js中在这里插入图片描述
9.你要的wenshu.js在这里。将其放在Python中,与wenshu.py同级。
10.在wenshu.js中。例如makeKey_5( ) ,发现里面包含Base64()类,hex_md5()类,hex_sha1()类,所以咱们需要去找这些类,发现在’网络‘,‘js’下找到‘Base64.js’‘md5.js’, ‘sha1.js’,然后将Base64定义函数的全部内容function Base64(…)复制粘贴到wenshu.js(注意放在getKey()函数里面,与其他所有定义函数同级)。hex_md5()类,hex_sha1()类也是如此。
11.在最终的wenshu.js中1995到2004行将var cookie=getCookie(‘vjkl5’)…注释掉。
12.因为在wenshu.js中getKey()函数需要传入一个参数cookie才能得到vl5x,所以我们需要获取cookie的值。查看Cookie信息在这里插入图片描述
13.vjkl5 = response.headers.getlist('Set-Cookie')[0].decode().split(';')[0].split('=')[1]代码提取出vjkl5这个cookie,传给getKey()函数,中间经过加密,最终返回的result就是vl5x这个参数。
function getKey(cookie){

var cookie = getCookie(‘vjkl5’)

var funIndex = strToLong(cookie) % arrFun.length;
var fun = arrFun[funIndex];
var result = fun(cookie);
return result
}
在这里插入图片描述
14.在python.py中需要安装PyExecJS包,实例化一个js对象,这个对象包含了js运行的环境,利用这个对象调用call(‘getKey’,vjkl5)函数。


未完待续…另一个参数guid的分析链接

猜你喜欢

转载自blog.csdn.net/niuming_rui/article/details/82786093
今日推荐