面向法律案例的爬虫算法设计与实现*

2022-08-12 03:30董红松孔跃辉刘继华
山西电子技术 2022年4期
关键词:案情爬虫网页

董红松,孔跃辉,葛 军,刘继华

(1.吕梁学院计算机科学与技术系,山西 吕梁 033000;2.吕梁学院信息中心,山西 吕梁 033000)

将基于爬虫技术的数据挖掘和分析运用到各行业[1]已经日益成熟。目前,国内对司法领域案件数据挖掘分析也取得显著的成果,如王超[2]等人做过基于“中国裁判文书网”的数据分析。但是国内在刑法案情的爬虫方面依然有不足之处。第一,当前数据挖掘方面也主要集中在非常结构化的裁判文书网上,其中陈忠海[3]等人做了“中国裁判文书网”的调查与分析有关的研究,而对于其他司法网站结构化程度较弱的案情缺乏研究;第二,研究设计的有关案件的爬虫算法只能针对某一类型的数据进行挖掘和分析,如雷向晶[4]等人以裁判文书网数据为依据,完成公证证据在虚拟财产案件中的使用困境及解决对策,缺乏普适性。

在结合前人网页爬虫设计思路,如张莉婧等人设计的图书馆爬虫算法[5],朱庆生等人的基于链接和内容分析的爬虫算法的研究[6]基础上,针对“XXX网”发布的刑事案情进行了研究,并设计了一种爬虫算法,通过算法做出分类等处理。主要针对三类案件:一是涉及黄赌毒治理的刑事案件;二是对新冠肺炎治理涉及的刑事案件;三是对一般的社会治理的刑事案情,如偷盗,黑社会,暴力等案件进行归类,但本算法不止可以爬取以上三类案件,对其他案件依然有效。然后通过该算法进行了数据分析等操作。该算法具有普遍适应性,在此基础上做出数据分析,完成数据存储。

1 网页结构分析

通过“XXX网”网址,进入页面,审判的案情分成多类,包括民事案情、刑事案情、行政案情等。以刑事案情为例,所有刑事案情呈现纵向列表分布,每件案情在本页面提供标题和案情发生时间。选择首页面检查源码,通过观察网页源码发现,所有案情标题,均在“元素”下的某列表下,选择得到标题所在位置的路径。随机点击某一个标题的具体案情,查看源码,对比发现,所有文本均在一个相同的列表下,不同的只是所在网页的不同。

2 爬虫算法研究与设计

经过网页源码分析以及对网页布局进行分析后,需要对文本内容进行挖掘和处理等操作,研究对象“XXX网”的页面呈现静态形式,结合实际需求,为减轻服务器的后台压力,提出一种针对“XXX网”的爬虫方式,通过给关键函数提供URL,获取刑法案例标题页面所有标题和链接,联系链接构建新的URL,从而访问不同URL获取每一个案例的文本,加以处理并存取,利用正则表达式提取一页所有数据,反复循环执行以上操作,保证爬取所有文本,最后利用代码进行数据分析操作。爬取流程如图1所示。

图1 算法原理框图

2.1 获取网页链接

由于获取的每个网页都只有一个案例文本,而所有网页的链接都在标题页面。因此设计思路的第一步是获取所有的链接,代码流程图如图2所示。

图2 获取网页链接示意图

2.2 获取网页文本

当获取到存放一页所包含标题个数i的链接数组后,需要处理链接形成新的URL,获取网页每个案情文本流程图如图3所示。Pycharm开发环境中,调用CSS选择器,获取文本。需要注意的是:需要对源文本进行译码操作,网站后台服务器传回来的数据属于二进制,而文本可视需要的文件格式属于UTF-8格式,可以通过设置格式response.apparent_encoding转换成txt文件,便于后期通过正则表达式提取关键数据。在程序中,循环处理i次链接,每个链接对应一个网址,总计每次会处理i个网址。这i个链接在前期处理好后会存入一个数组中,每获取一次网页文本时,只需读取数组序号便可以得到数组链接。

图3 获取网页文本流程图

2.3 刑法案例文本归类

对涉及到的三个类别刑法案例分别进行处理,有利于后期数据统计,算法主要的思路是匹配关键字,利用正则表达一一匹配。其三个类别的关键字存放到三个数组中间,三个类别的关键数组分别为:guan_jian_zi1=[' 黄',' 赌',' 毒',' 色'];guan_jian_zi2=[' 疫情',' 药',' 防控',' 病毒',' 口罩',' 疫苗',' 野',' 狩猎',' 猎'];guan_jian_zi3=[' 假',' 拐',' 骗' ,' 暴力',' 恶',' 黑社会',' 打',' 杀',' 伪',' 偷',' 盗',' 窃']。本算法做出分类的流程如图4所示。

