中国裁判文书网爬虫思路详细分析 (2018年11月上旬可用)

一、前言

最近有一些风险防范的需求,需要从中国裁判文书网批量下载一些裁判文书。但人工操作过于繁琐,于是对网站研究了一下,编写了一个爬虫实现了批量下载目录和正文。
这个网站的反爬虫策略非常先进,使用了很多方法来增加爬取成本。编写这个网站的爬虫,需要具备丰富的经验技巧和坚强的毅力。
这个网站的反爬虫策略更新很快,互联网上关于这个网站爬虫的文章基本都失效了,于是整理出了这篇非常详细的文章。可以帮助大家快速理解网站的层次结构和爬取的流程方法,编写出相关的程序。

二、编写爬虫的主要难点

这个网站的爬取方法比较复杂,除了需要使用常规的GET和POST方法之外,还有以下方面需要考虑。

1.需要使用JS进行运算

要求客户端运算JS,是现代反爬虫技术比较流行的方法。爬虫需要添加相关的逻辑来实现JS代码里的算法。
由于这个网站更新的频率相当高,而且JS算法非常复杂,所以这个网站的爬虫最好是直接引用官方的JS,而不是重新实现算法。实现的方法有很多,比如可以使用程序构造特定的HTML和JS组合,使用无界面的谷歌浏览器来完成。

2.使用eval函数加密自定义函数

网站中的JS函数,有很多是加密的。这些函数代码使用eval函数嵌套多层,需要用eval函数解析JS代码多次,才能获得原始的函数,这样的代码难以阅读来分析算法,必须采用直接引用JS的方法来实现爬虫的算法。

3.使用复杂的算法消耗计算时间

网站中有一处密钥是用JS计算的,涉及MD5、SHA、BASE64等算法,非常复杂。经测试,一台i3处理器的计算机,计算这个密钥需要花费六七秒种。可见官方的反爬虫决心非常强。

4.代码中的密钥值具有迷惑性

代码中有一个密钥变量设置了初始值,看起来这个值就是最后要用的值,但实际上不是,这个密钥变量在通讯的时候,会被更新为另一个值。为了提高分析效率,可以使用浏览器的调试功能,加入断点,一步一步调试,就可以迅速找到更新这个变量的位置。

5.对同一个IP地址的请求有限制

获取列表页面没有限制,可以无限爬取。获取正文页面有限制,同一个IP地址每天不能请求太多,否则会出现验证码。这个验证码的识别还是很简单的,可以通过识别图像的方法解决,也可以通过更换IP的方法解决。

6.加密算法策略升级比较频繁

这个网站的更新相当频繁,主要是更新反爬虫策略。为这个网站编写爬虫,要做好长久的分析网站、改写爬虫准备,代码的结构和注释尽量要方便自己的阅读。

三、获取列表的详细步骤

1. 重要变量

1) guid

在客户端生成的一串随机生成的16进制字符串,用减号分隔。
例如:c3495d84-0174-52af282e-1d5dffbefa00
每次通讯时都需要生成一次新值。
创建方法:Javascript

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

2) number

将上一个步骤生成的guid通过POST方法提交给服务器,得到一个8位长度的字符串。
例如:YUCLQLY4
提交地址:http://wenshu.court.gov.cn/ValiCode/GetCode
提交参数:guid
后期运算的时候,有时候会用number的前4位。

3) conditions

这是搜索字符串,根据实际关键字拼接即可。
比如:要搜索案件名称为“测试”的文书,字符串为“searchWord 测试 AJMC 案件名称:测试”,空格用加号替换,中文需要使用UTF-8字符集编码,如:“searchWord+%E6%B5%8B%E8%AF%95+AJMC++%E6%A1%88%E4%BB%B6%E5%90%8D%E7%A7%B0:%E6%B5%8B%E8%AF%95”

4) vjkl5

将guid和number和conditions三者通过GET方法提交给服务器,得到一个变量名为vjkl5的Cookie。
例如提交地址:http://wenshu.court.gov.cn/list/list/?sorttype=1&number=YUCLQLY4&guid=c3495d84-0174-52af282e-1d5dffbefa00&conditions=searchWord+测试+AJMC++案件名称:测试
返回的Cookie:

_gscu_2116842793=38217821u8ob4015; _gscbrs_2116842793=1; ASP.NET_SessionId=obvr1tuaealkxakdqpuqfsnz; Hm_lvt_d2caefee2de09b8a6ea438d74fd98db2=1539738124,1539939830,1540547054; Hm_lpvt_d2caefee2de09b8a6ea438d74fd98db2=1540547316; _gscs_2116842793=t405470532wtpyg81|pv:5; vjkl5=ff9d8c3899ffecaf6901681896c33528ecc7678d

其中最后一段vjkl5=ff9d8c3899ffecaf6901681896c33528ecc7678d就是。
这个提交地址需要保

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值