Python爬取我国全套法律文档

前言

因为作者是个学生,学习道德与法治是我们必不可少的一门科目。既然叫道德与法治,那么肯定要和法律打交道,特别是在作者还特别擅长这玩意的情况下。跟法律打交道,法律书籍必不可少。

本来我想着买一套便携书凑合的,结果一看价格我蒙了。

¥178!!!

这还只是不带司法解释的常用法律版。

这简直是穷人的噩梦吗!

不过,为了普及法律,网络上都提供了文件下载版本。

本期的目标就是把这些文件都爬下来。

一、数据源

百度一下,满目琳琅。

点进去一看,问题来了,这些网站都有着不统一的格式,有的干脆用格式化文本表示无格式文本,存成文档压根没法用,时效性也大打折扣。

另外百度的搜索结果其实也挺不靠谱……

所以说,我们还是使用官方数据比较好。除了数据量庞大的全国人民代表大会(常务委员会)公告一般随附法律文本之外,还有官方数据吗?

你别说,你要挖到几页之后才能找到一个:https://flk.npc.gov.cn/ 国家法律法规数据库

二、数据筛选

幸好这个网站有筛选功能,不然数据量还是十分庞大的。

在“法律”板块下有“高级检索”选项,我们可以利用这个。

注:可能由于数据录入错误,宪法修正案和部分附件也被录进去了,因此我们暂时不爬取宪法相关数据,同时做了关键词筛选。

附:高级检索的筛选条件

类型:行政法,刑法,民法商法,经济法,社会法,诉讼与非诉讼程序法

时效:有效

三、抓包

1.分页

打开F12开发者工具,按照上面的步骤进行检索。

点击“确定”按钮,出现了一个Ajax请求。

化简一下参数:GET https://flk.npc.gov.cn/api/?xlwj=02&xlwj=03&xlwj=04&xlwj=05&xlwj=06&xlwj=07&xlwj=08&page=1

数据的结构是一个很简单的JSON,类似于这样:

初步猜测xlwj就是筛选条件,page是页面。

思路:一页一页迭代,当totalSize为0时代表没有更多页数了。

2.详细页

随便乱点一条,打开F12。

抓到了一个可疑包:POST https://flk.npc.gov.cn/api/detail,参数里有个id字段,对应上面的数据。

综合分析,这应该就是目标网址。

切到数据,还是JSON格式:

看到没,大大的Word,大大的PDF摆在哪里呢。

所以就这么完事了。

杂谈:看见的与发现的

本来第一眼看到的页面,只有一个大大的“扫码下载”。

下意识的以为还要做二维码识别……其实下载地址包里都有。

这个意味着什么?

做爬虫的时候,先抓包再看!不要忽略那些暗含着数据的字段!

这类还是比较明显的,万一是别的……那不绕死你啊?

像这个,人工分析的时候我也是拿去识别二维码的。当你打开F12,你会发现根本不需要扫码,地址都给你了(也许是要前端渲染预览用的)。

三、代码逻辑

用Windows画图画的不太好看,请见谅

四、代码

总结

这是第一个正儿八经的真实页面小爬虫(之前我主要是写API链式调用),从中也发现了一些坑点,是爬虫大项目的重点知识之一。

幸好网站没有什么反扒…不然我们遇到的情况要复杂的多。(详情请看杂谈部分)总之这个小爬虫就算上手练习吧。

资源下载: