python网页数据抓取(Python之旅功能的实现与优势编程技巧)

优采云 发布时间: 2021-09-14 11:17

  python网页数据抓取(Python之旅功能的实现与优势编程技巧)

  注:网站已改,但无后续,代码需自行调整。

  本文首发于Trial Research,内容略有不同。

  引用:

  我曾经听过一位理科学生谈论他同事的轶事。这位同事会写一个小程序,解决需要5秒以上,不需要动脑的事情。不用说,即使在讨论项目的工作组中,工作电子邮件也会自动处理。检测到有人在说话,内容与你的工作有关,或者有人@了自己等,连接句库自动回复。

  我听了很羡慕。如果我们司法人员也能有一些编程技巧,那会节省很多时间。例如,您可以通过将填写办案系统和提取证据等事情交给计算机来节省时间并减少错误。也节省了分析证据和法律关系的时间。

  怀着对程序员的羡慕,再加上各种巧合,我开始了自己的Python之旅。现在我对编程的好处有了一点体会。例如,我们在工作中要查询很多法律文件和文件。如果只有一两份,我们可以直接在网页上下载,但是如果有很多份要操作,会很不方便。爬虫功能可以很方便的为我们实现这个需求,还可以顺便删除各种广告和不相关的内容。

  下面简单介绍一下爬虫功能的实现,以法律专业人士会接触到的裁判文书网为例。

  身体:

  一、准备工作

  开始之前,先简单介绍一下 Python 和一些基本问题。

  Python 是一种语法简单、模块众多的计算机语言。它可以轻松实现许*敏*感*词*;您无需担心如何实现它。只需找到合适的模块并告诉它去做。它非常适合非程序员。开始吧。比如从网上抓取数据,如果你用另一种语言写一个程序,需要很多行,但如果你用Python,几行就可以解决问题。

  选择Python后,语言版本和模块有两个问题。在语言版本方面,主要有2.7和3两种。2.7的优点是历史悠久,可以使用的模块很多; 3的优点是是未来的发展方向,我们能用的大部分模块都已经支持3了,3支持中文好多了。因此,我个人建议直接使用3。当然,这些对我们外行来说都不是很重要。两者几乎相同。只需使用它们。不要卷入程序员之间的口水战。

  除此之外是模块问题。模块就像我们日常工作中的笔、墨、纸、砚等工具。它节省了我们自己“制作工具”的时间。这里推荐使用Anaconda。它就像普通的软件。你只需要在谷歌官网下载安装它,你的电脑就可以用Python编程了。我们可以使用的模块已经打包安装在一起,节省了我们寻找模块、安装模块以及处理模块之间兼容性的时间。可以说是一个工具。

  总结一下,准备就是一句话,搜索Anaconda,下载,安装,DONE!

  二、上手攀虫

  互联网就是网络,在互联网上搜索我们的程序就是爬虫。

  我们要做的判断文档网络比一般的网站要复杂一点,不能直接通过URL爬取。因此,我们首先了解两个问题。一是网上展示的文档内容发送到哪里,二是网站在将内容发送给我们之前必须满足什么条件。

  1. 追踪网页

  

  直接搜索“执行”这个词。这是我们在浏览器上可以看到的网址,但是不能直接抓取内容,所以需要使用软件网页进行跟踪。这个软件不需要安装,不管是IE还是Chrome,按F12都会弹出这个软件。我们以chrome为例。

  

  按F12后,右侧弹出软件界面。选择上面网络的主要项并刷新网页。浏览器和网站之间的所有交互内容都出现在下面的名称项中,我们想要的内容隐藏在里面。在此页面中,内容隐藏在带圆圈的 Listcontent 项下。

  我们选择Listcontent,从右边的header细节可以看出请求方法是POST,后面是真实的内容请求地址,后面是Request URL。

  接下来,我们来解决第二个问题。我们需要发送什么内容才能让这个 URL 返回我们需要的信息?同样在这个界面,我们继续向下滚动,可以看到Form Data的内容(如下图)。

  

  我们可以看到信息内容为:搜索条件“全文搜索:执行”,Index:1(第一页),Page:5(每页出现5个文档,最大值为20,我们可以程序中直接设置为20), order: *敏*感*词*级别(按*敏*感*词*级别排序),最后一个参数是解码的,直接复制即可。也就是说,我们必须发送到网页的搜索需求是:全文收录“执行”这个词,如果有符合条件的人以这种格式向网页发送内容,就可以得到我们想要的信息。

  2.code

  在您知道消息的格式和发送位置之后,就可以编写代码了。接下来我们在刚才提到的Anaconda软件下打开Spyder。两者的关系就好比Anaconda是win系统,spyder是记事本。 Spyder 是负责编写代码的工具。

  

  出现如下界面。

  

  在左侧,我们可以开始编写自己的代码。在进入具体代码之前,给初学者多说一句。

  现在让我们开始供应主菜。以下代码的作用是在全文中搜索收录“execute”字样的案例,并提取时间、案例编号、案例名称放入excel表格中。

  #到"""之前这一段是打开spyder的界面就会自动添加的内容,一般不用去动。

#这一句是告诉电脑解码方式是UTF-8码,我们可以简单地理解为可以在代码里加中文,建议每次编程都加上。

# -*- coding: utf-8 -*-

#用(""" """)包起来的这一部分电脑也是忽略掉的,主要是给人看的部分,分别是代码首次编写时间和作者,属于可写可不写的部分。

"""

Created on Sun Jul 24 23:11:55 2016

@author: 检

"""

#这里是导入模块,以下模块分别用于抓取网页、数据处理保存、时间、正则表达式

import requests as req

import pandas as pd

import time

import re

#这是刚才我们通过F12查找到的网页

url='http://wenshu.court.gov.cn/List/ListContent'

#这是页数、程序休息时间的定义和三个空的列表用来装筛选后的数据。

Index=1

SleepNum = 3

dates=[]

titles=[]

nums=[]

#循环模块,因为有很多页,当小于这个数时,不断地传数据,相当于点下一页的功能。最后一句的意思是每执行一次,index加1,就是翻到下一页。具体页数也可以用变量实现。

while Index < 123:

#这是请求头,伪装成浏览器访问网站,以免被网站屏蔽

my_headers={&#39;User-Agent&#39;:&#39;User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.95 Safari/537.36 Core/1.50.1280.400&#39;,}

#这一行就是我们搞定的搜索条件,可以按自己要求设置,比如:“*敏*感*词*名称:北京市人 民*敏*感*词*,*敏*感*词*类型:执行*敏*感*词*,裁判日期:2016-01-01 TO 2016-10-08”。

#如果实在不会设置,可以在文书网上搜索好,再通过F12查看到的内容复制粘贴到代码中&#39;Param&#39;:后即可。

data={&#39;Param&#39;:&#39;全文检索:执行&#39;, &#39;Index&#39;: Index,&#39;Page&#39;:&#39;20&#39;,&#39;Order&#39;:&#39;裁判日期&#39;,&#39;Direction&#39;:&#39;asc&#39;}

#将网址、请求头、搜索条件等数据上传并取得内容

r=req.post(url, headers=my_headers, data = data)

#用 json解码取得的网页内容

raw=r.json()

#用正则表达式将我们需要的内容提取出来,正则表达式真的很有用,要想真正用好westlaw等数据库,这一关也得过

#大意是定义筛选标准,把(“裁判日期”:)后,(&#39;)前的内容截取出来。

pattern1 = re.compile(&#39;"裁判日期":"(.*?)"&#39;, re.S)

date = re.findall(pattern1,raw)

pattern2 = re.compile(&#39;"案号":"(.*?)"&#39;, re.S)

num = re.findall(pattern2,raw)

pattern3 = re.compile(&#39;"*敏*感*词*名称":"(.*?)"&#39;, re.S)

title = re.findall(pattern3,raw)

#把筛选出的数据添加到开始的三个空列表里

dates+=date

titles+=title

nums+=num

#这一行是让程序休息,做事留点余地比较好。通过网页编码可知,文书网是有验证码功能的,如果你抓的太狠中招莫怪。

time.sleep(SleepNum)

Index += 1

#这里我们可以看到,从while开始到此,所有的代码都缩进了四个空格。这是因为要告诉电脑,这一段代码构成一个相对独立的组,当index小于123时,不断地从这个组第一句代码执行到最后一句代码,而不涉及到本文涉及的其他代码。

#这里代码又是顶格写。

#用pandas模块将筛选出的内容转成dataframe格式,并保存到Excel。

df=pd.DataFrame({&#39;时间&#39;:dates,&#39;案号&#39;:nums, &#39;*敏*感*词*名称&#39;:titles})

df.to_excel(&#39;C:\\result.xlsx&#39;)

  好了,工作结束,保存,点击软件界面上的绿色小三角或按F5运行,过一会,我们会发现C盘静静的躺着一个名为result的excel表,里面存储着我们想要的信息。以后我们不用打开编程软件Spyder,把代码保存在桌面,双击,它会根据设置的搜索条件自动找到相关的文档号,保存为excel,不用了登录响应。文档网络慢是不是很方便?

  如果只想要结果,直接粘贴到Spyder左边的框中,直接运行即可。 (但是如果你看完这篇文章想进一步了解编程,个人强烈不推荐这个。因为你自己没有输入很多细节,你不会注意到。比如刚才提到的while语句,按回车行前有个“:”,看代码很容易忽略。当然Spyder编程软件很聪明,会为我们完成,但是我们不能靠机器,对吧。 )

  其他补充:

  首先,编程的好处很多。可以提高我们的工作效率(就像上面的代码,运行2、3分钟,可以下载上千份法律文件);而且因为编程就像教一个什么都不知道怎么做事的孩子,有一个前提,没有明确的解释是做不到的,所以很合乎逻辑,可以反馈合法的工作。例如,在分析法律关系时,编程的思维方式可以帮助我们意识到我们忽略的隐含前提。

  其次,编程并不难。通过这种级别的编程,您不必考虑机器如何理解我在写的内容。这种问题更像是游戏的高级设置选项。大部分代码直接是英文单词,可以看成是写一篇英文论文。 我们的难处主要在于不舒服,这绝不是不可理解的。这个问题可以通过多输入几次代码来解决。

  最后,如果这个文章有幸引起你学习Python的兴趣,可以去这个网站学习基础知识,通俗易懂,而且每节都附有小练习,非常适合初学者(课后一定要练习,写出来就对了)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线