爬取 裁判文书

裁判文书爬取只写了思路,有部分内容没公开。这篇文章只提供思路,不提供实现。仅供参考。

如果经济允许,可以直接购买裁判文书网的文书,一年10万元,和爬虫工程师开销和代理费用来说,10万元很划算了。

如果做实验使用,可以邮件或者加qq群在群里要,数量在百万以下一般会直接给。也免得增加文书网服务器的压力。

文书网已经放弃使用瑞数,现在使用的是免费的sojson加密

2019-04-09 文书网停服更新

2019-01-31 疯狂封ip

2018-08-07 增加7道爬虫防御,增加反爬难度,文书列表页返回的docId加密

2018-01-31 修改获取vl5x的js 还是eval函数,原理没变,换了换字符

2017-06-23 更新反爬策略 增加反爬难度 用的瑞数的产品 每一次请求翻页都要过一次验证码,加密一次密钥,带密钥访问下一个页面

谨以此文献给在我生命中留下回忆的非结构化团队。谢谢领导给了我充足的时间研究裁判文书网。

(1) 2019-06版 爬取裁判文书

首先找获取数据的页面。

页面请求参数

页面返回内容

浏览器 F12 很快就可以找到返回数据的list页面 http://wenshu.court.gov.cn/List/ListContent ,不过返回的数据是加密的。

用的是Post请求,请求参数有 Param Index Page Order Direction vl5x number guid ,cookie里的参数有 _gscu_2116842793 Hm_lvt_d2caefee2de09b8a6ea438d74fd98db2 _gscbrs_2116842793 ASP.NET_SessionId vjkl5 Hm_lpvt_d2caefee2de09b8a6ea438d74fd98db2 _gscs_2116842793,用于反爬参数的有3个,vl5x、number、guid 。

ctrl + F 搜索 guid number vl5x 发现
guid 是通过js生成。
number 第一页默认是 wens 后面的是数字
vl5x 通过混淆加密的js获得。在获取时要另获取vjkl5参数才能计算出vl5x

data: { "Param": listparam, "Index": index, "Page": page, "Order": order, "Direction": direction, "vl5x": getKey(), "number": yzm1, "guid": guid1 },

Lawyee.CPWSW.JsTree.js
Lawyee.CPWSW.List.js
Lawyee.CPWSW.ListExtend.js
pako.min.js

(1.1) guid

Lawyee.CPWSW.List.js


var createGuid = function () {
      return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}
	
var guid1 = createGuid() + createGuid() + "-" + createGuid() + "-" + createGuid() + createGuid() + "-" + createGuid() + createGuid() + createGuid();

(1.2) number

number 默认为 wens

Lawyee.CPWSW.List.js

看到这段代码,一阵心痛,看来文书网的程序员们很无奈,大家爬的时候注意一点,相互体谅一下,程序员何苦为难程序员。


var url = window.location.href;
var nyzm = url.indexOf("&number");
var subyzm = url.substring(nyzm + 1);
var n1yzm = subyzm.indexOf("&");
var yzm1 = subyzm.substr(7, 4);

var nyzm = url.indexOf("&guid");
var subguid = url.substring(nyzm + 1);
var n1guid = subguid.indexOf("&");
var guid1 = subguid.substr(5, 35);
if (yzm != undefined && yzm != "undefined") {
	yzm1 = yzm;
} if (guid != undefined && guid != "undefined") {
	guid1 = guid;
}


var yzm1; //dzf 20180805 验证码没什么作用,屏蔽
//            $.ajax({
//                url: "/ValiCode/GetCode", type: "POST", async: false,
//                data: { "guid": guid1 },
//                success: function (data) {
//                    yzm1 = data;
//                }
//            });


 data: { "Param": listparam, "Index": index, "Page": page, "Order": order, "Direction": direction, "vl5x": getKey(), "number": yzm1, "guid": guid1 },
 

(1.3) vl5x

Lawyee.CPWSW.ListExtend.js

还是老样子,eval函数,有换了个字符,不过看整个js又增加了点复杂度(对爬取的人复杂)


var _fxxx = function (p, a, c, k, e, d) {
    e = function (c) {
        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(c)] = k[c] || e(c)
        }
        k = [function (e) {
            return d[e]
        }];
        e = function () {
            return "\\w+"
        };
        c = 1
    }
    while (c--) {
        if (k[c]) {
            p = p.replace(new RegExp("\\b" + e(c) + "\\b", "g"), k[c])
        }
    }
    return p
};

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
}

