python爬取裁判⽂书并分析_裁判⽂书⽹爬⾍攻克
最近因为公司需要爬取裁判⽂书⽹的某⼀类别⽂章数据,于是简单研究了⼀下,发现⽹站数据全是js加载的,于是想都没想直接⽤selenium尝试爬取,没想到竟然有selenium都抓取不到的js(刚毕业的python⼩⽩哈哈)。于是在⽹上搜取各种裁判⽂书⽹的爬⾍思路⽅法,发现有还是有挺多前辈研究过的,我根据他们的思路也研究了⼀下,但是作为⼩⽩的我也只能明⽩⼤概思路,但是有很多省略没写的地⽅我也是全然不会,但是好在我也并没有放弃呀,于是在坚持不懈的以及公司动的前端的⼩哥哥的帮助下,终于将裁判⽂书⽹给攻破了。所有我想总结⼀下作为⼩⽩的思路,我尽可能的写的详细⼀点,希望⼤家能看明⽩哈!
⾸先,如果⽤python爬⾍的话,由于此篇需要执⾏js⽂件来获取参数,所以可以使⽤python⼀个叫PyV8的⼀个库来执⾏js⽂件,具体⽤法⼤家可以去⽹上搜索,这⾥就不做解释了。但是安装这个库需要⽤python2来执⾏,并且我当时安装的好像不怎么顺利,费了好些劲才装上。如果到最后实在不⾏,可以⽤另外⼀个库execjs,我没⽤过,不过应该也可以的。
selenium获取cookie接下来就是分析⽹页了:
进⼊裁判⽂书⽹⾸页之后,点击或者输⼊某⼀个搜索名称,例如搜索 :建设⼯程,之后会进⼊相关列表页。F12打开调试器会发现没法调试,需要关闭右下⾓的反调试按钮:
接下来分析js⽂件,可以知道⼀个叫ListContent的⽂件,他的返回数据正是我们需要的⽂章ID:
可是怎么获取到他呢? 通过查看他的Headers头可以发现,该请求⽅式是通过post请求的,传递的参数分别
是:Param,Index,Page,Order,Direction,v15x,number和guid⼋个参数。
其中前五个很好理解,但是后⾯三个参数v15x,number,guid就是需要观察其他js⽂件来获取的了。
经过多番研究后,我的思路是⾸先获取guid,再通过guid得到number参数,最后再想办法获取到v15x参数。
⼀ ⾸先,我在⼀个叫Lawyee.CPWSW.List.js⽂件⾥⾯到了guidCreat的函数,该函数定义了两个变量,var creatGuid 函数和var guid变量。观察发现,原来guid就是通过这两个变量获取的呀,于是就将这两个函数复制到我的js⽂件⾥⾯了。
代码如下:这样只要在python代码⾥⾯执⾏调⽤这个函数,就可以返回guid的值了。
⼆ 接下来就是获取number了。可以看到,通过请求GetCode这个⽂件我们可以获取到number值
再观察他的headers头发现,该请求是⼀个post请求,并且需要传递上⼀步获得的guid参数。
在这⾥我还要提醒⼀下⼤家,请求头⾥⾯cookie在这⾥也是⼀个重要的参数。⼤家观察⼀下每⼀个js⽂件⾥⾯的cookie值,除了控制台⾥⾯显⽰出来的第⼀个请求⽂件⾥⾯request Headers的cookie以外,其他请求⽂件的cookie都是⼀样的(cookie⾥⾯⼤家主要看vjk15这个值就好),⽽这第⼀个请求⽂件正好会返回Set-Cookie这⼀参数,意思是这时候服务器会对你动态设置⼀个cookie值,这个值就是你这以后请求⽹页所需要带上的。并且也是后⾯计算v15x这个参数所需要的。
所有在这⾥我们请求ListCode这个⽂件的时候,需要先请求第⼀个⽂件来获取cookie值。代码如下,这样我们就可以带上这个cookie的vjk15来请求下⼀个⽂件了。
现在可以请求LisyCode来湖区number值了,只需要在header⾥⾯带上刚才获取到的vjk15值,然后post带上guid的值就可以返回得到number了。附上代码:
三  现在只剩最后⼀步,获取v15x这个参数
再次查js⽂件,发现在Lawyee.CPWSW.List.js这个⽂件⾥⾯有如下代码:
原来参数v15k是通过调⽤getKey()函数实现的,name我们接下来这个getKey()函数在哪个地⽅。于是在刚才我们说的第⼀个请求⽂件⾥⾯发现了它:
观察这个函数可以发现,⾥⾯还需要⽤到其他的js⽂件⾥⾯的函数和我们刚才获取到的cookie⾥⾯的vjk15
的值,这⾥还需要⽤到
hex_sha1,md5等这些函数,现在到md5.js这个⽂件,最简单的⽅法就是把这两个⽂件的这些函数全部复制进来你的js⽂件⾥⾯就可以了(提醒⼀下⽹站的这些js代码都是压缩过的,直接放到python⾥⾯运⾏会报错,所以需要先个⽹站格式化⼀下代码。),然后再⾃⼰添加⼀个getcookie的函数,返回你前⾯获取到的vjk15值传⼊getKey函数就可以得到v15k这个参数了。
getKey这段js代码对于新⼿来说有些复杂,因为⾥⾯还需要⽤到⼀些其他js⽂件⾥⾯定义的函数,所以需要好好分析⼀下它都需要些什么,再把它出来后放在⼀起。
现在三个参数都得到了,通过访问ListContent就可以返回⽂章ID了(记住还需要在headers⾥⾯带上你第⼀步返回的cookie的vjk15值哦)
现在就到此结束了,希望对⼤家有所帮助!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。