裁判文书网数据爬取(2019.5.15更新)

一、前言

为避免不必要的侵权纠纷,本篇文章不会贴入核心代码,如有兴趣交流探讨,非工作时间随时欢迎。项目中采用的技术是为了纯粹获取数据,不会涉及暴力侵入,js注入等有害服务器的行为,得到的完全是合理合法的公众数据,请大家监督。文章中采用的技术有js反混淆,解编码等等,所需的支持环境很多,如有需要还请麻烦自行解决,这里不再赘述。分析时采用的是Charles抓包,因为做过一遍知道了路径因此文章就以浏览器自带的调试控制台介绍。

最近因为工作的原因,好久都没有更新博客了,今天为了对最近新掌握的知识做一个总结,就抽空更新一篇关于中国裁判文书网的数据爬取的文章。众所周知,文书网的反爬机制简直令人发指,几乎全部是网站自己定制的规则,再加上封IP,验证码,定量查看等等,但仔细分析依旧有迹可循。文书网两周一小更,四个月一大更,所以可能发现前几天的爬虫突然用不了了,这都是正常现象,尤其是今年四月份的大更,更是一言难尽。曾经也试过使用selenium,但速度的确感人,且相对而言更加不够稳定(重复数据,内存爆炸,异常处理等一系列问题)。裁判文书网是我目前遇到的最难的也是反爬机制最多的网站,如果可以从头至尾分析一遍,对爬虫技术肯定是大有裨益,接下来介绍我的逆向分析过程:

二、分析

A、分析需要获取的数据页

图一、 content_docid请求页面

1、可以看到这个网址就是我们需要的数据,但是控制台里没有数据,找xhr看是不是在后台返回的结构化数据里,可惜没有。

2、这个docid肯定是唯一索引,全局搜索,发现还有一个aspx,里面刚好是我们需要的数据,而且还是get请求,接下来找docid这个参数。

B、分析真实数据页面请求

图二、 aspx请求页面

3、分析aspx的cookie,发现参数wzws_cid,vjkl5等一系列参数,带好参数直接请求,获得数据。

4、这里cookie先放一放,找DocID。全局搜索发现没有,加密数据,定位到指定js页面。

5、网站这里用的eval混淆,经过解码js代码,发现是自定规则的基于md5的加密方式,直接翻译成python,一千多行过于臃肿,更换方式,通过execjs库直接执行解码后的js代码,为的是获取加密后docid,但是这段代码需要两个参数,RunEval和ID,这两个参数肯定在列表页。

C、分析列表页

图三、 全局寻找参数

6、找到加密docid的原料RunEval和ID,发现在列表页返回的xhr的ListContent中,但是要请求这个ListContent,需要提交表单,也就是说这是一个post请求。

7、点击控制台参数,发现需要的参数如下表所示,这里前五项是数据请求的形式,后三项vl5x,number,guid也是需要自己构造的,可惜的是这里的三个变量依旧是加密的。

8、post请求也需要cookie,这里需要vjkl5,wzws_cid等一系列参数,cookie问题与上面相同,先放到最后处理。这里提前说明一下,post表单与cookie时效都是一分钟左右,也就是每一次测试都要新构造,但是一个ip每天的请求频率如果达到大约5秒一个的话,就会被ban,第二天解封,这里需要有足够的代理测试,同时要保证构造的速度够快,否则报的错误很容易误导到其他方向上去。(操作逐渐狰狞......)

表一、 数据的post请求表单
Param 全文检索:行政
Index 1
Page 10
Order 法院层级
Direction asc
vl5x 068bef0cd4a1ed5c886cd2ed
number B5L4
guid 2955fa06-6042-02eba40d-d91e566c3163

图四、 ListContent请求页面

9、通过火狐浏览器带参数请求,(这里不使用谷歌浏览器原因是,谷歌浏览器在执行重定向时返回的是重定向之前的请求,是后台通过抓包才发现的,浏览器机制问题)。

10、全局搜索vjkl5,定位到vjkl5的加密js,同样需要反混淆,翻译调用,使用execjs包执行vjkl5码发现可以得到所需要的vl5x码。

11、下面解决number与guid,这里的number也是加密数据,但是不是js混淆加密,而是post请求加密,加密原料就是guid,全局搜索guid,定位到guid函数,发现这是一个随机生成的base数据,翻译成python,获取了三个参数。

图五、 number的post请求页面

12、找到vjkl5的起始源头,发现在请求列表数据时返回的Set-Cookie中刚好包含这个值,拿到之后请求发现如下图所示,数据没请求到,这与四月份的大更新有关,新增了一个参数wzws_cid参数,这个参数被作为请求标志防止机器爬取。

13、通过302重定向这个页面会返回一个新的cid,反混淆js,得到三个关键数据dynamicurl,wzwsfactor,wzwsquestion和一段js代码。

14、这里的js采用的是反混淆sojson.v5加密,这个加密方式的介绍是:“请保存好源代码,加密过后无法恢复”,是的,无法解密。怎么办,方法有三,第一种selenium(舍弃,就是为了脱离selenium的),第二种nodejs直接运行(内存爆炸,有一些注意事项),第三种暴力傻瓜式破解(手动更换变量调试,最后翻译成python)。

图六、 假cookie请求结果

15、拿到禁止重定向请求到的wzws_cid,这里分析时使用浏览器的无痕模式,cookie是服务器端给的,要想获取cookie就要避免本地的cookie影响,配合第一次请求到的假cookie再次发起请求,获得Set-Cookie字段的vjkl5值。

16、不同的ip返回的wzws_cid码是不同的,因为封ip机制所以必须使用高匿代理,云端ssl隧道转发与本地ip都会被后台识别,这样每一个新的页面链接都需要重新获取wzws_cid,至此逆向分析完毕,下面是最终获取的json数据。

图七、 最终获取的格式化数据

三、正向请求步骤

1、请求列表网址,这个网址需要带生成guid和post请求后的number,获得假cookie与wzws_cid

2、获取网址内容拿到三条数据dynamicurl,wzwsfactor,wzwsquestion,以三条数据为原料执行获得当前请求网址

3、带着刚才的假wzws_cid,向上一步构造的网址请求数据,这里要禁止重定向,获取vjkl5值

4、解密vjkl5值为vl5x值,重新获取guid与number,带好form表单,这里表单数据要与第一步构造的列表网址同义,请求ListContent,获取RunEval与ID,一次能够得到十条数据

5、通过RunEval与ID,解密DocID,构造aspx请求链接

6、带vjkl5请求上一步链接,获得假cookie与wzws_cid

7、重复执行第二步

8、重复执行第三步,获取最终的文本数据

9、一次十条数据,因为cookie与vjkl5的时效性,并且vjkl5是与请求列表页链接和post表单完全契合的,再次请求时需要从第一步循环开始

四、注意

1、当请求显示“请开启JavaScript并刷新页面”,说明wzws_cid失效

2、当请求显示“remind key”,说明vjkl5失效

3、aspx可以使用docker+splash直接渲染得到最终数据,亲测可用,但是稍慢,本次就不再介绍,后期有机会再更新。

4、这里scrapy,lxml,代理设置等等python中所用到的工具、框架、支持为节省篇幅都没有介绍,如果这方面还有问题,请先熟读崔庆才的《网络爬虫开发实践》

5、It is easier said than done

五、插曲

1、两周一小更,刚好赶上,跑的好好的代码第二天突然失效了,心态大崩,所幸又找到了问题。建议留出一个selenium版本,以防止网站大更后爬虫失效而无法获取数据的问题。

2、裁判文书网站开发者喜欢把自己工作注释到代码中,摆好擂台发起挑战,这里放一张去年八月份的大更新。

图八、 接受挑战