function getKey() {
    eval(de('eval(_fxxx(\'e n(7){9 d=0;j(9 i=0;i<7.k;i++){d+=(7.g(i)<<(i%m))}f d}e p(7){9 d=0;j(9 i=0;i<7.k;i++){d+=(7.g(i)<<(i%m))+i}f d}e E(7,o){9 d=0;j(9 i=0;i<7.k;i++){d+=(7.g(i)<<(i%m))+(i*o)}f d}e x(7,o){9 d=0;j(9 i=0;i<7.k;i++){d+=(7.g(i)<<(i%m))+(i+o-7.g(i))}f d}e z(7){9 7=7.8(5,5*5)+7.8((5+1)*(5+1),3);9 a=7.8(5)+7.8(-4);9 b=7.8(4)+a.8(-6);f h(7).8(4,l)}e w(7){9 7=7.8(5,5*5)+"5"+7.8(1,2)+"1"+7.8((5+1)*(5+1),3);9 a=7.8(5)+7.8(4);9 b=7.8(t)+a.8(-6);9 c=7.8(4)+a.8(6);f h(c).8(4,l)}e A(7){9 7=7.8(5,5*5)+"r"+7.8(1,2)+7.8((5+1)*(5+1),3);9 a=n(7.8(5))+7.8(4);9 b=n(7.8(5))+7.8(4);9 c=7.8(4)+b.8(5);f h(c).8(1,l)}e y(7){9 7=7.8(5,5*5)+"r"+7.8(1,2)+7.8((5+1)*(5+1),3);9 a=p(7.8(5))+7.8(4);9 b=7.8(4)+a.8(5);9 c=n(7.8(5))+7.8(4);f h(b).8(3,l)}e B(7){9 7=7.8(5,5*5)+"2"+7.8(1,2)+7.8((5+1)*(5+1),3);9 d=0;j(9 i=0;i<7.8(1).k;i++){d+=(7.g(i)<<(i%m))}9 s=d+7.8(4);9 d=0;9 a=7.8(5);j(9 i=0;i<a.k;i++){d+=(a.g(i)<<(i%m))+i}a=d+""+7.8(4);9 b=h(7.8(1))+n(a.8(5));f h(b).8(3,l)}e v(7){9 q=u C();9 7=q.F(7.8(5,5*5)+7.8(1,2)+"1")+7.8((5+1)*(5+1),3);9 a=p(7.8(4,D))+7.8(-4);9 b=h(7.8(4))+a.8(2);9 a=7.8(3);9 c=n(7.8(5))+7.8(4);9 s=d+7.8(4);9 d=0;j(9 i=0;i<a.k;i++){d+=(a.g(i)<<(i%t))+i}a=d+""+7.8(4);f h(7).8(4,l)}\', 42, 42, \'|||||||str|substr|var||||long|{0}|return|charCodeAt|hex_md5||for|length|24|16|strToLong|step|strToLongEn|base|15|aa|12|new|{1}5|{1}1|strToLongEn3|{1}3|{1}0|{1}2|{1}4|Base64|10|strToLongEn2|encode\'.split(\'|\'), 0, {}))', 4, "function|makeKey_|(k(0)+|(c(0)+"));
    eval(_fxxx('o B(8){d j=p q();d 8=8.9(5,5*5)+8.9((5+1)*(5+1),3);d a=j.s(8.9(4,G))+8.9(2);d b=8.9(6)+a.9(2);d c=x(8.9(5))+8.9(4);d r=e+8.9(4);d e=0;d a=8.9(5);h(d i=0;i<a.g;i++){e+=(a.f(i)<<(i%k))+i}a=e+""+8.9(4);n l(b).9(2,m)}o F(8){d j=p q();d 8=j.s(8.9(5,5*4)+"E"+8.9(1,2))+8.9((5+1)*(5+1),3);d e=0;h(d i=0;i<8.9(1).g;i++){e+=(8.f(i)<<(i%k+5))+3+5}d r=e+8.9(4);d e=0;d a=8.9(5);h(d i=0;i<a.g;i++){e+=(a.f(i)<<(i%k))}a=e+""+8.9(4);d b=l(8.9(1))+x(a.9(5));n l(b).9(3,m)}o H(8){d j=p q();d 8=j.s(8.9(5,5*5-1)+"5"+"-"+"5")+8.9(1,2)+8.9((5+1)*(5+1),3);d e=0;h(d i=0;i<8.9(1).g;i++){e+=(8.f(i)<<(i%k))}d r=e+8.9(4);d e=0;d a=8.9(5);h(d i=0;i<a.g;i++){e+=(a.f(i)<<(i%k))}a=e+""+8.9(4);d b=l(8.9(1))+K(a.9(5));n l(b).9(4,m)}o J(8){d 8=8.9(5,5*5)+"5"+8.9(1,2)+"1"+8.9((5+1)*(5+1),3);d a=8.9(5)+8.9(4);d b=8.9(I)+a.9(-6);d c=t(8.9(4))+a.9(6);n l(c).9(4,m)}o w(8){d j=p q();d 8=j.s(8.9(5,5*5-1)+"5")+8.9(1,2)+8.9((5+1)*(5+1),3);d e=0;h(d i=0;i<8.9(1).g;i++){e+=(8.f(i)<<(i%k))}d r=e+8.9(4);d e=0;d a=8.9(5);h(d i=0;i<a.g;i++){e+=(a.f(i)<<(i%k))}a=e+""+8.9(4);d b=l(8.9(1))+t(a.9(5));n l(b).9(4,m)}o D(8){d j=p q();d 8=8.9(5,5*5-1)+"2"+8.9(1,2)+8.9((5+1)*(5+1),3);d e=0;h(d i=0;i<8.9(1).g;i++){e+=(8.f(i)<<(i%k))}d r=e+8.9(4);d e=0;d a=8.9(5);h(d i=0;i<a.g;i++){e+=(a.f(i)<<(i%k))}a=e+""+8.9(2);d b=8.9(1)+t(a.9(5));n l(b).9(2,m)}o y(8){d j=p q();d 8=8.9(5,5*5-1)+8.9((5+1)*(5+1),3)+"2"+8.9(1,2);d e=0;h(d i=0;i<8.9(1).g;i++){e+=(8.f(i)<<(i%k))}d r=e+8.9(4);d e=0;d a=8.9(5);h(d i=0;i<a.g;i++){e+=(a.f(i)<<(i%k))}a=e+""+8.9(2);d b=8.9(1)+t(8.9(5));n l(b).9(1,m)}o z(8){d j=p q();d 8=8.9(5,5*5-1)+"2"+8.9(1,2);d e=0;h(d i=0;i<8.9(1).g;i++){e+=(8.f(i)<<(i%k))}d r=e+8.9(4);d e=0;d a=8.9(5);h(d i=0;i<a.g;i++){e+=(a.f(i)<<(i%k))}a=e+""+8.9(2);d b=j.s(8.9(1)+t(8.9(5)));n l(b).9(1,m)}o C(8){d j=p q();d 8=8.9(5,5*5-1)+"2"+8.9(1,2);d e=0;h(d i=0;i<8.9(1).g;i++){e+=(8.f(i)<<(i%k))}d r=e+8.9(4);d e=0;d a=8.9(5);h(d i=0;i<a.g;i++){e+=(a.f(i)<<(i%k))}a=e+""+8.9(2);d b=j.s(8.9(1)+8.9(5)+8.9(1,3));n t(b).9(1,m)}o A(8){d j=p q();d 8=8.9(5,5*5-1)+"2"+8.9(1,2);d e=0;h(d i=0;i<8.9(1).g;i++){e+=(8.f(i)<<(i%k))}d r=e+8.9(4);d e=0;d a=8.9(5);h(d i=0;i<a.g;i++){e+=(a.f(i)<<(i%k))}a=e+""+8.9(2);d b=j.s(a.9(1)+8.9(5)+8.9(2,3));n t(b).9(1,m)}o N(8){d j=p q();d 8=8.9(5,5*5-1)+"2"+8.9(1,2)+"-"+"5";d e=0;h(d i=0;i<8.9(1).g;i++){e+=(8.f(i)<<(i%u))}d r=e+8.9(4);d e=0;d a=8.9(5);h(d i=0;i<a.g;i++){e+=(a.f(i)<<(i%k))+i}a=e+""+8.9(2);d b=j.s(a.9(1))+v(8.9(5),5)+8.9(2,3);n l(b).9(2,m)}o L(8){d j=p q();d 8=8.9(5,5*5-1)+"7"+8.9(1,2)+"-"+"5";d e=0;h(d i=0;i<8.9(1).g;i++){e+=(8.f(i)<<(i%u))}d r=e+8.9(4);d e=0;d a=8.9(5);h(d i=0;i<a.g;i++){e+=(a.f(i)<<(i%k))+i}a=e+""+8.9(2);d b=j.s(a.9(1))+v(8.9(5),5+1)+8.9(2+5,3);n l(b).9(0,m)}o R(8){d j=p q();d 8=8.9(5,5*5-1)+"7"+8.9(1,2)+"5"+8.9(2+5,3);d e=0;h(d i=0;i<8.9(1).g;i++){e+=(8.f(i)<<(i%u))}d r=e+8.9(4);d e=0;d a=8.9(5);h(d i=0;i<a.g;i++){e+=(a.f(i)<<(i%k))+i}a=e+""+8.9(2);d b=a.9(1)+v(8.9(5),5+1)+8.9(2+5,3);n l(b).9(0,m)}o P(8){d j=p q();d 8=8.9(5,5*5-1)+"7"+8.9(5,2)+"5"+8.9(2+5,3);d e=0;h(d i=0;i<8.9(1).g;i++){e+=(8.f(i)<<(i%u))}d r=e+8.9(4);d e=0;d a=8.9(5);h(d i=0;i<a.g;i++){e+=(a.f(i)<<(i%k))+i}a=e+""+8.9(2);d b=a.9(1)+O(8.9(5),5-1)+8.9(2+5,3);n l(b).9(0,m)}o M(8){n l(w(8)+Q(8)).9(1,m)}', 54, 54, "||||||||str|substr||||var|long|charCodeAt|length|for||base|16|hex_md5|24|return|function|new|Base64|aa|encode|hex_sha1|11|strToLongEn2|makeKey_10|strToLong|makeKey_12|makeKey_13|makeKey_15|makeKey_6|makeKey_14|makeKey_11|55|makeKey_7|10|makeKey_8|12|makeKey_9|strToLongEn|makeKey_17|makeKey_20|makeKey_16|strToLongEn3|makeKey_19|makeKey_5|makeKey_18".split("|"), 0, {}));
    eval(_fxxx("6 3f(0){7 5(1v(0)+g(0)).8(2,24)}6 1w(0){7 5(k(0)+b(0)).8(3,24)}6 1x(0){7 5(i(0)+9(0)).8(4,24)}6 1s(0){7 5(j(0)+a(0)).8(1,24)}6 1t(0){7 5(h(0)+c(0)).8(2,24)}6 1u(0){7 5(f(0)+m(0)).8(3,24)}6 1y(0){7 5(e(0)+g(0)).8(4,24)}6 1C(0){7 5(d(0)+l(0)).8(1,24)}6 1D(0){7 5(b(0)+g(0)).8(2,24)}6 1E(0){7 5(9(0)+l(0)).8(3,24)}6 1z(0){7 5(a(0)+n(0)).8(4,24)}6 1A(0){7 5(c(0)+k(0)).8(3,24)}6 1B(0){7 5(m(0)+i(0)).8(4,24)}6 1i(0){7 5(g(0)+j(0)).8(1,24)}6 1j(0){7 5(l(0)+h(0)).8(2,24)}6 1k(0){7 5(n(0)+f(0)).8(3,24)}6 1f(0){7 5(1g(0)+e(0)).8(1,24)}6 1h(0){7 5(o(0)+d(0)).8(2,24)}6 1l(0){7 5(k(0)+b(0)).8(3,24)}6 1p(0){7 5(i(0)+9(0)).8(4,24)}6 1q(0){7 5(j(0)+a(0)).8(3,24)}6 1r(0){7 5(h(0)+c(0)).8(4,24)}6 1m(0){7 5(f(0)+m(0)).8(1,24)}6 1n(0){7 5(e(0)+g(0)).8(2,24)}6 1o(0){7 5(d(0)+l(0)).8(3,24)}6 1V(0){7 5(b(0)+e(0)).8(4,24)}6 1W(0){7 5(9(0)+d(0)).8(1,24)}6 1X(0){7 5(a(0)+b(0)).8(2,24)}6 1S(0){7 5(c(0)+9(0)).8(3,24)}6 1T(0){7 5(m(0)+a(0)).8(4,24)}6 1U(0){7 5(g(0)+c(0)).8(1,24)}6 1Y(0){7 5(l(0)+k(0)).8(2,24)}6 22(0){7 5(o(0)+i(0)).8(3,24)}6 23(0){7 5(k(0)+j(0)).8(4,24)}6 25(0){7 5(i(0)+h(0)).8(3,24)}6 1Z(0){7 5(j(0)+f(0)).8(4,24)}6 20(0){7 5(h(0)+e(0)).8(1,24)}6 21(0){7 5(f(0)+d(0)).8(2,24)}6 1I(0){7 5(e(0)+b(0)).8(3,24)}6 1J(0){7 5(d(0)+9(0)).8(1,24)}6 1K(0){7 5(b(0)+a(0)).8(2,24)}6 1F(0){7 5(9(0)+c(0)).8(3,24)}6 1G(0){7 5(a(0)+b(0)).8(4,24)}6 1H(0){7 5(c(0)+9(0)).8(3,24)}6 1L(0){7 5(k(0)+a(0)).8(1,24)}6 1P(0){7 5(i(0)+c(0)).8(2,24)}6 1Q(0){7 5(j(0)+m(0)).8(3,24)}6 1R(0){7 5(h(0)+g(0)).8(4,24)}6 1M(0){7 5(f(0)+l(0)).8(1,24)}6 1N(0){7 5(e(0)+9(0)).8(2,24)}6 1O(0){7 5(d(0)+a(0)).8(3,24)}6 1e(0){7 5(b(0)+c(0)).8(4,24)}6 M(0){7 5(9(0)+e(0)).8(1,24)}6 D(0){7 5(a(0)+d(0)).8(2,24)}6 E(0){7 5(k(0)+b(0)).8(3,24)}6 F(0){7 5(i(0)+9(0)).8(4,24)}6 C(0){7 5(j(0)+a(0)).8(3,24)}6 z(0){7 5(h(0)+c(0)).8(4,24)}6 A(0){7 5(f(0)+h(0)).8(1,24)}6 B(0){7 5(e(0)+f(0)).8(2,24)}6 K(0){7 5(d(0)+e(0)).8(3,24)}6 L(0){7 5(k(0)+d(0)).8(1,24)}6 J(0){7 5(i(0)+b(0)).8(4,24)}6 G(0){7 5(j(0)+9(0)).8(1,24)}6 H(0){7 5(h(0)+a(0)).8(2,24)}6 I(0){7 5(f(0)+c(0)).8(3,24)}6 s(0){7 5(k(0)+k(0)).8(4,24)}6 x(0){7 5(i(0)+i(0)).8(1,24)}6 u(0){7 5(j(0)+j(0)).8(2,24)}6 p(0){7 5(h(0)+h(0)).8(3,24)}6 t(0){7 5(f(0)+f(0)).8(4,24)}6 w(0){7 5(e(0)+e(0)).8(3,24)}6 v(0){7 5(d(0)+d(0)).8(4,24)}6 y(0){7 5(b(0)+b(0)).8(1,24)}6 q(0){7 5(9(0)+9(0)).8(2,24)}6 r(0){7 5(a(0)+a(0)).8(3,24)}6 N(0){7 5(c(0)+c(0)).8(4,24)}6 14(0){7 5(m(0)+m(0)).8(3,24)}6 15(0){7 5(g(0)+g(0)).8(4,24)}6 16(0){7 5(l(0)+g(0)).8(1,24)}6 11(0){7 5(f(0)+l(0)).8(2,24)}6 12(0){7 5(e(0)+d(0)).8(1,24)}6 13(0){7 5(d(0)+b(0)).8(2,24)}6 17(0){7 5(b(0)+9(0)).8(3,24)}6 1b(0){7 5(9(0)+9(0)).8(4,24)}6 1c(0){7 5(a(0)+a(0)).8(1,24)}6 1d(0){7 5(k(0)+k(0)).8(2,24)}6 18(0){7 5(i(0)+i(0)).8(3,24)}6 19(0){7 5(j(0)+j(0)).8(4,24)}6 1a(0){7 5(h(0)+h(0)).8(1,24)}6 R(0){7 5(f(0)+f(0)).8(2,24)}6 S(0){7 5(e(0)+e(0)).8(3,24)}6 T(0){7 5(d(0)+d(0)).8(4,24)}6 O(0){7 5(b(0)+b(0)).8(3,24)}6 P(0){7 5(9(0)+9(0)).8(4,24)}6 Q(0){7 5(a(0)+a(0)).8(1,24)}6 U(0){7 5(c(0)+c(0)).8(2,24)}6 Y(0){7 5(m(0)+i(0)).8(3,24)}6 Z(0){7 5(g(0)+j(0)).8(1,24)}6 10(0){7 5(b(0)+h(0)).8(1,24)}6 V(0){7 5(9(0)+f(0)).8(2,24)}6 W(0){7 5(a(0)+e(0)).8(3,24)}6 X(0){7 5(c(0)+d(0)).8(4,24)}6 26(0){7 5(m(0)+b(0)).8(1,24)}6 3c(0){7 5(g(0)+9(0)).8(2,24)}6 3d(0){7 5(l(0)+a(0)).8(3,24)}6 3e(0){7 5(g(0)+c(0)).8(4,24)}6 39(0){7 5(l(0)+m(0)).8(1,24)}6 3a(0){7 5(n(0)+g(0)).8(2,24)}6 3b(0){7 5(k(0)+l(0)).8(3,24)}6 3i(0){7 5(i(0)+f(0)).8(4,24)}6 3j(0){7 5(j(0)+e(0)).8(3,24)}6 3k(0){7 5(h(0)+d(0)).8(4,24)}6 2E(0){7 5(f(0)+b(0)).8(1,24)}6 3g(0){7 5(e(0)+9(0)).8(2,24)}6 3h(0){7 5(d(0)+a(0)).8(1,24)}6 38(0){7 5(b(0)+k(0)).8(2,24)}6 2Z(0){7 5(9(0)+i(0)).8(3,24)}6 30(0){7 5(a(0)+j(0)).8(4,24)}6 31(0){7 5(c(0)+h(0)).8(1,24)}6 2W(0){7 5(m(0)+f(0)).8(2,24)}6 2X(0){7 5(g(0)+e(0)).8(3,24)}6 2Y(0){7 5(l(0)+d(0)).8(4,24)}6 35(0){7 5(e(0)+b(0)).8(1,24)}6 36(0){7 5(d(0)+9(0)).8(2,24)}6 37(0){7 5(b(0)+a(0)).8(3,24)}6 32(0){7 5(9(0)+c(0)).8(4,24)}6 33(0){7 5(a(0)+m(0)).8(3,24)}6 34(0){7 5(c(0)+g(0)).8(4,24)}6 3D(0){7 5(k(0)+b(0)).8(1,24)}6 3B(0){7 5(i(0)+9(0)).8(2,24)}6 3C(0){7 5(j(0)+a(0)).8(3,24)}6 3y(0){7 5(h(0)+c(0)).8(1,24)}6 3z(0){7 5(f(0)+m(0)).8(1,24)}6 3A(0){7 5(e(0)+g(0)).8(2,24)}6 3I(0){7 5(d(0)+l(0)).8(3,24)}6 3J(0){7 5(b(0)+g(0)).8(4,24)}6 3H(0){7 5(9(0)+l(0)).8(1,24)}6 3E(0){7 5(a(0)+n(0)).8(2,24)}6 3F(0){7 5(c(0)+k(0)).8(3,24)}6 3G(0){7 5(b(0)+i(0)).8(4,24)}6 3x(0){7 5(9(0)+j(0)).8(1,24)}6 3o(0){7 5(a(0)+h(0)).8(2,24)}6 3p(0){7 5(c(0)+f(0)).8(3,24)}6 3q(0){7 5(m(0)+e(0)).8(4,24)}6 3l(0){7 5(g(0)+d(0)).8(3,24)}6 3m(0){7 5(l(0)+b(0)).8(4,24)}6 3n(0){7 5(9(0)+9(0)).8(1,24)}6 3u(0){7 5(a(0)+a(0)).8(2,24)}6 3v(0){7 5(c(0)+c(0)).8(3,24)}6 3w(0){7 5(e(0)+m(0)).8(1,24)}6 3r(0){7 5(d(0)+g(0)).8(2,24)}6 3s(0){7 5(b(0)+l(0)).8(3,24)}6 3t(0){7 5(9(0)+e(0)).8(4,24)}6 2V(0){7 5(a(0)+d(0)).8(1,24)}6 2n(0){7 5(c(0)+b(0)).8(2,24)}6 2o(0){7 5(h(0)+9(0)).8(3,24)}6 2p(0){7 5(f(0)+a(0)).8(4,24)}6 2k(0){7 5(e(0)+c(0)).8(1,24)}6 2l(0){7 5(d(0)+k(0)).8(3,24)}6 2m(0){7 5(b(0)+i(0)).8(1,24)}6 2t(0){7 5(9(0)+j(0)).8(2,24)}6 2u(0){7 5(a(0)+h(0)).8(3,24)}6 2v(0){7 5(c(0)+f(0)).8(4,24)}6 2q(0){7 5(k(0)+e(0)).8(3,24)}6 2r(0){7 5(i(0)+d(0)).8(4,24)}6 2s(0){7 5(j(0)+b(0)).8(4,24)}6 2j(0){7 5(h(0)+9(0)).8(1,24)}6 2a(0){7 5(f(0)+a(0)).8(2,24)}6 2b(0){7 5(e(0)+c(0)).8(3,24)}6 2c(0){7 5(d(0)+b(0)).8(4,24)}6 27(0){7 5(b(0)+9(0)).8(1,24)}6 28(0){7 5(9(0)+a(0)).8(2,24)}6 29(0){7 5(a(0)+c(0)).8(3,24)}6 2g(0){7 5(c(0)+k(0)).8(4,24)}6 2h(0){7 5(m(0)+i(0)).8(3,24)}6 2i(0){7 5(g(0)+j(0)).8(4,24)}6 2d(0){7 5(g(0)+h(0)).8(1,24)}6 2e(0){7 5(l(0)+a(0)).8(2,24)}6 2f(0){7 5(d(0)+b(0)).8(2,24)}6 2M(0){7 5(b(0)+9(0)).8(3,24)}6 2N(0){7 5(9(0)+a(0)).8(1,24)}6 2O(0){7 5(a(0)+c(0)).8(2,24)}6 2J(0){7 5(c(0)+m(0)).8(3,24)}6 2K(0){7 5(k(0)+g(0)).8(4,24)}6 2L(0){7 5(i(0)+l(0)).8(1,24)}6 2S(0){7 5(j(0)+e(0)).8(2,24)}6 2T(0){7 5(h(0)+d(0)).8(3,24)}6 2U(0){7 5(f(0)+b(0)).8(4,24)}6 2P(0){7 5(e(0)+9(0)).8(1,24)}6 2Q(0){7 5(d(0)+a(0)).8(3,24)}6 2R(0){7 5(b(0)+c(0)).8(1,24)}6 2I(0){7 5(9(0)+k(0)).8(2,24)}6 2z(0){7 5(a(0)+i(0)).8(3,24)}6 2A(0){7 5(c(0)+j(0)).8(4,24)}6 2B(0){7 5(b(0)+h(0)).8(3,24)}6 2w(0){7 5(9(0)+f(0)).8(4,24)}6 2x(0){7 5(a(0)+e(0)).8(4,24)}6 2y(0){7 5(c(0)+d(0)).8(1,24)}6 2F(0){7 5(m(0)+b(0)).8(2,24)}6 2G(0){7 5(g(0)+9(0)).8(3,24)}6 2H(0){7 5(l(0)+a(0)).8(4,24)}6 2C(0){7 5(9(0)+c(0)).8(1,24)}6 2D(0){7 5(a(0)+m(0)).8(2,24)}", 62, 232, "str|||||hex_md5|function|return|substr|makeKey_0|makeKey_1|makeKey_19|makeKey_4|makeKey_18|makeKey_17|makeKey_10|makeKey_3|makeKey_9|makeKey_15|makeKey_16|makeKey_14|makeKey_7|makeKey_5|makeKey_8|makeKey_12|makeKey_90|makeKey_95|makeKey_96|makeKey_87|makeKey_91|makeKey_89|makeKey_93|makeKey_92|makeKey_88|makeKey_94|makeKey_78|makeKey_79|makeKey_80|makeKey_77|makeKey_74|makeKey_75|makeKey_76|makeKey_84|makeKey_85|makeKey_86|makeKey_83|makeKey_81|makeKey_82|makeKey_73|makeKey_97|makeKey_114|makeKey_115|makeKey_116|makeKey_111|makeKey_112|makeKey_113|makeKey_117|makeKey_121|makeKey_122|makeKey_123|makeKey_118|makeKey_119|makeKey_120|makeKey_101|makeKey_102|makeKey_103|makeKey_98|makeKey_99|makeKey_100|makeKey_104|makeKey_108|makeKey_109|makeKey_110|makeKey_105|makeKey_106|makeKey_107|makeKey_72|makeKey_37|makeKey_6|makeKey_38|makeKey_34|makeKey_35|makeKey_36|makeKey_39|makeKey_43|makeKey_44|makeKey_45|makeKey_40|makeKey_41|makeKey_42|makeKey_24|makeKey_25|makeKey_26|makeKey_11|makeKey_22|makeKey_23|makeKey_27|makeKey_31|makeKey_32|makeKey_33|makeKey_28|makeKey_29|makeKey_30|makeKey_62|makeKey_63|makeKey_64|makeKey_59|makeKey_60|makeKey_61|makeKey_65|makeKey_69|makeKey_70|makeKey_71|makeKey_66|makeKey_67|makeKey_68|makeKey_49|makeKey_50|makeKey_51|makeKey_46|makeKey_47|makeKey_48|makeKey_52|makeKey_56|makeKey_57|makeKey_58|makeKey_53|makeKey_54||makeKey_55|makeKey_124|makeKey_192|makeKey_193|makeKey_194|makeKey_189|makeKey_190|makeKey_191|makeKey_198|makeKey_199|makeKey_200|makeKey_195|makeKey_196|makeKey_197|makeKey_188|makeKey_179|makeKey_180|makeKey_181|makeKey_176|makeKey_177|makeKey_178|makeKey_185|makeKey_186|makeKey_187|makeKey_182|makeKey_183|makeKey_184|makeKey_217|makeKey_218|makeKey_219|makeKey_214|makeKey_215|makeKey_216|makeKey_223|makeKey_224|makeKey_134|makeKey_220|makeKey_221|makeKey_222|makeKey_213|makeKey_204|makeKey_205|makeKey_206|makeKey_201|makeKey_202|makeKey_203|makeKey_210|makeKey_211|makeKey_212|makeKey_207|makeKey_208|makeKey_209|makeKey_175|makeKey_141|makeKey_142|makeKey_143|makeKey_138|makeKey_139|makeKey_140|makeKey_147|makeKey_148|makeKey_149|makeKey_144|makeKey_145|makeKey_146|makeKey_137|makeKey_128|makeKey_129|makeKey_130|makeKey_125|makeKey_126|makeKey_127|makeKey_21|makeKey_135|makeKey_136|makeKey_131|makeKey_132|makeKey_133|makeKey_166|makeKey_167|makeKey_168|makeKey_163|makeKey_164|makeKey_165|makeKey_172|makeKey_173|makeKey_174|makeKey_169|makeKey_170|makeKey_171|makeKey_162|makeKey_153|makeKey_154|makeKey_155|makeKey_151|makeKey_152|makeKey_150|makeKey_159|makeKey_160|makeKey_161|makeKey_158|makeKey_156|makeKey_157".split("|"), 0, {}));
    eval(_fxxx("5 y(0){7 6(d(0)+m(0)).9(3,8)}5 z(0){7 6(e(0)+l(0)).9(4,8)}5 w(0){7 6(f(0)+e(0)).9(2,8)}5 x(0){7 6(a(0)+f(0)).9(3,8)}5 C(0){7 6(b(0)+a(0)).9(1,8)}5 D(0){7 6(c(0)+b(0)).9(2,8)}5 A(0){7 6(d(0)+c(0)).9(3,8)}5 B(0){7 6(h(0)+d(0)).9(4,8)}5 v(0){7 6(i(0)+j(0)).9(1,8)}5 p(0){7 6(e(0)+g(0)).9(2,8)}5 q(0){7 6(f(0)+k(0)).9(3,8)}5 n(0){7 6(a(0)+h(0)).9(4,8)}5 o(0){7 6(b(0)+i(0)).9(1,8)}5 t(0){7 6(c(0)+e(0)).9(3,8)}5 u(0){7 6(d(0)+a(0)).9(1,8)}5 r(0){7 6(j(0)+b(0)).9(2,8)}5 s(0){7 6(g(0)+c(0)).9(3,8)}5 N(0){7 6(k(0)+d(0)).9(4,8)}5 O(0){7 6(h(0)+M(0)).9(3,8)}5 Q(0){7 6(i(0)+m(0)).9(4,8)}5 G(0){7 6(e(0)+l(0)).9(4,8)}5 F(0){7 6(f(0)+e(0)).9(2,8)}5 H(0){7 6(a(0)+f(0)).9(3,8)}5 K(0){7 6(b(0)+a(0)).9(1,8)}5 J(0){7 6(c(0)+b(0)).9(2,8)}5 I(0){7 6(d(0)+c(0)).9(3,8)}5 E(0){7 6(a(0)+d(0)).9(4,8)}5 L(0){7 6(b(0)+j(0)).9(1,8)}5 P(0){7 6(c(0)+g(0)).9(2,8)}", 53, 53, "str|||||function|hex_md5|return|24|substr|makeKey_19|makeKey_0|makeKey_1|makeKey_4|makeKey_17|makeKey_18|makeKey_15|makeKey_9|makeKey_10|makeKey_14|makeKey_16|makeKey_7|makeKey_3|makeKey_236|makeKey_237|makeKey_234|makeKey_235|makeKey_240|makeKey_241|makeKey_238|makeKey_239|makeKey_233|makeKey_227|makeKey_228|makeKey_225|makeKey_226|makeKey_231|makeKey_232|makeKey_229|makeKey_230|makeKey_251|makeKey_246|makeKey_245|makeKey_247|makeKey_250|makeKey_249|makeKey_248|makeKey_252|makeKey_5|makeKey_242|makeKey_243|makeKey_253|makeKey_244".split("|"), 0, {}));
    eval(_fxxx("7 p(0){6 5(a(0)+a(0)).8(3,9)}7 G(0){6 5(n(0)+i(0)).8(4,9)}7 E(0){6 5(l(0)+j(0)).8(1,9)}7 I(0){6 5(m(0)+h(0)).8(3,9)}7 z(0){6 5(c(0)+g(0)).8(1,9)}7 C(0){6 5(b(0)+k(0)).8(2,9)}7 B(0){6 5(a(0)+f(0)).8(3,9)}7 D(0){6 5(f(0)+e(0)).8(4,9)}7 y(0){6 5(e(0)+d(0)).8(3,9)}7 A(0){6 5(d(0)+c(0)).8(4,9)}7 H(0){6 5(c(0)+b(0)).8(4,9)}7 J(0){6 5(b(0)+a(0)).8(1,9)}7 F(0){6 5(a(0)+d(0)).8(2,9)}7 x(0){6 5(g(0)+c(0)).8(3,9)}7 r(0){6 5(k(0)+b(0)).8(4,9)}7 q(0){6 5(f(0)+a(0)).8(1,9)}7 o(0){6 5(e(0)+i(0)).8(2,9)}7 v(0){6 5(d(0)+j(0)).8(3,9)}7 u(0){6 5(c(0)+h(0)).8(4,9)}7 s(0){6 5(b(0)+g(0)).8(3,9)}7 t(0){6 5(d(0)+b(0)).8(4,9)}7 w(0){6 5(c(0)+d(0)).8(1,9)}7 K(0){6 5(b(0)+c(0)).8(2,9)}7 U(0){6 5(a(0)+b(0)).8(2,9)}7 Y(0){6 5(n(0)+a(0)).8(3,9)}7 W(0){6 5(l(0)+n(0)).8(1,9)}7 X(0){6 5(m(0)+l(0)).8(2,9)}7 V(0){6 5(f(0)+m(0)).8(3,9)}7 11(0){6 5(e(0)+f(0)).8(4,9)}7 12(0){6 5(d(0)+e(0)).8(1,9)}7 Z(0){6 5(c(0)+d(0)).8(2,9)}7 10(0){6 5(b(0)+c(0)).8(3,9)}7 N(0){6 5(a(0)+b(0)).8(4,9)}7 O(0){6 5(i(0)+a(0)).8(1,9)}7 L(0){6 5(j(0)+i(0)).8(3,9)}7 M(0){6 5(h(0)+j(0)).8(1,9)}7 P(0){6 5(g(0)+h(0)).8(2,9)}7 S(0){6 5(k(0)+g(0)).8(3,9)}7 T(0){6 5(f(0)+k(0)).8(4,9)}7 Q(0){6 5(e(0)+f(0)).8(3,9)}7 R(0){6 5(e(0)+e(0)).8(4,9)}", 62, 65, "str|||||hex_md5|return|function|substr|24|makeKey_4|makeKey_1|makeKey_0|makeKey_19|makeKey_18|makeKey_17|makeKey_9|makeKey_16|makeKey_14|makeKey_15|makeKey_10|makeKey_3|makeKey_7|makeKey_5|makeKey_270|makeKey_254|makeKey_269|makeKey_268|makeKey_273|makeKey_274|makeKey_272|makeKey_271|makeKey_275|makeKey_267|makeKey_262|makeKey_258|makeKey_263|makeKey_260|makeKey_259|makeKey_261|makeKey_256|makeKey_266|makeKey_255|makeKey_264|makeKey_257|makeKey_265|makeKey_276|makeKey_288|makeKey_289|makeKey_286|makeKey_287|makeKey_290|makeKey_293|makeKey_294|makeKey_291|makeKey_292|makeKey_277|makeKey_281|makeKey_279|makeKey_280|makeKey_278|makeKey_284|makeKey_285|makeKey_282|makeKey_283".split("|"), 0, {}));
    eval(de("eval(_fxxx('6 1F(0){5 7(b(0)+b(0)).8(4,24)}6 W(0){5 7(9(0)+9(0)).8(1,24)}6 V(0){5 7(a(0)+a(0)).8(2,24)}6 U(0){5 7{3}c(0)).8(3,24)}6 X(0){5 7(h(0)+h(0)).8(4,24)}6 10(0){5 7(g(0)+g(0)).8(1,24)}6 Z(0){5 7(f(0)+f(0)).8(2,24)}6 Y(0){5 7(d(0)+d(0)).8(3,24)}6 P(0){5 7(e(0)+e(0)).8(4,24)}6 O(0){5 7(b(0)+b(0)).8(3,24)}6 N(0){5 7(9(0)+9(0)).8(4,24)}6 Q(0){5 7(a(0)+a(0)).8(1,24)}6 T(0){5 7{3}c(0)).8(2,24)}6 S(0){5 7{2}k(0)).8(2,24)}6 R(0){5 7(m(0)+m(0)).8(3,24)}6 1a(0){5 7(l(0)+l(0)).8(1,24)}6 19(0){5 7(i(0)+i(0)).8(2,24)}6 18(0){5 7(j(0)+j(0)).8(3,24)}6 1b(0){5 7(d(0)+d(0)).8(4,24)}6 1e(0){5 7(b(0)+b(0)).8(1,24)}6 1d(0){5 7(9(0)+9(0)).8(2,24)}6 1c(0){5 7(a(0)+a(0)).8(3,24)}6 13(0){5 7{3}c(0)).8(4,24)}6 12(0){5 7(h(0)+h(0)).8(1,24)}6 11(0){5 7(g(0)+g(0)).8(3,24)}6 14(0){5 7(f(0)+f(0)).8(1,24)}6 17(0){5 7(d(0)+d(0)).8(2,24)}6 16(0){5 7(e(0)+e(0)).8(3,24)}6 15(0){5 7(b(0)+b(0)).8(4,24)}6 M(0){5 7(9(0)+9(0)).8(3,24)}6 w(0){5 7(a(0)+a(0)).8(4,24)}6 s(0){5 7{3}c(0)).8(4,24)}6 o(0){5 7(b(0)+k(0)).8(1,24)}6 t(0){5 7(9(0)+m(0)).8(2,24)}6 r(0){5 7(a(0)+l(0)).8(3,24)}6 v(0){5 7{3}i(0)).8(4,24)}6 u(0){5 7(b(0)+j(0)).8(1,24)}6 q(0){5 7(9(0)+d(0)).8(2,24)}6 n(0){5 7(a(0)+e(0)).8(3,24)}6 p(0){5 7{3}e(0)).8(4,24)}6 H(0){5 7(h(0)+b(0)).8(3,24)}6 G(0){5 7(g(0)+9(0)).8(4,24)}6 F(0){5 7(f(0)+a(0)).8(2,24)}6 I(0){5 7(9(0)+c(0)).8(3,24)}6 L(0){5 7(a(0)+h(0)).8(1,24)}6 J(0){5 7{3}g(0)).8(2,24)}6 E(0){5 7(d(0)+f(0)).8(3,24)}6 z(0){5 7(e(0)+d(0)).8(4,24)}6 y(0){5 7(b(0)+e(0)).8(1,24)}6 x(0){5 7(9(0)+b(0)).8(2,24)}6 A(0){5 7(a(0)+9(0)).8(3,24)}6 D(0){5 7{3}a(0)).8(4,24)}6 C(0){5 7(i(0)+c(0)).8(1,24)}6 B(0){5 7(j(0)+k(0)).8(3,24)}6 K(0){5 7(d(0)+m(0)).8(1,24)}6 1f(0){5 7(e(0)+l(0)).8(2,24)}6 1N(0){5 7(b(0)+i(0)).8(3,24)}6 1M(0){5 7(9(0)+j(0)).8(4,24)}6 1L(0){5 7(a(0)+d(0)).8(3,24)}6 1Q(0){5 7(e(0)+b(0)).8(4,24)}6 1P(0){5 7(b(0)+9(0)).8(4,24)}6 1O(0){5 7(9(0)+a(0)).8(1,24)}6 1H(0){5 7(a(0)+c(0)).8(2,24)}6 1G(0){5 7{3}h(0)).8(3,24)}6 1w(0){5 7(h(0)+g(0)).8(4,24)}6 1K(0){5 7(g(0)+f(0)).8(2,24)}6 1J(0){5 7(f(0)+d(0)).8(3,24)}6 1I(0){5 7(d(0)+e(0)).8(1,24)}6 1R(0){5 7(e(0)+b(0)).8(2,24)}6 20(0){5 7(b(0)+9(0)).8(3,24)}6 1Y(0){5 7(9(0)+a(0)).8(4,24)}6 21(0){5 7(a(0)+c(0)).8(1,24)}6 1Z(0){5 7{3}f(0)).8(2,24)}6 23(0){5 7{2}d(0)).8(3,24)}6 22(0){5 7(m(0)+e(0)).8(4,24)}6 1U(0){5 7(l(0)+b(0)).8(1,24)}6 1T(0){5 7(i(0)+9(0)).8(3,24)}6 1S(0){5 7(j(0)+a(0)).8(1,24)}6 1X(0){5 7(d(0)+c(0)).8(2,24)}6 1W(0){5 7(b(0)+d(0)).8(3,24)}6 1V(0){5 7(9(0)+e(0)).8(4,24)}6 1o(0){5 7(a(0)+b(0)).8(3,24)}6 1n(0){5 7{3}9(0)).8(4,24)}6 1m(0){5 7(h(0)+a(0)).8(4,24)}6 1r(0){5 7(g(0)+c(0)).8(1,24)}6 1q(0){5 7(f(0)+i(0)).8(2,24)}6 1p(0){5 7(d(0)+j(0)).8(3,24)}6 1i(0){5 7(e(0)+d(0)).8(4,24)}6 1h(0){5 7(b(0)+e(0)).8(1,24)}6 1g(0){5 7(9(0)+b(0)).8(2,24)}6 1l(0){5 7(a(0)+9(0)).8(3,24)}6 1k(0){5 7{3}a(0)).8(4,24)}6 1j(0){5 7(d(0)+a(0)).8(2,24)}6 1s(0){5 7(e(0)+c(0)).8(3,24)}6 1B(0){5 7(b(0)+f(0)).8(1,24)}6 1A(0){5 7(9(0)+d(0)).8(2,24)}6 1z(0){5 7(a(0)+e(0)).8(3,24)}6 1E(0){5 7{3}b(0)).8(4,24)}6 1D(0){5 7(i(0)+9(0)).8(1,24)}6 1C(0){5 7(j(0)+a(0)).8(2,24)}6 1v(0){5 7(d(0)+c(0)).8(3,24)}6 1u(0){5 7(e(0)+d(0)).8(4,24)}6 1t(0){5 7(b(0)+e(0)).8(1,24)}6 1y(0){5 7(9(0)+b(0)).8(3,24)}6 1x(0){5 7(a(0)+9(0)).8(1,24)}', 62, 129, 'str|||||return|{0}|hex_md5|substr|{1}0|{1}1|{1}19|{1}4|{1}17|{1}18|{1}7|{1}3|{1}5|{1}9|{1}10|{1}14|{1}16|{1}15|{1}333|{1}327|{1}334|{1}332|{1}329|{1}326|{1}328|{1}331|{1}330|{1}325|{1}344|{1}343|{1}342|{1}345|{1}348|{1}347|{1}346|{1}341|{1}337|{1}336|{1}335|{1}338|{1}340|{1}349|{1}339|{1}324|{1}305|{1}304|{1}303|{1}306|{1}309|{1}308|{1}307|{1}298|{1}297|{1}296|{1}299|{1}302|{1}301|{1}300|{1}319|{1}318|{1}317|{1}320|{1}323|{1}322|{1}321|{1}312|{1}311|{1}310|{1}313|{1}316|{1}315|{1}314|{1}350|{1}384|{1}383|{1}382|{1}387|{1}386|{1}385|{1}378|{1}377|{1}376|{1}381|{1}380|{1}379|{1}388|{1}397|{1}396|{1}395|{1}359|{1}399|{1}398|{1}391|{1}390|{1}389|{1}394|{1}393|{1}392|{1}295|{1}358|{1}357|{1}362|{1}361|{1}360|{1}353|{1}352|{1}351|{1}356|{1}355|{1}354|{1}363|{1}372|{1}371|{1}370|{1}375|{1}374|{1}373|{1}365|{1}367|{1}364|{1}366|{1}369|{1}368|'.split('|'), 0, {}))", 4, "function|makeKey_|(k(0)+|(c(0)+"));
    eval(_fxxx("0 2=2f('2e');0 1=[2d,2i,2h,2g,29,28,27,2c,2b,2a,2j,2s,2r,2q,2v,2u,2t,2m,2l,2k,2p,2o,2n,1Q,1P,1O,1T,1S,1R,1K,1J,1I,1N,1M,1L,1U,23,22,21,26,25,24,1X,1W,1V,20,1Z,1Y,2w,34,33,32,37,36,35,2Y,2X,2W,31,30,2Z,38,3h,3g,3f,3k,3j,3i,3b,3a,39,3e,3d,3c,2F,2E,2D,2I,2H,2G,2z,2y,2x,2C,2B,2A,2J,2S,2R,2Q,2V,2U,2T,2M,2L,2K,2P,2O,2N,C,B,A,F,E,D,w,v,u,z,y,x,G,P,O,N,S,R,Q,J,I,H,M,L,K,d,c,b,g,f,e,7,6,5,a,9,8,h,q,p,o,t,s,r,k,j,i,n,m,l,T,1r,1q,1p,1u,1t,1s,1l,1k,1j,1o,1n,1m,1v,1E,1D,1C,1H,1G,1F,1y,1x,1w,1B,1A,1z,12,11,10,15,14,13,W,V,U,Z,Y,X,16,1f,1e,1d,1i,1h,1g,19,18,17,1c,1b,1a,3l,5w,5v,5u,5z,5y,5x,5q,5p,5o,5t,5s,5r,5A,5J,5I,5H,5M,5L,5K,5D,5C,5B,5G,5F,5E,57,56,55,5a,59,58,51,50,4Z,54,53,52,5b,5k,5j,5i,5n,5m,5l,5e,5d,5c,5h,5g,5f,5N,6l,6k,6j,6o,6n,6m,6f,6e,6d,6i,6h,6g,6p,6y,6x,6w,6B,6A,6z,6s,6r,6q,6v,6u,6t,5W,5V,5U,5Z,5Y,5X,5Q,5P,5O,5T,5S,5R,60,69,68,67,6c,6b,6a,63,62,61,66,65,64,3T,3S,3R,3W,3V,3U,3N,3M,3L,3Q,3P,3O,3X,46,45,44,49,48,47,40,3Z,3Y,43,42,41,3u,3t,3s,3x,3w,3v,3o,3n,3m,3r,3q,3p,3y,3H,3G,3F,3K,3J,3I,3B,3A,3z,3E,3D,3C,4a,4I,4H,4G,4L,4K,4J,4C,4B,4A,4F,4E,4D,4M,4V,4U,4T,4Y,4X,4W,4P,4O,4N,4S,4R,4Q,4j,4i,4h,4m,4l,4k,4d,4c,4b,4g,4f,4e,4n,4w,4v,4u,4z,4y,4x,4q,4p,4o];0 3=4t(2)%1.4s;0 4=1[3];0 4r=4(2);", 62, 410, eval(de("'var|arrFun|cookie|funIndex|fun|{0}132|{0}131|{0}130|{0}135|{0}134|{0}133|{0}126|{0}125|{0}124|{0}129|{0}128|{0}127|{0}136|{0}145|{0}144|{0}143|{0}148|{0}147|{0}146|{0}139|{0}138|{0}137|{0}142|{0}141|{0}140|{0}107|{0}106|{0}105|{0}110|{0}109|{0}108|{0}101|{0}100|{0}99|{0}104|{0}103|{0}102|{0}111|{0}120|{0}119|{0}118|{0}123|{0}122|{0}121|{0}114|{0}113|{0}112|{0}117|{0}116|{0}115|{0}149|{0}183|{0}182|{0}181|{0}186|{0}185|{0}184|{0}177|{0}176|{0}175|{0}180|{0}179|{0}178|{0}187|{0}196|{0}195|{0}194|{0}199|{0}198|{0}197|{0}190|{0}189|{0}188|{0}193|{0}192|{0}191|{0}158|{0}157|{0}156|{0}161|{0}160|{0}159|{0}152|{0}151|{0}150|{0}155|{0}154|{0}153|{0}162|{0}171|{0}170|{0}169|{0}174|{0}173|{0}172|{0}165|{0}164|{0}163|{0}168|{0}167|{0}166|{0}31|{0}30|{0}29|{0}34|{0}33|{0}32|{0}25|{0}24|{0}23|{0}28|{0}27|{0}26|{0}35|{0}44|{0}43|{0}42|{0}47|{0}46|{0}45|{0}38|{0}37|{0}36|{0}41|{0}40|{0}39|{0}6|{0}5|{0}4|{0}9|{0}8|{0}7|{0}0|vjkl5|getCookie|{0}3|{0}2|{0}1|{0}10|{0}19|{0}18|{0}17|{0}22|{0}21|{0}20|{0}13|{0}12|{0}11|{0}16|{0}15|{0}14|{0}48|{0}82|{0}81|{0}80|{0}85|{0}84|{0}83|{0}76|{0}75|{0}74|{0}79|{0}78|{0}77|{0}86|{0}95|{0}94|{0}93|{0}98|{0}97|{0}96|{0}89|{0}88|{0}87|{0}92|{0}91|{0}90|{0}57|{0}56|{0}55|{0}60|{0}59|{0}58|{0}51|{0}50|{0}49|{0}54|{0}53|{0}52|{0}61|{0}70|{0}69|{0}68|{0}73|{0}72|{0}71|{0}64|{0}63|{0}62|{0}67|{0}66|{0}65|{0}200|{0}335|{0}334|{0}333|{0}338|{0}337|{0}336|{0}329|{0}328|{0}327|{0}332|{0}331|{0}330|{0}339|{0}348|{0}347|{0}346|{0}351|{0}350|{0}349|{0}342|{0}341|{0}340|{0}345|{0}344|{0}343|{0}310|{0}309|{0}308|{0}313|{0}312|{0}311|{0}304|{0}303|{0}302|{0}307|{0}306|{0}305|{0}314|{0}323|{0}322|{0}321|{0}326|{0}325|{0}324|{0}317|{0}316|{0}315|{0}320|{0}319|{0}318|{0}352|{0}386|{0}385|{0}384|{0}389|{0}388|{0}387|{0}380|{0}379|{0}378|{0}383|{0}382|{0}381|{0}390|{0}399|{0}398|{0}397|result|length|strToLong|{0}393|{0}392|{0}391|{0}396|{0}395|{0}394|{0}361|{0}360|{0}359|{0}364|{0}363|{0}362|{0}355|{0}354|{0}353|{0}358|{0}357|{0}356|{0}365|{0}374|{0}373|{0}372|{0}377|{0}376|{0}375|{0}368|{0}367|{0}366|{0}371|{0}370|{0}369|{0}234|{0}233|{0}232|{0}237|{0}236|{0}235|{0}228|{0}227|{0}226|{0}231|{0}230|{0}229|{0}238|{0}247|{0}246|{0}245|{0}250|{0}249|{0}248|{0}241|{0}240|{0}239|{0}244|{0}243|{0}242|{0}209|{0}208|{0}207|{0}212|{0}211|{0}210|{0}203|{0}202|{0}201|{0}206|{0}205|{0}204|{0}213|{0}222|{0}221|{0}220|{0}225|{0}224|{0}223|{0}216|{0}215|{0}214|{0}219|{0}218|{0}217|{0}251|{0}285|{0}284|{0}283|{0}288|{0}287|{0}286|{0}279|{0}278|{0}277|{0}282|{0}281|{0}280|{0}289|{0}298|{0}297|{0}296|{0}301|{0}300|{0}299|{0}292|{0}291|{0}290|{0}295|{0}294|{0}293|{0}260|{0}259|{0}258|{0}263|{0}262|{0}261|{0}254|{0}253|{0}252|{0}257|{0}256|{0}255|{0}264|{0}273|{0}272|{0}271|{0}276|{0}275|{0}274|{0}267|{0}266|{0}265|{0}270|{0}269|{0}268'", 1, "makeKey_")).split("|"), 0, {}));
    return result
};

获取 vl5x 的时候会用到 vjkl5 ,vjkl5 在cookie里

(1.4) docId

<a href="javascript:void(0)" onclick="javascript:Navi(&quot;FcOMwrkBBDEIBMOBwpR4w4VgIhDDucKHdHteO10ywoc2byEFwr3Do0TDnBLCsHQXw7hiw7TDikhuYynDhV9zbGTCk8KdaMKewoQ8NlnCsVdww6RePm/Cmxk+w5A+OsOrw6bCnBZKw6pZc8K3wpLDoMK6CcO9w4B/w7Ezwo5Tw5FEw5fDp8OOwq13YRJ1wpwVwq/CnsOuwqVyw7vCvG/CqywcwqYawofCmAhkA3HCjMObw6pNwrfClCkywrfCtl8HecO+AA==&quot;,&quot;&quot;)" target="_self" style="color:Black; text-decoration:none">王守仁犯挪用公款罪刑事决定书</a>

查看html源码会发现,其实是把docId加密了一下,在调用时再解密,使用时调用 Navi 函数解密,总体来说增加了一下反爬难度
总体来说增加了一下反爬难度

Navi函数在 Lawyee.CPWSW.List.js


//增加7道爬虫防御 段智峰 20180807
function Navi(id, keyword) {
    var unzipid = unzip(id);
    try {
        var realid = com.str.Decrypt(unzipid);
        if (realid == "") {
            setTimeout("Navi('" + id + "','" + keyword + "')", 1000);
        } else {
            var url = "/content/content?DocID=" + realid + "&KeyWord=" + encodeURI(keyword); 
            openWin(url);
        }
    } catch (ex) {
        setTimeout("Navi('" + id + "','" + keyword + "')", 1000);
    }
}

