中国裁判文书网 爬虫求助 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
V2EX    Python

中国裁判文书网 爬虫求助

  •  
  •   zbl430 2017-06-23 09:34:31 +08:00 10400 次点击
    这是一个创建于 3102 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 条回复    2018-08-08 16:32:14 +08:00
    samray
        1
    samray  
       2017-06-23 10:26:36 +08:00
    首先,你的浏览器要能访问你要爬取的网站的 url .但是似乎  http://wenshu.court.gov.cn/List/TreeContent  浏览器是打不开的.
    eoo
        2
    eoo  
       2017-06-23 10:44:33 +08:00 via Android
    页面已经挂了。
    lzhr
        3
    lzhr  
       2017-06-23 13:12:40 +08:00
    404
    Chingim
        4
    Chingim  
       2017-06-23 13:33:47 +08:00 via Android
    有时候 bug 就是那么简单,但是发现之前你已经被搞得吐血。

    发自吐血的某某
    lzhr
        5
    lzhr  
       2017-06-23 13:42:45 +08:00
    zbl430
        6
    zbl430  
    OP
       2017-06-23 17:22:42 +08:00
    @samray 这个是 post 接口,不好意思,忘说明了
    zbl430
        7
    zbl430  
    OP
       2017-06-23 17:24:01 +08:00
    @Chingim 看来大神有解决方案了,已经被虐很久了,求指教
    zbl430
        8
    zbl430  
    OP
       2017-06-23 17:24:29 +08:00
    @lzhr 然而用代码就不行
    samray
        9
    samray  
       2017-06-23 17:39:24 +08:00
    @zbl430 试试加上 cookie
    Chingim
        10
    Chingim  
       2017-06-23 19:34:26 +08:00
    @zbl430 没有啊, 我以为 bug 就是 404
    libraor
        11
    libraor  
       2017-06-26 20:07:43 +08:00
    同道中人啊,友情支持下
    nobodyBt
        12
    nobodyBt  
       2017-06-29 18:05:49 +08:00
    友情帮顶一下,我也卡在这个网站上了,主要是 Cookie 是加密处理的,然后 js 还是混淆的~ 应该是个叫瑞数信息的公司搞的产品,很多网站在用……
    simapple
        13
    simapple  
       2017-08-30 16:48:38 +08:00
    这个网站 很有意思,每一次请求翻页都要过一次验证码,加密一次密钥,带密钥访问下一个页面,你自己查看每次 http 请求的细节,就能方便的搞定了
    McooLewis
        14
    McooLewis  
       2017-08-30 20:58:42 +08:00
    @simapple 哥们你好,请问你知道他这个验证码是怎么生成的吗,我查看了半天,不知道这个验证码是怎么生成的,谢谢.
    simapple
        15
    simapple  
       2017-08-31 08:29:22 +08:00
    @McooLewis 验证码图片是后台生成的
    Mrkon
        16
    Mrkon  
       2017-11-27 18:19:32 +08:00
    解决问题主要在于表单中的 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  
       2017-12-08 10:24:14 +08:00
    @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  
       2017-12-08 14:31:12 +08:00
    @fox2moon 不好意思,js 因为最近太忙没有看过,所有还是不太懂,但是你的错误我估计出现在要导入 cookie 参数,
    而其中最值得的参数是 vjkl5=0ac4559fffd034030166188f40d6a9ae4c37436f;这样的,希望能帮到你。在找到解决办法后希望给我个回复,共勉。
    zbl430
        19
    zbl430  
    OP
       2017-12-08 17:08:51 +08:00   1
    vjkl5 这个参数变换不建议使用 python 来写,非常多,就用 pyv8 吧


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

    只能说这么多了
    Mrkon
        20
    Mrkon  
       2017-12-12 10:48:54 +08:00
    @zbl430 谢谢,能否问一下,如果作为一个资深爬虫工程师,一般需要对 js 掌握到什么程度啊
    zbl430
        21
    zbl430  
    OP
       2017-12-12 11:25:34 +08:00
    @Mrkon 个人觉得,能把你需要的 js 转成 python 写的就行了,没必要特意去学,很多技术都是现学现搞,日后加深
    Hombin
        22
    Hombin  
       2017-12-12 16:20:32 +08:00
    @Mrkon list 页面的 js 中都没有看到 getkey()函数,请问是在哪里可以找出这个函数的定义?
    Mrkon
        23
    Mrkon  
       2017-12-12 17:45:54 +08:00
    @zbl430 恩,谢谢,已关注,以后多交流啊
    Mrkon
        24
    Mrkon  
       2017-12-12 17:59:03 +08:00   1
    @Hombin 首先网站是: http://wenshu.court.gov.cn/List/List? 后面常常会跟一堆参数
    其次在最后。。。我不会发截图,函数在最后两段,还特地给你标注了”//函数(两段必须的)“ ,找定义要善于 firebug
    vs412237401
        25
    vs412237401  
       2018-01-24 14:15:30 +08:00
    这个数据的爬取没有什么难度的,请看 openlaw.cn
    zbl430
        26
    zbl430  
    OP
       2018-01-25 09:35:38 +08:00
    @vs412237401 它网站的数据还没我的多呢...
    wenziyue
        27
    wenziyue  
       2018-03-22 14:08:34 +08:00
    @zbl430 大佬你好,我现在正在做这个网站的爬虫,现在它页面源码里获取 vjkl5 的 getkey 函数貌似被混淆了,现在没法获取 vjkl5 的值了,搞得我现在焦头烂额,不知道该怎么做了,请问大佬有什么好的解决办法么?希望能回复啊,多谢多谢
    wenziyue
        28
    wenziyue  
       2018-03-22 16:12:12 +08:00
    @Mrkon 大佬你好,我现在正在做这个网站的爬虫,现在它页面源码里获取 vjkl5 的 getkey 函数貌似被混淆了,现在没法获取 vjkl5 的值了,搞得我现在焦头烂额,不知道该怎么做了,请问大佬有什么好的解决办法么?希望能回复啊,多谢多谢
    zbl430
        29
    zbl430  
    OP
       2018-03-22 19:15:58 +08:00 via Android
    @wenziyue 那就运行这段函数啊,用 py 去运行 js,你百度应该有方法
    wenziyue
        30
    wenziyue  
       2018-03-23 17:03:46 +08:00
    @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  
       2018-04-03 16:35:08 +08:00   1
    @wenziyue 是的, 这个是 packed 包装过的。特征字符串是"eval"开头。把 var aaaafun 的定义替换到第一个 eval 之后的 aaaafun。在执行一次解密,依此类推。 给你一个可以用来解密的网站: http://matthewfl.com/unPacker.html
    wenziyue
        32
    wenziyue  
       2018-04-08 19:38:09 +08:00   1
    @OxhydrylLithium 太感谢了!已经解密出来了,多谢多谢!
    zc15238092914
        33
    zc15238092914  
       2018-04-09 14:06:24 +08:00
    @wenziyue getKey()怎么解出来的,是用 pyv8 吗?用 python 执行这个 js 函数时,一直报错
    zbl430
        34
    zbl430  
    OP
       2018-04-09 14:13:48 +08:00
    @zc15238092914 #33 f12 用浏览器的 console
    wenziyue
        35
    wenziyue  
       2018-04-09 19:48:21 +08:00
    @zc15238092914 我是用楼上大神给的网站把混淆过的 js 代码还原了,然后用 pyv8 执行还原的 js 得到了 vl5x,我不清楚用 pyv8 执行混淆的 js 能不能得到结果,但是现在几个参数都有了,向 http://wenshu.court.gov.cn/List/ListContent 发 post 请求返回的结果为空。。。头疼
    wenziyue
        36
    wenziyue  
       2018-04-09 19:51:33 +08:00
    @zbl430 大神,我现在用 pyv8 执行 js 能获得 vl5x 了,几个参数现在都有了,但是向 /List/ListContent 发 post 请求返回的结果为空,按理说它应该返回一个 json 啊,是需要加 cookie 吗?
    wenziyue
        37
    wenziyue  
       2018-04-09 19:52:34 +08:00
    @OxhydrylLithium 大神你好,我用你的方法获得了 vl5x,几个参数现在都有了,但是向 /List/ListContent 发 post 请求返回的结果为空,按理说它应该返回一个 json 啊,是需加 cookie 吗?
    zbl430
        38
    zbl430  
    OP
       2018-04-10 09:30:39 +08:00
    @wenziyue #36 那你的 vl5x 和浏览器算出的做对比,看看是不是一样, 比如 vjkl5=cf370b569dff2cad90014e18a63dba0705ba2384, 算出的 vl5x 是 57210fbd1e1b17173950aa8b
    wenziyue
        39
    wenziyue  
       2018-04-10 09:48:22 +08:00
    @zbl430 这个我对比过了,完全一样,参数应该没问题,但是不清楚为什么返回的数据为空,加了 cookie 和 referer 也依然没用,项目本来说的今天要上线,现在还没做出来,已经快疯了,大神我能加你个 Q 问你一下吗
    zc15238092914
        40
    zc15238092914  
       2018-04-10 09:50:54 +08:00
    @wenziyue 我也用那个网站处理了 js,但是执行,一直报 SyntaxError: Unexpected token ILLEGAL ( @ 29 : 22 ) -> eval(aaaafun('7 8(2,4,3) ,有解决方案吗?或者加个微信 zhangchenchen123123,交流下
    wenziyue
        41
    wenziyue  
       2018-04-10 09:56:32 +08:00
    @zc15238092914 好的,我加你吧
    zc15238092914
        42
    zc15238092914  
       2018-04-10 09:57:14 +08:00
    @wenziyue 好的 微信 zhangchenchen123123 qq:1104595182
    v5python
        43
    v5python  
       2018-04-14 15:52:39 +08:00
    @wenziyue 我的也基本解决,大量跑出裁判文书数据呢,现在想弄下它的 app。app 有研究过?大佬。加下我的 qq 吧:390982209。
    OxhydrylLithium
        44
    OxhydrylLithium  
       2018-04-16 10:45:17 +08:00
    @wenziyue 抱歉最近很忙没什么时间看,刚看到你的回复。分析了一下流量发现首先发送的 guid 和 number 必须配对 然后每次都要有上一次有效的 vjkl5 cookie。你看看是不是这方面的问题,除了参数生成过程难发现以外其他的看起来难度很小。
    yanmo00
        45
    yanmo00  
       2018-08-08 16:32:14 +08:00
    @wenziyue 你好,请问下 getKey()的 js 怎么解析的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1999 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 00:42 PVG 08:42 LAX 16:42 JFK 19:42
    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