引子
曾听一个理科同学说他同事的逸事:这位同事对占用时间超过 5秒,不必用脑又必须做的事情,都会写个小程序替他解决。工作中的邮件来往就不用去说了,即便是在讨论项目的工作群里,也是交给小程序自动处理。检测到某人说话、内容与自己工作相关、又或是有人@了自己之类后,连接一个语句库自动回复。
听过之后甚是羡慕,如果我们司法人员也会一点编程技巧,将可以节省大量时间。比方说把填入办案系统、摘录证据等事交给电脑,既可以节省精力又可以减少错误,还可以省下时间好好分析下案件中的证据材料和法律关系。
带着对程序员的艳羡,再加上各种机缘巧合,我开始了自己的Python之旅。现在稍微尝到了点编程的好处和乐趣,比方说我们工作中要查询很多法律文件和文书,如果只是一两份,我们在网页上直接下载就可以。但是如果有很多份需要操作,将会很不方便。而爬虫功能,可以很方便地替我们实现这一需求,而且还可以顺带删除掉各种广告及其他无关内容。
下面以法律人都会接触到的裁判文书网为例,简单介绍下爬虫功能的实现。熟练掌握之后,下载我们需要的大量裁判文书,就是很简单、分分钟可以搞定的事了。
正文
一、准备工作
开始前,先简单介绍下Python和一些基础问题。
Python是一种语法简单、模块多的电脑语言,可以很方便地实现很多功能;而且不用去操心具体如何实现,只要找到了合适的模块,告诉它让它去做就可以,很适合非程序员入手。不得不说,这真是需要检索大量资料的法律人的福音。
比如说,我们想从网上抓取数据,如果用别的语言来编写程序,需要很多行,非常麻烦。但是,如果用Python,几行就能解决问题。
在选择了Python之后,有语言版本和模块两个问题要确定。语言版本方面,主要有2.7和3两种。2.7的优势是有历史 “悠久” ,可以用的模块多;3的优势是它符合未来的发展方向,而且大多数我们用得上的模块都已经支持,使用中对中文的支持要好得多。所以,个人建议用直接上 3。当然,这些对我们外行人来说并不是很重要,两者都差不多,能用就行,不要卷入程序员之间的口水战。
除此之外就是模块问题。模块就像日常工作的笔墨纸砚之类的工具,它省去我们自己去“造工具” 的时间。这里我推荐 Anaconda,像普通软件一样,大家只要在Google或百度上找一下,在它的官方网址下载安装,你的电脑就可以用Python一样进行编程了。我们用得上的那些模块,它都已经一起打包安装,省去了我们去找模块、装模块和处理模块之间兼容性的时间,可以说是工具的工具。
总结一下,准备工作就是一句话:
搜索Anaconda,下载!安装!DONE!
二、上手爬虫
互联网是网,而在网上替我们搜索资料的程序,就是爬虫。
我们要动手的裁判文书网比一般的网站复杂一点,无法直接用网址进行抓取。因此,我们首先弄明白两个问题,一是网上显示的文书内容是从哪儿发过来的,二是网站要满足什么条件才会向我们发送这些内容。
1 . 跟踪网页:
登录中国裁判文书网首页,在检索框中输入执行两个字
直接搜索“执行”两个字,确定以后,我们在浏览器上可以看到的网址如下:
但是这样操作后,看到的是一篇篇的标题链接,做不到直接抓取内容。那么怎么办?
我们就需要用软件网页进行跟踪。这个软件不用安装,无论是IE,还是Chrome,你按F12的话,这个软件都会自动蹦出来。下面以chrome为例。
按F12后 ,右边就弹出了软件的界面。选中右上面的network的大项 ,刷新下网页。浏览器与网站的所有交互内容 ,就出现在下面的name小项中,里面就藏着我们要的内容。在这个网页里,拉动右侧的浮动条,找到Listcontent,好了,内容就悄悄地藏在划圈的Listcontent项下。
我们选中 Listcontent,从右边Headers的详情描述中可以看到,请求方式是POST,而Request URL后跟着的,就是真正的内容请求地址。
如果一直跟上面的操作在做,你会发现:
你已经叩开了一个新世界的大门。
下面,我们一起解决第二个问题:
我们要发送什么内容,这个网址才会返回我们需要的信息?同样在这个界面下,我们继续往下翻,可以看到Form Data内容(如下图)。
我们可以看到,上图红框中的信息内容分别是:
Param:搜索条件“全文检索:执行”;
Index:1(第一页);
Page:5(每页出现5个文书,最大值为20,我们可以直接在程序里设为20);
order:法院层级(按法院层次来排序);
最后一个参数是解码的,照抄即可。按这个格式给网页发送内容,就可以取得我们想要的资料了。
2 . 代码
知道用什么格式发送信息、发送到哪儿之后,就该写代码了。
下面我们打开前面提到的,已经下载安装并准备好的软件Anaconda项下的Spyder。两者的关系就好比Anaconda是win系统,spyder是记事本。Spyder是负责写编码的工具。
就会出现下面这个界面:
在左侧,我们就可以开始自己写代码了。在进入具体代码前针对初学者再啰嗦两句。
一是心理问题。初学者一般有两个问题,1) 会不由自主地想为什么这么写?这样写的 “法理基础”是什么?这种问题是程序员中的精英考虑的,一般的程序员都没琢磨明白。我们非专业人员奉行的应该是拿来主义,能用就行。法律主业搞好了,还有兴趣再研究不迟。
要是兴趣太大一不小心彻底转行了,那 …… 恭喜你加入了一个高薪行业 ,一般的 Python 程序员月薪中位数在18000左右,对,18000,18000,18000,哈哈 。2) 想搞懂一个例子里涉及的所有问题,这种钻究态度是好的,但在初上手时会成为你学习和操作的障碍。学编程其实就是学语言,只不过是跟电脑说的语言。想想我们在初学一门外语时是怎么做的?背!所以python发送post请求,初学编程,最简单有效地办法是,我们先把代码一个字不差的,一行一行的自己敲进电脑里。敲完了,你就懂了。
二是技术问题。也是两个方面:1)“#”后面跟的是注释,用来给大家解释代码,无须输入电脑,输入了也会被电脑忽略掉,不影响程序运行。2) 代码这东西,如果有一个地方错了电脑就不认,特别是符号不能错,格式不能错。①所有的符号,除了被英文单引号、双引号包起来的内容,都必须是英文输入法下的符号;②所有代码顶格写,但如果有从属关系 ,注意在空四个空格 ( 下面要讲的代码涉及到一个 while 的循环语句就涉及这个问题,我会在代码里进一步解释 ) 。如果有一句太长了可以回车,电脑看得懂,不影响程序运行。
现在开始上正菜!
以下代码的作用是,搜索全文含有 “执行”二字的案件,并将其时间、案号、案件名称提取出来放在excel表里。
#到”””之前这一段是打开spyder的界面就会自动添加的内容,一般不用去动。
#这一句是告诉电脑解码方式是UTF-8码python发送post请求,我们可以简单地理解为可以在代码里加中文,建议每次编程都加上。
#-*- coding: utf-8 -*-
#用(””” “””)包起来的这一部分电脑也是忽略掉的,主要是给人看的部分,分别是代码首次编写时间和作者,属于可写可不写的部分。
“””
Createdon Sun Jul 24 23:11:55 2016
@author:罗滔北京丰台检察院
“””
#这里是导入模块,以下模块分别用于抓取网页、数据处理保存、时间、正则表达式
importrequests as req
importpandas as pd
importtime
importre
#这是刚才我们通过F12查找到的网页
限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688