对应的unzip函数和com.str.Decrypt函数在 pako.min.js

function unzip(b64Data) {
    var strData;
    if (!window.atob) {
    } else {
    }
    var charData;
    if (!Array.prototype.map) {
    } else {
    }
    strData = Base64_Zip.btou(RawDeflate.inflate(Base64_Zip.fromBase64(b64Data)));
    return strData
}

var com = {};
com.str = {
    _KEY: "12345678900000001234567890000000", _IV: "abcd134556abcedf", Encrypt: function (str) {
        var key = CryptoJS.enc.Utf8.parse(this._KEY);
        var iv = CryptoJS.enc.Utf8.parse(this._IV);
        var encrypted = "";
        var srcs = CryptoJS.enc.Utf8.parse(str);
        encrypted = CryptoJS.AES.encrypt(srcs, key, {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});
        return encrypted.ciphertext.toString()
    }, Decrypt: function (str) {
        var result = com.str.DecryptInner(str);
        try {
            var newstr = com.str.DecryptInner(result);
            if (newstr != "") {
                result = newstr
            }
        } catch (ex) {
            var msg = ex
        }
        return result
    }, DecryptInner: function (str) {
        var key = CryptoJS.enc.Utf8.parse(this._KEY);
        var iv = CryptoJS.enc.Utf8.parse(this._IV);
        var encryptedHexStr = CryptoJS.enc.Hex.parse(str);
        var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
        var decrypt = CryptoJS.AES.decrypt(srcs, key, {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});
        var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
        var result = decryptedStr.toString();
        try {
            result = Decrypt(result)
        } catch (ex) {
            var msg = ex
        }
        return result
    }
};

