裁判文书网最近更新了反爬策略,然后一直没有搞懂,希望大神可以帮忙
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
求大神帮忙!!!
1
samray 2017-06-23 10:26:36 +08:00
首先,你的浏览器要能访问你要爬取的网站的 url .但是似乎 http://wenshu.court.gov.cn/List/TreeContent 浏览器是打不开的.
|
2
eoo 2017-06-23 10:44:33 +08:00 via Android
页面已经挂了。
|
3
lzhr 2017-06-23 13:12:40 +08:00
404
|
4
Chingim 2017-06-23 13:33:47 +08:00 via Android
有时候 bug 就是那么简单,但是发现之前你已经被搞得吐血。
发自吐血的某某 |
11
libraor 2017-06-26 20:07:43 +08:00
同道中人啊,友情支持下
|
12
tangzipeng 2017-06-29 18:05:49 +08:00
友情帮顶一下,我也卡在这个网站上了,主要是 Cookie 是加密处理的,然后 js 还是混淆的~ 应该是个叫瑞数信息的公司搞的产品,很多网站在用……
|
13
simapple 2017-08-30 16:48:38 +08:00
这个网站 很有意思,每一次请求翻页都要过一次验证码,加密一次密钥,带密钥访问下一个页面,你自己查看每次 http 请求的细节,就能方便的搞定了
|
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 的代码是怎样的,希望大神能不吝赐教。 |
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 是代表的什么? 期待你的回复 |
18
Mrkon 2017-12-08 14:31:12 +08:00
@fox2moon 不好意思,js 因为最近太忙没有看过,所有还是不太懂,但是你的错误我估计出现在要导入 cookie 参数,
而其中最值得的参数是 vjkl5=0ac4559fffd034030166188f40d6a9ae4c37436f;这样的,希望能帮到你。在找到解决办法后希望给我个回复,共勉。 |
19
zbl430 OP vjkl5 这个参数变换不建议使用 python 来写,非常多,就用 pyv8 吧
vjkl5=0ac4559fffd034030166188f40d6a9ae4c37436f getKey 这个函数实际就是将 0ac4559fffd034030166188f40d6a9ae4c37436f ->> 1514b83137a527bcbfbf590d 只能说这么多了 |
21
zbl430 OP @Mrkon 个人觉得,能把你需要的 js 转成 python 写的就行了,没必要特意去学,很多技术都是现学现搞,日后加深
|
24
Mrkon 2017-12-12 17:59:03 +08:00 1
@Hombin 首先网站是: http://wenshu.court.gov.cn/List/List? 后面常常会跟一堆参数
其次在最后。。。我不会发截图,函数在最后两段,还特地给你标注了”//函数(两段必须的)“ ,找定义要善于 firebug |
25
vs412237401 2018-01-24 14:15:30 +08:00
这个数据的爬取没有什么难度的,请看 openlaw.cn
|
26
zbl430 OP @vs412237401 它网站的数据还没我的多呢...
|
27
wenziyue 2018-03-22 14:08:34 +08:00
@zbl430 大佬你好,我现在正在做这个网站的爬虫,现在它页面源码里获取 vjkl5 的 getkey 函数貌似被混淆了,现在没法获取 vjkl5 的值了,搞得我现在焦头烂额,不知道该怎么做了,请问大佬有什么好的解决办法么?希望能回复啊,多谢多谢
|
28
wenziyue 2018-03-22 16:12:12 +08:00
@Mrkon 大佬你好,我现在正在做这个网站的爬虫,现在它页面源码里获取 vjkl5 的 getkey 函数貌似被混淆了,现在没法获取 vjkl5 的值了,搞得我现在焦头烂额,不知道该怎么做了,请问大佬有什么好的解决办法么?希望能回复啊,多谢多谢
|
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 函数都是这样的一堆东西,我只贴了一部分,代码是混淆过的,这种东西没法运行的吧。。。 |
31
OxhydrylLithium 2018-04-03 16:35:08 +08:00 1
@wenziyue 是的, 这个是 packed 包装过的。特征字符串是"eval"开头。把 var aaaafun 的定义替换到第一个 eval 之后的 aaaafun。在执行一次解密,依此类推。 给你一个可以用来解密的网站: http://matthewfl.com/unPacker.html
|
32
wenziyue 2018-04-08 19:38:09 +08:00 1
@OxhydrylLithium 太感谢了!已经解密出来了,多谢多谢!
|
33
zc15238092914 2018-04-09 14:06:24 +08:00
@wenziyue getKey()怎么解出来的,是用 pyv8 吗?用 python 执行这个 js 函数时,一直报错
|
34
zbl430 OP @zc15238092914 #33 f12 用浏览器的 console
|
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 请求返回的结果为空。。。头疼
|
36
wenziyue 2018-04-09 19:51:33 +08:00
@zbl430 大神,我现在用 pyv8 执行 js 能获得 vl5x 了,几个参数现在都有了,但是向 /List/ListContent 发 post 请求返回的结果为空,按理说它应该返回一个 json 啊,是需要加 cookie 吗?
|
37
wenziyue 2018-04-09 19:52:34 +08:00
@OxhydrylLithium 大神你好,我用你的方法获得了 vl5x,几个参数现在都有了,但是向 /List/ListContent 发 post 请求返回的结果为空,按理说它应该返回一个 json 啊,是需要加 cookie 吗?
|
38
zbl430 OP @wenziyue #36 那你的 vl5x 和浏览器算出的做对比,看看是不是一样, 比如 vjkl5=cf370b569dff2cad90014e18a63dba0705ba2384, 算出的 vl5x 是 57210fbd1e1b17173950aa8b
|
39
wenziyue 2018-04-10 09:48:22 +08:00
@zbl430 这个我对比过了,完全一样,参数应该没问题,但是不清楚为什么返回的数据为空,加了 cookie 和 referer 也依然没用,项目本来说的今天要上线,现在还没做出来,已经快疯了,大神我能加你个 Q 问你一下吗
|
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,交流下
|
41
wenziyue 2018-04-10 09:56:32 +08:00
@zc15238092914 好的,我加你吧
|
42
zc15238092914 2018-04-10 09:57:14 +08:00
@wenziyue 好的 微信 zhangchenchen123123 qq:1104595182
|
43
v5python 2018-04-14 15:52:39 +08:00
@wenziyue 我的也基本解决,大量跑出裁判文书数据呢,现在想弄下它的 app。app 有研究过?大佬。加下我的 qq 吧:390982209。
|
44
OxhydrylLithium 2018-04-16 10:45:17 +08:00
@wenziyue 抱歉最近很忙没什么时间看,刚看到你的回复。分析了一下流量发现首先发送的 guid 和 number 必须配对 然后每次都要有上一次有效的 vjkl5 cookie。你看看是不是这方面的问题,除了参数生成过程难发现以外其他的看起来难度很小。
|