图4 刑法案例文本归类流程图

2.4 文本数据抓取设计

2.3中将文本进行归类,此处对每个文本的数据进行挖掘。经过前期归纳发现,由于每个刑法案情审判的结果都有罚款金额或者有期徒刑。因此主要挖掘的数据为每个案情的罚款金额数目和有期徒刑的时间,并将两类数据通过excel进行表格存取。实现该设计时需要提前建立excel文件,在抓取数据只需要调用此文件的本地路径即可,每次抓取到文本后,直接进行处理文本数据,省略了传递文本,存储文本后再读取文本的过程,大大的改善了算法的实现效率。

3 关键代码设计

3.1 正则表达函数的设计

在实现算法时,大量运用了正则表达式提取关键数据,因此列举出关于正则表达函数的设计。用正则程序提取标题的关键词:例如一个刑法案例的标题为“多次容留他人吸毒,情侣一人获刑一人获拘役”,预先定义一个关键词组guan_jian_zi1=['黄','赌','毒','色'],将标题定义文本以字符串的类型传递给列表F2,利用F2[0].find(guan_jian_zi1[m],0,len(F2[0])-1)此类函数查找F2中是否含有关键词组guan_jian_zi1的元素,若有则输出这个关键字的位置,其中m表示元素位置,len(F2[0])-1表示字符串的长度。运行代码,本函数输出的为8,观察标题:“毒”字正位于标题第八个位置。在刑事案情的案件时间、罚款金额数据提取,刑事案情有期徒刑的提取,均运用了正则表达式,对于每种设计方案具体运用的关键代码函数如图5所示。

图5 关键代码函数示意图

图5中,在罚额和有期徒刑的程序中,运用了re库compile函数,其函数意义是通过关键字查找关键字,“.*?”表示关键字全部内容。

3.2 访问服务器代码设计

访问程序作为爬虫设计的开头部分,包含模拟浏览器的部位,请求部位,译码部位等。因此对本算法设计的访问代码程序做出分析与说明。访问服务器的程序代码如下图6所示。

图6 访问服务器代码示意图

在这段程序中,第一行代码中的header为自定义设计的一个模拟浏览器,在该行代码中,设置的浏览器版本为Mozilla/4.0,windows操作系统版本为Windows NT,第一行代码中的浏览器设置可以进行合理的修改。

第二行代码为正式访问服务器的请求函数,本行代码主要通过requests函数进行请求,该函数带的三个参数主要有url(访问目标网页的网址)、headers(浏览器参数配置)、verify(访问浏览器的验证书),需要注意的是verify=False表示不需要进行验证书进行验证。

第三行代码表示响应服务器,并接收服务器传回的文件。

第四行代码print()函数表示打印,type()函数为文件格式,“XXX网”的服务器传回给浏览器的所有文件属于二进制格式,代码中的response.content是本地文件接收到的文件内容。

最后一行代码,直接对二进制文件进行了译码操作,该行代码转换成text的文件格式,并将翻译的文本以单列表的类型传递给了变量html2,html2存放文本,也就便于后期进行直接的数据挖掘和处理。

4 结论

本算法经过实际测试发现,能够避免服务器后台的封杀IP,属于单线程爬取文本类型。该算法在每次访问服务器时均有时间间隔设置,以此减轻后台服务器的运行压力,避免了后台服务器的过度访问造成的经济损失。从网页的分析角度入手,对网页规律进行挖掘,对算法各功能模块进行设计,由于python语言属于高层语言,因此本算法也便于后续研究开发。本算法处理的对象为“XXX网”每天公布的刑事案情,算法适应性广,只要网页格式类似与“XXX网”或者网页文本呈现规律线性分布,均可以利用所设计的算法进行爬取。本算法与传统算法的不同在于,该算法使用者可以设置爬虫上限,且不会对网站造成经济损失,不会对服务器造成压力。本算法仅用于测试,得到的数据仅用于科学研究,不做任何商业用途,且不涉及任何敏感信息。

猜你喜欢
案情爬虫网页
利用网络爬虫技术验证房地产灰犀牛之说
基于Python的网络爬虫和反爬虫技术研究
基于HTML5与CSS3的网页设计技术研究
凌晨“案情”
是谁下的毒
基于CSS的网页导航栏的设计
基于HTML5静态网页设计
大数据背景下校园舆情的爬虫应用研究
基于URL和网页类型的网页信息采集研究
大数据环境下基于python的网络爬虫技术