function iemap(myarray, callback, thisArg) {
    var T, A, k;
    if (myarray == null) {
        throw new TypeError(" this is null or not defined")
    }
    var O = Object(myarray);
    var len = O.length >>> 0;
    if (typeof callback !== "function") {
        throw new TypeError(callback + " is not a function")
    }
    if (thisArg) {
        T = thisArg
    }
    A = new Array(len);
    k = 0;
    while (k < len) {
        var kValue, mappedValue;
        if (k in O) {
            kValue = O[k];
            mappedValue = callback.call(T, kValue, k, O);
            A[k] = mappedValue
        }
        k++
    }
    return A
};

(1.5) 爬取docId对应文书

拿到docId后 根据docId爬取文书
爬取到结果后解析处理即可拿到内容。


(2) 2018-04版 爬取裁判文书

先自己在浏览器里F12看一看请求,就会发现,想要爬取裁判文书,首先要爬取list页面,如下:

页面请求参数

页面返回内容

list页面很好找,很快就找到了,用的是Post,用于反爬参数的有3个,vl5x、number、guid 。如下

http://wenshu.court.gov.cn/List/ListContent    Post

Param:全文检索:租房,文书类型:全部,裁判日期:2017-01-01 TO 2017-12-31
Index:2
Page:5
Order:裁判日期/法院层级
Direction:desc/asc
vl5x:fd8e5d85dc53f6f4ea89a90e
number:CJBJXSFC
guid:6ce7c4a4-c08b-28fbb93a-c94db684e6c2