裁判文书网爬虫(2019.5.15更新)相关推荐

  1. 裁判文书网 爬虫 升级最新版本0.7 更新时间2020-12-17

    接上一篇文件:裁判文书网 爬虫 最新更新2020-08-12  https://blog.csdn.net/myhot/article/details/108046389 本次升级主要已支持写入mys ...

  2. python爬取裁判文书并分析_裁判文书网爬虫攻克

    最近因为公司需要爬取裁判文书网的某一类别文章数据,于是简单研究了一下,发现网站数据全是js加载的,于是想都没想直接用selenium尝试爬取,没想到竟然有selenium都抓取不到的js(刚毕业的py ...

  3. 裁判文书网 爬虫 最新更新2020-08-12

    该程序采用Node模拟人工操作,自动获取页面内容,并将获取的数据保存到excel中(每1000条保存一个文件,可以设置保存的条数).excel文件内容如下图: 声明:本文章是以学习和交流为目的,数据源 ...

  4. 202106裁判文书网采集思路 理论无视更新

    严正声明:本文章是以学习和交流为目的,文书及其相关数据的知识版权完全归属文书网及权利所有者,严禁利用本文所提流程和数据进行盈利.相关代码及数据请在24小时以内删除.作者不承担由于非法使用程序和数据造成 ...

  5. 裁判文书网爬虫Docid解密思路

    1. 使用node.js本地搭建web,运行js,返回解密结果.getValue()函数获取解密结果 // 创建服务器http.createServer( function (request, res ...

  6. 2021-04-01裁判文书网数据python爬虫更新下载

    长期持续更新数据 2020-11-08裁判文书网数据python爬虫更新下载添加链接描述 截至3月已从数据库中下载1亿1200万条裁判文书数据,有需要数据的伙伴可以(。・∀・)ノ゙嗨前台QQ7900- ...

  7. 2020-11-08裁判文书网数据python爬虫更新下载

    2020年9月1日更新 文书网2020年8月31日晚更新之后就需要手机注册验证登录了,所以,账号是个问题. 分析 1. 登录 比较简单哦,主要难题是多账号的登录及session的更新维护. 2.其它 ...

  8. 爬虫修正:裁判文书网20200901更新增加登录系统

    爬虫修正:裁判文书网20200901更新增加登录系统 一.登录系统的增加 二.增加登录函数 三.一个比较纠结的地方 一.登录系统的增加 导致需要登录,直接是无法进入了.以往可以直接进入具体的类别如 现 ...

  9. python 爬虫 裁判文书网 19年4月更新版

    完整版代码github地址:https://github.com/Monster2848/caipanwenshu 爬虫主体逻辑: import re import time import pymon ...

  10. Python爬虫Selenium手动接管Edge爬取裁判文书网“环境污染”数据(Mac环境)

    目标数据:爬取从2007年到2022年,各地级市中级法院历年关于"环境污染"的裁判文书数量. 由于裁判文书网需要登录,Selenium手动接管爬取可避免频繁登录造成的封号风险. S ...

最新文章

  1. 4.65FTP服务4.66测试登录FTP
  2. OpenCV | OpenCV彩色图像直方图算法实现
  3. 【人物】Paul Graham: 卑鄙的人一定失败
  4. C核心技术手册(五)
  5. Android中文API(96)——SoundEffectConstants
  6. 实用MYSQL语句收集
  7. 使用libvirt技术监控虚拟机资源利用情况
  8. 设计模式(十):装饰者模式
  9. FxFactory 8 Pro for Mac(fcpx/ae/pr视觉特效插件包)
  10. 20145109 《Java程序设计》第七周学习总结
  11. MNIST数据集的下载
  12. 汉语言文学如何利用计算机思维,计算机在应用于汉语言文学时产生的优势与局限.PDF...
  13. c语言回溯法解决倒桥本分数式,回溯法 经典题目 八皇后 桥本分数
  14. ArduPilot简介
  15. js中undefined
  16. WannaCrypt 防护补丁MS17-10
  17. 使用刻录机时的注意事项
  18. 元宇宙系列之AI虚拟人:“人”潮汹涌 探路未来
  19. Halium 9 尝鲜 -- 在小米平板4上的移植 (五)
  20. 课设复习之信息论自适应算术编码与译码

热门文章

  1. Ubuntu18.04安装有道词典
  2. SLAM中本质矩阵E,基础矩阵F,单应矩阵H总结
  3. osl倒数第三层_原子最外层、次外层及倒数第三层最多容纳电子数的解释
  4. Scratch下载(各版本都可下载)
  5. 数据分析学习笔记--航空公司客户价值分析(代码)
  6. 几种高效电路分析方法
  7. android系统apk文件,如何安装apk文件 安卓手机apk文件安装方法
  8. Photoshop将图片转为RGB颜色模式 您还不会吗?
  9. 神经网络检索方法与一种结合local和distributed文本相似度算法
  10. 实用主义当道——GitHub 热点速览 Vol.48