中国裁判文书网 爬虫求助 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zbl430

中国裁判文书网 爬虫求助

  •  
  •   zbl430 Jun 23, 2017 10753 views
    This topic created in 3232 days ago, the information mentioned may be changed or developed.

    http://wenshu.court.gov.cn/

    裁判文书网最近更新了反爬策略,然后一直没有搞懂,希望大神可以帮忙

    url = "http://wenshu.court.gov.cn/List/TreeContent" data = { 'Param': '上传日期:2017-06-21 TO 2017-06-22,案件类型:赔偿案件' } re = requests.post(url, data=data, headers=headers, timeout=60) 

    这样已经得不到数据了,即使加了 headers

    求大神帮忙!!!

    45 replies    2018-08-08 16:32:14 +08:00
    samray
        1
    samray  
       Jun 23, 2017
    首先,你的浏览器要能访问你要爬取的网站的 url .但是似乎  http://wenshu.court.gov.cn/List/TreeContent  浏览器是打不开的.
    eoo
        2
    eoo  
       Jun 23, 2017 via Android
    页面已经挂了。
    lzhr
        3
    lzhr  
       Jun 23, 2017
    404
    Chingim
        4
    Chingim  
       Jun 23, 2017 via Android
    有时候 bug 就是那么简单,但是发现之前你已经被搞得吐血。

    发自吐血的某某
    lzhr
        5
    lzhr  
       Jun 23, 2017
    zbl430
        6
    zbl430  
    OP
       Jun 23, 2017
    @samray 这个是 post 接口,不好意思,忘说明了
    zbl430
        7
    zbl430  
    OP
       Jun 23, 2017
    @Chingim 看来大神有解决方案了,已经被虐很久了,求指教
    zbl430
        8
    zbl430  
    OP
       Jun 23, 2017
    @lzhr 然而用代码就不行
    samray
        9
    samray  
       Jun 23, 2017
    @zbl430 试试加上 cookie
    Chingim
        10
    Chingim  
       Jun 23, 2017
    @zbl430 没有啊, 我以为 bug 就是 404
    libraor
        11
    libraor  
       Jun 26, 2017
    同道中人啊,友情支持下
    nobodyBt
        12
    nobodyBt  
       Jun 29, 2017
    友情帮顶一下,我也卡在这个网站上了,主要是 Cookie 是加密处理的,然后 js 还是混淆的~ 应该是个叫瑞数信息的公司搞的产品,很多网站在用……
    simapple
        13
    simapple  
       Aug 30, 2017
    这个网站 很有意思,每一次请求翻页都要过一次验证码,加密一次密钥,带密钥访问下一个页面,你自己查看每次 http 请求的细节,就能方便的搞定了
    McooLewis
        14
    McooLewis  
       Aug 30, 2017
    @simapple 哥们你好,请问你知道他这个验证码是怎么生成的吗,我查看了半天,不知道这个验证码是怎么生成的,谢谢.
    simapple
        15
    simapple  
       Aug 31, 2017
    @McooLewis 验证码图片是后台生成的
    Mrkon
        16
    Mrkon  
       Nov 27, 2017
    解决问题主要在于表单中的 vl5x 参数与 guid 参数
    其中通过 post guid 参数到 http://wenshu.court.gov.cn/ValiCode/GetCode 得到 number,在其出现 500 时
    参数 number 为'number': 'wens'

    对于 guid 参数可以通过:
    import random
    def guid():
    return hex(int((random.random() + 1) * 0x10000))[3:]

    对于 vl5x 参数可以通过:
    链接: http://wenshu.court.gov.cn/List/List?最后的两个函数
    var _fxxx = function (p, a, c, k, e, d).....
    function getKey().....
    其中 getKey()返回的就是 vl5x
    运行 js 代码可以通过 python 的 PyV8 模块,附教程链接: http://blog.csdn.net/hanshileiai/article/details/51628173

    但是:因为本人 js 不太会,其中 vl5x 参数是通过什么改变的,转化为 python 的代码是怎样的,希望大神能不吝赐教。
    fox2moon
        17
    fox2moon  
       Dec 8, 2017
    @Mrkon 你好 想知道你关于 vl5x 参数 你有解决办法吗?
    我运行后 报错 ReferenceError: "getCookie" is not defined in <eval>#26:4<eval> at line number 1
    p, a, c, k, e, d 是代表的什么?
    期待你的回复
    Mrkon
        18
    Mrkon  
       Dec 8, 2017
    @fox2moon 不好意思,js 因为最近太忙没有看过,所有还是不太懂,但是你的错误我估计出现在要导入 cookie 参数,
    而其中最值得的参数是 vjkl5=0ac4559fffd034030166188f40d6a9ae4c37436f;这样的,希望能帮到你。在找到解决办法后希望给我个回复,共勉。
    zbl430
        19
    zbl430  
    OP
       Dec 8, 2017   1
    vjkl5 这个参数变换不建议使用 python 来写,非常多,就用 pyv8 吧


    vjkl5=0ac4559fffd034030166188f40d6a9ae4c37436f
    getKey 这个函数实际就是将 0ac4559fffd034030166188f40d6a9ae4c37436f ->> 1514b83137a527bcbfbf590d

    只能说这么多了
    Mrkon
        20
    Mrkon  
       Dec 12, 2017
    @zbl430 谢谢,能否问一下,如果作为一个资深爬虫工程师,一般需要对 js 掌握到什么程度啊
    zbl430
        21
    zbl430  
    OP
       Dec 12, 2017
    @Mrkon 个人觉得,能把你需要的 js 转成 python 写的就行了,没必要特意去学,很多技术都是现学现搞,日后加深
    Hombin
        22
    Hombin  
       Dec 12, 2017
    @Mrkon list 页面的 js 中都没有看到 getkey()函数,请问是在哪里可以找出这个函数的定义?
    Mrkon
        23
    Mrkon  
       Dec 12, 2017
    @zbl430 恩,谢谢,已关注,以后多交流啊
    Mrkon
        24
    Mrkon  
       Dec 12, 2017   1
    @Hombin 首先网站是: http://wenshu.court.gov.cn/List/List? 后面常常会跟一堆参数
    其次在最后。。。我不会发截图,函数在最后两段,还特地给你标注了”//函数(两段必须的)“ ,找定义要善于 firebug
    vs412237401
        25
    vs412237401  
       Jan 24, 2018
    这个数据的爬取没有什么难度的,请看 openlaw.cn
    zbl430
        26
    zbl430  
    OP
       Jan 25, 2018
    @vs412237401 它网站的数据还没我的多呢...
    wenziyue
        27
    wenziyue  
       Mar 22, 2018
    @zbl430 大佬你好,我现在正在做这个网站的爬虫,现在它页面源码里获取 vjkl5 的 getkey 函数貌似被混淆了,现在没法获取 vjkl5 的值了,搞得我现在焦头烂额,不知道该怎么做了,请问大佬有什么好的解决办法么?希望能回复啊,多谢多谢
    wenziyue
        28
    wenziyue  
       Mar 22, 2018
    @Mrkon 大佬你好,我现在正在做这个网站的爬虫,现在它页面源码里获取 vjkl5 的 getkey 函数貌似被混淆了,现在没法获取 vjkl5 的值了,搞得我现在焦头烂额,不知道该怎么做了,请问大佬有什么好的解决办法么?希望能回复啊,多谢多谢
    zbl430
        29
    zbl430  
    OP
       Mar 22, 2018 via Android
    @wenziyue 那就运行这段函数啊,用 py 去运行 js,你百度应该有方法
    wenziyue
        30
    wenziyue  
       Mar 23, 2018
    @zbl430
    function getKey() {
    var aaaafun = 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; }
    eval(aaaafun('7 8(2,4,3){5 6=3.9(\'|\');a(5 1=0;1<4;1++){2=2.f(e b(\'\\\\{\'+1+\'\\\\}\',\'c\'),6[1])}d 2}', 16, 16, '|i|str|strReplace|count|var|arrReplace|function|de|split|for|RegExp|g|return|new|replace'.split('|'), 0, {}))
    eval(de("{15}un{12}tion {4}str) {v{10}r lOng= 0;{15}or (v{10}r i = 0; i < str.l{14}ngth; i++) {long += {9}(i) << (i % 16));}r{14}turn long;}{15}un{12}tion {0}(str) {v{10}r lOng= 0;{15}or (v{10}r i = 0; i < str.l{14}ngth; i++) {long += {9}(i) << (i % 16)) + i;}r{14}turn long;}{15}un{12}tion {0}2(str,st{14}p) {v{10}r lOng= 0;{15}or (v{10}r i = 0; i < str.l{14}ngth; i++) {long += {9}(i) << (i % 16)) + (i * st{14}p);}r{14}turn long;}{15}un{12}tion {0}3(str, st{14}p) {v{10}r lOng= 0;{15}or (v{10}r i = 0; i < str.l{14}ngth; i++) {long += {9}(i) << (i % 16)) + (i + st{14}p - str.{12}h{10}rCo{13}{14}At(i));}r{14}turn long;}{8}0(str) {v{10}r str = str.{3}5, 5 * 5) + str.{3}(5 + 1) * (5 + 1), 3);v{10}r {10} = str.{3}5) + str.{3}-4);v{10}r {11} = str.{3}4) + {10}.{3}-6);r{14}turn {2}).{3}4, 24);}{8}1(str) "strToLongEn|strToLong(str.substr|hex_md5(str|substr(|strToLong(|hex_md5(|base.encode(|new Base64();|function makeKey_|(str.charCodeAt|a|b|c|d|e|f"))

    多谢回复啊,他现在网页源码里这个 js 函数都是这样的一堆东西,我只贴了一部分,代码是混淆过的,这种东西没法运行的吧。。。
    OxhydrylLithium
        31
    OxhydrylLithium  
       Apr 3, 2018   1
    @wenziyue 是的, 这个是 packed 包装过的。特征字符串是"eval"开头。把 var aaaafun 的定义替换到第一个 eval 之后的 aaaafun。在执行一次解密,依此类推。 给你一个可以用来解密的网站: http://matthewfl.com/unPacker.html
    wenziyue
        32
    wenziyue  
       Apr 8, 2018   1
    @OxhydrylLithium 太感谢了!已经解密出来了,多谢多谢!
    zc15238092914
        33
    zc15238092914  
       Apr 9, 2018
    @wenziyue getKey()怎么解出来的,是用 pyv8 吗?用 python 执行这个 js 函数时,一直报错
    zbl430
        34
    zbl430  
    OP
       Apr 9, 2018
    @zc15238092914 #33 f12 用浏览器的 console
    wenziyue
        35
    wenziyue  
       Apr 9, 2018
    @zc15238092914 我是用楼上大神给的网站把混淆过的 js 代码还原了,然后用 pyv8 执行还原的 js 得到了 vl5x,我不清楚用 pyv8 执行混淆的 js 能不能得到结果,但是现在几个参数都有了,向 http://wenshu.court.gov.cn/List/ListContent 发 post 请求返回的结果为空。。。头疼
    wenziyue
        36
    wenziyue  
       Apr 9, 2018
    @zbl430 大神,我现在用 pyv8 执行 js 能获得 vl5x 了,几个参数现在都有了,但是向 /List/ListContent 发 post 请求返回的结果为空,按理说它应该返回一个 json 啊,是需要加 cookie 吗?
    wenziyue
        37
    wenziyue  
       Apr 9, 2018
    @OxhydrylLithium 大神你好,我用你的方法获得了 vl5x,几个参数现在都有了,但是向 /List/ListContent 发 post 请求返回的结果为空,按理说它应该返回一个 json 啊,是需要加 cookie 吗?
    zbl430
        38
    zbl430  
    OP
       Apr 10, 2018
    @wenziyue #36 那你的 vl5x 和浏览器算出的做对比,看看是不是一样, 比如 vjkl5=cf370b569dff2cad90014e18a63dba0705ba2384, 算出的 vl5x 是 57210fbd1e1b17173950aa8b
    wenziyue
        39
    wenziyue  
       Apr 10, 2018
    @zbl430 这个我对比过了,完全一样,参数应该没问题,但是不清楚为什么返回的数据为空,加了 cookie 和 referer 也依然没用,项目本来说的今天要上线,现在还没做出来,已经快疯了,大神我能加你个 Q 问你一下吗
    zc15238092914
        40
    zc15238092914  
       Apr 10, 2018
    @wenziyue 我也用那个网站处理了 js,但是执行,一直报 SyntaxError: Unexpected token ILLEGAL ( @ 29 : 22 ) -> eval(aaaafun('7 8(2,4,3) ,有解决方案吗?或者加个微信 zhangchenchen123123,交流下
    wenziyue
        41
    wenziyue  
       Apr 10, 2018
    @zc15238092914 好的,我加你吧
    zc15238092914
        42
    zc15238092914  
       Apr 10, 2018
    @wenziyue 好的 微信 zhangchenchen123123 qq:1104595182
    v5python
        43
    v5python  
       Apr 14, 2018
    @wenziyue 我的也基本解决,大量跑出裁判文书数据呢,现在想弄下它的 app。app 有研究过?大佬。加下我的 qq 吧:390982209。
    OxhydrylLithium
        44
    OxhydrylLithium  
       Apr 16, 2018
    @wenziyue 抱歉最近很忙没什么时间看,刚看到你的回复。分析了一下流量发现首先发送的 guid 和 number 必须配对 然后每次都要有上一次有效的 vjkl5 cookie。你看看是不是这方面的问题,除了参数生成过程难发现以外其他的看起来难度很小。
    yanmo00
        45
    yanmo00  
       Aug 8, 2018
    @wenziyue 你好,请问下 getKey()的 js 怎么解析的
    About     Help     Advertise     Blog     API     FAQ     Solana     1123 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 63ms UTC 18:19 PVG 02:19 LAX 11:19 JFK 14:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86