经过 ctrl + F 搜索分析,发现
guid是通过js生成。
number通过请求获得,每次访问list页面前通过 http://wenshu.court.gov.cn/ValiCode/GetCode 获取。
vl5x通过混淆加密的js获得。在获取时要另获取vjkl5参数才能计算出vl5x

(2.1) guid

经过 ctrl + F 搜索 guid ,发现,发现了生成guid的方法:

function createGuid() {
	return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}
function ref() {
	var guid = createGuid() + createGuid() + "-" + createGuid() + "-" + createGuid() + createGuid() + "-" + createGuid() + createGuid() + createGuid(); //CreateGuid();
	$("#txthidGuid").val(guid);
	$("#divYzmImg").html("<img alt='点击刷新验证码!' name='validateCode' id='ImgYzm' onclick='ref()'  title='点击切换验证码' src='/ValiCode/CreateCode/?guid=" + guid + "' style='cursor: pointer;'  />");
}

(2.2) number

number参数通过访问 http://wenshu.court.gov.cn/ValiCode/GetCode 就可以获得

(2.3) vl5x

经过 ctrl + F 搜索,发现 vl5x 在的js代码里。
Lawyee.CPWSW.List.js
Lawyee.CPWSW.JsTree.js
可以看到getKey()的结果就是vl5x

