Loading...
墨滴

胡萝卜周

2021/04/06  阅读:92  主题:绿意

中国裁判文书网的反爬破解过程

gov网站的反爬手段有的贼高,有的贼简单。文书网的,应该属于简单的行列了。但随着反爬手版的不断升级,文书网的爬虫也越来越难了,相信以后的难度会远高于现在。为了降低反爬再次升级的可能性,本文仅展示部分思路和代码。

原文:https://www.52pojie.cn/thread-1411371-1-1.html

一、数据的样貌

以获取北京互联网法院的数据为例(下同):

有用的数据是后两个rest.q4w的json数据,体积较大的那个是文书数据,较小的那个是左边栏的分类。

文书数据的json内容:

没错,数据是加密的,需要将密文解密为明文才是我们需要的数据。

但事情远没有这么简单,我们再看一下这个响应的请求体:

请求体的一些数据都是加密的。

二、寻找解决办法

我们可以确定第一步要做的事就是找一找请求体中比较特别的参数来自哪里。

1 pageId

pageId在当前页面的 url 里:

https://wenshu.court.gov.cn/website/wenshu/181217BMTKHNT2W0/index.html?pageId=0cc75a376282f1729e60324a0ea5c379&s40=132&fymc=%E5%8C%97%E4%BA%AC%E4%BA%92%E8%81%94%E7%BD%91%E6%B3%95%E9%99%A2

那 url 里的pageId又是从哪里来?

index.js文件里有一行代码:

我们按图索骥,看一看$.WebSite.uuid()方法的代码:

这就是源头了,将这个函数的代码转成你正在用的语言对应的代码即可,比如 python 代码:

2 s40

没什么可找的,就是一个分类标识 / id 。

3 sortFields

也没什么可说的,排序标识。

4 ciphertext

很明显的二进制,转为字符串后:

7OCOHRGqXNozUql6NpzY6qpt202104069M0AJ6beqt9EniWl05VPNw==

很明显的base64编码,解码试一下:

可以看见,解码后的内容不是正常字符,无需多想,肯定是加密了,我们再找一找:

找到了,ciphertext是则cipher()函数生成的,再找一找这个函数是如何实现的:

又找到源头了,其中还有一个方法WebSite.random也需要看一下,但比较简单,就不上图了。

上面的代码可以直接调用,或者转码,比如转码为 python 代码:

5 cfg

也是固定的值,没什么好说的。

6 __RequestVerificationToken

用到的也是random方法,和ciphertext中的random方法相同。

三、最后结果

结果能获取到了,但文书网为了反爬虫,特意做了条数限制,只显示前60条,若想获取更多数据,还需要精确搜索条件以缩小查询结果条目数量到60或60以内。

胡萝卜周

2021/04/06  阅读:92  主题:绿意

作者介绍

胡萝卜周