前言

工作原因,第一次爬虫任务就是中国裁判文书网,中国裁判文书网是目前全球最大的裁判文书网,网站上公示全国历年的司法数据。这个网站隔一段时间就改一版,为了防爬,哈哈哈,和各大采集大神斗智斗勇,如果感兴趣的朋友可以去看看这个网站,这货连个a标签都加密,呵呵,简直丧心病狂。
链接如下:中国裁判文书网

爬虫环境

这一段,是给新手看的部署环境,高手可自行移步到下文的思路区。

  1. 本人入门爬虫是用node.js入门,爬虫(新学),nodejs 也是新学的,所以不用怕学不会。(语言都是工具,主要是针对解密大概率用js,懒的拉库,就用nodejs啦,其实python也不错。)
  2. 至少会用一件监控浏览器request,reponses请求的工具(抓包工具)。windows可以推荐一款fiddle,mac可以推荐一款whistle,自带代理IP,需要吐槽的是每天需要手动调整ip,其他还行。
  3. 代理IP,这个还是需要准备一下子的,到时候封你IP可就烦了。
  4. 会用游览器(这点需要延伸很多,这里我就不再一一赘述了)

爬虫分析

首先来看看这列表页,这就是咱们的目标啦。

再来看看他的header

这是他的body(也就是发送过去的表单)

话不多说,header复制全,直接发送请求,request过去,看看有没有数据回传,结果疯狂remind key(心中一万个草尼玛),后来我利用whistle 发现第二次replay向列表页发送请求时有个参数 connection:从keep-alive 变成close,改完就收到数据。(这里请不要嘲讽我,我的确就是这样ok的)

来看看回传的数据

没错,你没有看错,确实拿到数据了,等cookie失效就remind key了。既然知道思路了,那再来看看body。

vl5x:会变(一看就是个加密参数好吧)
number:也是个不知到啥玩意的东西(这个我真的想笑
guid:会变(一看就是麻烦的东西)因为很长太真实了

来看Cookie

这还是我清除数据后的cookie,一开始,Cookie有点多,我吓到了。实际上我实践过只有vjkl5有用,其他都是纸老虎,呵呵。

第一看看Number

来看看number 我曾到各大平台上的number破解教程请看如下(思路是对的,但是是时代在变化,文书网也在变化)

这个url http://wenshu.court.gov.cn/ValiCode/GetCode

post都变成get了,网站早改了。number现在变成了徒有其表的障眼法。
body有无number,他都会返回数据。

接下来GUID

首先咱们搜索一下,guid的出处,一看,其实很简单,js加密可以直接拿来用。

那guid也解决了。

最后来看vl5x

body中的vl5x和cookie的vjkl5是不是感觉有点关联呢。哈哈哈,直接搜索源码。

一看就是一堆加密函数,看着有点头大,vjkl5在里面加密。接下来看看vl5x
哈哈,果然,露出了庐山真面目,vl5x就是加密后的vjkl5.接下来就想着如何在本地生成vl5x就万事大吉了。

首先我们整理一下思路,vl5x是vjkl5加密后的产物,那么我现在应该先得到vjkl5,而vjkl5又是我们发送header内cookie的必要参数,那么我们就需要首先获得网站的setcookie,拿到后就利用正则表达式把vjkl5剥离开来。

这里调用的request模块直接发送请求,返回cookie,拿到vjkl5

request({url: url,method: "POST",json: true,headers: {"Host": "wenshu.court.gov.cn","Cache-Control": "max-age=0","Upgrade-Insecure-Requests": 1,"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36","Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3","Accept-Encoding": "gzip","Accept-Language": "zh-CN,zh;q=0.9","Connection": "keep-alive"}}, function(err, response, body) {if (!err && response.statusCode == 200) {function createGuid() {return (((1 + Math.random()) * 65536) | 0).toString(16).substring(1)}let Cookie = response.headers["set-cookie"];let str = JSON.stringify(Cookie);let vjkl5 = str.replace(/^.*vjkl5=(\w+).*$/, '$1');}}

接下来就是解密vl5x,如图, 一点一点解把,de函数,直接拷过来,_fxxx函数也是直接拷过来,base64加密,md5加密,sha1加密,eval一层一层解。

这里的解密代码就不发了,有需要的可以联系我。
拿到vl5x一切就大功了,下面代码是我爬虫的主体逻辑。

var request = require('request');
var pool = require('./pool');
var getCode = require('./v_code');var url = "http://wenshu.court.gov.cn/list/list/?sorttype=1";
wenshu_spider(1);function wenshu_spider(index) {request({url: url,method: "POST",json: true,headers: {"Host": "wenshu.court.gov.cn","Cache-Control": "max-age=0","Upgrade-Insecure-Requests": 1,"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36","Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3","Accept-Encoding": "gzip","Accept-Language": "zh-CN,zh;q=0.9","Connection": "keep-alive"}}, function(err, response, body) {if (!err && response.statusCode == 200) {function createGuid() {return (((1 + Math.random()) * 65536) | 0).toString(16).substring(1)}let Cookie = response.headers["set-cookie"];let str = JSON.stringify(Cookie);var vjkl5 = str.replace(/^.*vjkl5=(\w+).*$/, '$1');log(vjkl5);var cookie = "vjkl5=" + vjkl5;log(cookie);let vl5x = getCode.getvl5x(vjkl5);log(vl5x);var url = "http://wenshu.court.gov.cn/List/ListContent";var Index = index;log(index);var Page = 10;var Anjian_type = encodeURI("全文检索");var maohao = "%3A";var Anjian = encodeURI("傻逼");Param = Anjian_type + maohao + Anjian;var Order = "法院层级";eorder = encodeURI(Order);var Direction = "&Direction=asc";var guid = createGuid() + createGuid() + "-" + createGuid() + "-" + createGuid() + createGuid() + "-" + createGuid() + createGuid() + createGuid();log(guid);var data = "Param=" + Param + "&Index=" + Index + "&Page=" + Page + "&Order=" + eorder + Direction + "&vl5x=" + vl5x + "&number=wens" + "&guid=" + guid;log(data);var mysql_connect_table = "spider_1";request({url: "http://wenshu.court.gov.cn/List/ListContent",method: "POST",json: true,headers: {"Host": "wenshu.court.gov.cn","Accept": "*/*","Origin": "http://wenshu.court.gov.cn","X-Requested-With": "XMLHttpRequest","User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36","Content-Type": "application/x-www-form-urlencoded; charset=UTF-8","Referer": "http://wenshu.court.gov.cn/List/List?sorttype=1&conditions=searchWord+1+AJLX++%E6%A1%88%E4%BB%B6%E7%B1%BB%E5%9E%8B:%E5%88%91%E4%BA%8B%E6%A1%88%E4%BB%B6","Accept-Encoding": "gzip","Accept-Language": "zh-CN,zh;q=0.9","Cookie": cookie,},body: data}, function(err, response, body) {if (!err && response.statusCode == 200) {log(body);if (body == "remind key") {wenshu_spider(index);} else {body = JSON.parse(body);pool.getConnection((err, Connection) => {if (err) {wenshu_spider(index);} else {for (let i = 1; i < body.length; i++) {query = "INSERT INTO " + mysql_connect_table + " VALUES('" + body[i].裁判要旨段原文 + "','" + body[i].案件类型 + "','" + body[i].裁判日期 + "','" + body[i].案件名称 + "','" + body[i].文书ID + "','" + body[i].审判程序 + "','" + body[i].案号 + "','" + body[i].法院名称 + "','" + body[0].RunEval + "','" + body[0].Count + "')";Connection.query(query, (err, result) => {if (result) {result = {code: 200,msg: '增加成功'}// if (result = null) {//     wenshu_spider(index);// }} else {result = {code: 0,msg: err}//console.log(err);wenshu_spider(index);}console.log(result);})}wenshu_spider(index + 1);}})}} else {wenshu_spider(index);}})} else {log(err);}})
}function log(s) {console.log(s);
}

第一次写blog的想法

不要嫌弃代码写的烂,谢谢。因为才学的nodejs,回调函数和异步理解的还不是很深刻,有大佬路过可以指点一下,互相讨论讨论哈。过一段时间在github上发布源码和详情页的解密过程。

专业的博客第一次写,nodejs也是,坑有很多,花了不少时间,头发茂盛了不少,肚皮胖了一圈,哈哈,有志者事竟成,程序员的道路,学无止境。

最后看看成功的爬取数据,哈哈哈。

中国裁判文书网爬虫分析(2019年7月版)相关推荐

  1. 中国裁判文书网----最最最详细爬虫----基于各位大佬的帖子---更新一版----步骤不详细?你打死我 本爬虫编写日期:2019-07-30

    目录 一.吐槽 二.参考 三.爬取目标以及爬取思路 1.爬取目标 2.爬取思路 四.破解(重头戏) 1.发现加密参数得过程 1.1 暴力请求 案件详情页 2.破解案件列表页请求参数 2.1 解密num ...

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

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

  3. Python中国裁判文书网

    一:介绍 中国裁判文书网(http://wenshu.court.gov.cn/)是中国司法部门的官方网站,提供全国各级法院的裁判文书和审判流程信息. 二:数据获取

  4. Scrapy框架爬取中国裁判文书网案件数据

    Scrapy框架爬取中国裁判文书网案件数据 项目Github地址: https://github.com/Henryhaohao/Wenshu_Spider 中国裁判文书网 - http://wens ...

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

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

  6. 判决文书网爬虫获取vjkl5失败原因

    以前通过http://xxxx/list/list?xxxx就可以通过cookie返回vjkl5值,最近无论你咋搞就是不返回vjkl5值,纳闷啊,但浏览器跟踪确实返回vjkl5了. 经过分析,估计vj ...

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

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

  8. 中国裁判文书网改版之后抓取--2019-01-10

    一.裁判文书网难点:vl5x.number.guid 三个参数(内容.列表抓取必须的参数). guid 生成规则页面源码里面找,非常简单,是一段js代码. number ~~向 http://wens ...

  9. 2022-03-06裁判文书网(分析)数据更新

    越来越忙,也越来越懒了,没空更新博客了,一些新进的知识点没好好做整理,发不成文章更是要排版(费时间)--然后就没然后了[]( ̄▽ ̄)* 去年裁判文书网的数据上网量比前年有所减少,总量增加不大,截至20 ...

  10. 最新IP数据库 全球IP数据库 IP城市数据库 2019年6月版

    最新IP地址数据库(qqzeng-ip) 2019年 6月 最新发行版 534836条数据 基于:国内基于省市区以及运营商 国外基于国家 版本: 全球旗舰版  国内精华版 国外拓展版英文版 掩码版 字 ...

最新文章

  1. cdh4.6.0升级测试1
  2. python 1 2 3怎么拼接所有可能的数_6000字长文,带你用Python完成 “Excel合并(拆分)” 的各种操作!...
  3. Qt入门——三个臭皮匠顶个诸葛亮
  4. LAMP(7限定某个目录禁止解析php、 限制user_agent、 PHP相关配置、PHP扩展模块
  5. java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...
  6. 一位 女生在第一次应聘软件开发工作时成功被淘汰的例子
  7. 麻将游戏-协议实现 笔记
  8. 基于 PSO 算法解决 TSP 项目
  9. 4.PHP核心技术与最佳实践 --- 数据库(队列)
  10. 计算机中硬盘驱动器安装在哪里,解决方法:在笔记本电脑中安装硬盘驱动器的步骤如何在笔记本电脑中安装硬盘驱动器...
  11. 文档数据库mongodb与列式数据库hbase详细比较
  12. 十大经典排序算法-堆排序算法详解
  13. 圣杯布局和双飞翼布局
  14. disparity和parallax的区别
  15. 7 centos 配置sudo权限_CentOS7 配置sudo并使用
  16. 功率电感的两个额定电流 Isat 与 Irms
  17. 【论文解读 WWW 2019 | MVAE】Multimodal Variational Autoencoder for Fake News Detection
  18. 深度学习(4):NCHW和NHWC
  19. 网页会屏蔽php代码,网站屏蔽360浏览器访问php源码js代码
  20. vue 所见即所得_适用于Vue.js的轻量级所见即所得HTML编辑器

热门文章

  1. 吉他即兴创作演奏训练教程
  2. Google今日涂鸦:纪念居里夫人诞辰144周年
  3. 在ps中用3d来做阴影
  4. html5 ios 音乐加载失败,Cocos2d-JS HTML5的cc.audioEngine音乐音效在iOS设备上不响应静音键的问题...
  5. redis抽奖并发_redis并发操作(lpop/lpush实现)
  6. 【工具】idea去掉UML类图的虚线箭头(依赖关系)
  7. Kibana:为 table 创建链接 drilldown - 7.11 版本
  8. 加载类型库/DLL 时出错。 (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)
  9. 如何提取html的音频,如何将网页中的音频文件提取出来
  10. word中-文字尾部空格自动添加下划线的步骤