data: { "Param": listparam, "Index": index, "Page": page, "Order": order, "Direction": direction, "vl5x": getKey(), "number": yzm1, "guid": guid1 },
data: { "Param": treeparam, "vl5x": getKey(), "guid": guid1, "number": yzm1 },

(2.4) 寻找getKey()函数

通过不断寻找,发现getKey()函数是一个混淆加密的js,分析出这个js,就知道getKey()函数了,但是这儿我就不公布答案了。
在解析出getKey()函数后,发现还需要vjkl5参数。

(2.5) 获取vjkl5

得到getKey()函数之后,发现还需要vjkl5参数。 vjkl5 和 cookie 有关。

最后再根据vjkl5得到vl5x

把这几个参数全得到了,那么得到参数就可以通过Post请求获取数据了。

(2.6) 爬取结果样例

来两张图片,看看爬到的数据

爬到的json

入库的数据

(3) 可能遇到的问题

(3.1) 500

解决问题主要在于表单中的 vl5x 参数与 guid 参数
其中通过 post guid 参数到 http://wenshu.court.gov.cn/ValiCode/GetCode 得到number,在其出现500时。参数 number 为’number’: ‘wens’

vjkl5 : 69aef9fffbc2aec01a418bbfc8d49225f26a8a5f
vl5x : 57e0a6c84e242d6bde76830d

(3.2) 返回 remind key

找一个浏览器里已经用过的vl5x去post ListContent,返回的是”remind key”,因此这个vl5x值是实时计算生成的。而且每次都会变化。

(4) 手机端

(4.1) 2_Request_Response


POST http://wenshuapp.court.gov.cn/MobileServices/GetLawListData HTTP/1.1
Content-Type: application/json
timespan: 20171206211000
nonce: g1ll
devid: 70498ab0cxxxxbcd90c1e59dbfdcxxxx
signature: d82e86ebe4dd8ec3512d2c53a814a0c7
User-Agent: Dalvik/2.1.0 (Linux; U; Android 7.0; EVA-AL10 Build/HUAWEIEVA-AL10)
Host: wenshuapp.court.gov.cn
Connection: Keep-Alive
Accept-Encoding: gzip
Content-Length: 185

{"limit":"20","dicval":"asc","reqtoken":"843a9bdcd4e28da79624549c051c0075","skip":"0","dickey":"/CaseInfo/案/@法院层级","app":"cpws","condition":"/CaseInfo/案/@DocContent=抢劫"}



HTTP/1.1 200 OK
Server: 360wzws
Date: Wed, 06 Dec 2017 13:09:55 GMT
Content-Type: application/json;charset=utf-8;
Content-Length: 6682
Connection: keep-alive
X-Powered-By-360WZB: wangzhan.360.cn
WZWS-RAY: 112-1512594595.15-s1jsm

(4.2) 6_Request_Response

POST http://wenshuapp.court.gov.cn/MobileServices/GetLawListData HTTP/1.1
Content-Type: application/json
timespan: 20171206211016
nonce: 274d
devid: 70498ab0cxxxxbcd90c1e59dbfdcxxxx
signature: 95e57f2d8e4597ffbd0682291d6b4258
User-Agent: Dalvik/2.1.0 (Linux; U; Android 7.0; EVA-AL10 Build/HUAWEIEVA-AL10)
Host: wenshuapp.court.gov.cn
Connection: Keep-Alive
Accept-Encoding: gzip
Content-Length: 186

{"limit":"20","dicval":"asc","reqtoken":"843a9bdcd4e28da79624549c051c0075","skip":"20","dickey":"/CaseInfo/案/@法院层级","app":"cpws","condition":"/CaseInfo/案/@DocContent=抢劫"}



HTTP/1.1 200 OK
Server: 360wzws
Date: Wed, 06 Dec 2017 13:10:21 GMT
Content-Type: application/json;charset=utf-8;
Content-Length: 6490
Connection: keep-alive
X-Powered-By-360WZB: wangzhan.360.cn
WZWS-RAY: 112-1512594621.039-s1jsm

(4.3) 手机端的主要参数

timespan nonce devid signature

这个看Java功底了,我是得到高人相助以后把这几个参数分析出来了。答案就不公布了。

(4.4) 反编译工具

apktool 作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看

dex2jar 作用:将apk反编译成java源码(classes.dex转化成jar文件)

jd-gui 作用:查看APK中classes.dex转化成出的jar文件,即源码文件

References

[1] 用Python抓取新版裁判文书网(附代码,针对初学者修订)
[2] 中国裁决文书网爬虫
[3] 文书网vl5x值的计算
[4] 中国裁判文书网 爬虫求助
[5] 文书网-破解反爬思路详解
[6] CJOSpider
[7] 破解"中国裁判文书网"App加密过程
[8] 裁判文书与大数据
[9] Android APK反编译就这么简单 详解(附图)
[10] User-Agent 汇总
[11] 中国裁判文书网爬虫
[12] 文书网反反爬虫SDK
[13] 爬取裁判文书网(一)
[14] R语言完成中国裁判文书网最新爬虫
[15] 2018-10-09中国裁判文书网爬虫vl5x和DocID分析
[16] 裁判文书网APP采集思路-失败案例