用python3教你任意Html主内容提取功能

  

本文将和大家分享一些从互联网上爬取语料的经验。

  

  

工欲善其事必先利其器,爬取语料的根基便是基于python。

  

我们基于python3进行开发,主要使用以下几个模块:请求,lxml, json。

  

简单介绍一个各模块的功能

  

<强> 01 |请求/强>

  

请求是一个Python第三方库,处理URL资源特别方便。它的官方文档上写着大大口号:HTTP对人类(为人类使用HTTP而生)。相比Python自带的urllib使用体验,笔者认为请求的使用体验比urllib高了一个数量级。

  

我们简单的比较一下:

  

urllib:

        进口urllib2   进口urllib   URL_GET=" https://api.douban.com/v2/event/list "   #构建请求参数   params=urllib.urlencode({“疯狂的”:“108288”,“day_type”:“周末”,“类型”:“展览”})   #发送请求   响应=urllib2.urlopen (' & # 63; ' . join ([URL_GET, ' % s ']) % params)   #响应标头   print (response.info ())   #响应代码   print (response.getcode ())   #响应主体   print (response.read ())      

请求:         进口的要求   URL_GET=" https://api.douban.com/v2/event/list "   #构建请求参数   params={“疯狂的”:“108288”,“day_type”:“周末”,“类型”:“展览”}      #发送请求   响应=requests.get (URL_GET params=params)   #响应标头   打印(response.headers)   #响应代码   打印(response.status_code)   #响应主体   打印(response.text)      

我们可以发现,这两种库还是有一些区别的:

  

1。参数的构建:urllib需要对参数进行urlencode编码处理,比较麻烦,请求无需额外编码处理,十分简洁。

  

2。请求发送:urllib需要额外对url参数进行构造,变为符合要求的形式,则请求简明很多,直接得到对应链接与参数。

  

3。连接方式:看一下返回数据的头信息的“连接”,使用urllib库时,“连接”:“关闭”,说明每次请求结束关掉插座通道,而使用请求库使用了urllib3,多次请求重复使用一个套接字,“连接”:“维生”,说明多次请求使用一个连接,消耗更少的资源

  

4。编码方式:请求库的编码方式接受编码更全,在此不做举例

  

综上所诉,使用请求更为简明,易懂,极大的方便我们开发。

  

<强> 02 | lxml

  

BeautifulSoup是一个库,而XPath是一种技术,python中最常用的XPath库是lxml。

  

当我们拿到请求返回的页面后,我们怎么拿到想要的数据呢?这个时候祭出lxml这强大的HTML/XML解析工具.python从不缺解析库,那么我们为什么要在众多库里选择lxml呢?我们选择另一款出名的HTML解析库BeautifulSoup来进行对比。

  

我们简单的比较一下:

  

BeautifulSoup:

        从bs4进口BeautifulSoup #导入库   #假设html是需要被解析的html   #将html传入BeautifulSoup的构造方法,得到一个文档的对象   汤=BeautifulSoup (html、‘html.parser from_encoding=皍tf - 8”)   #查找所有的h5标签   链接=soup.find_all (“h5”)      

lxml:
  

        从lxml进口etree   #假设html是需要被解析的html   #将html传入etree的构造方法,得到一个文档的对象   根=etree.HTML (html)   #查找所有的h5标签   链接=root.xpath (“//h5”)      

我们可以发现,这两种库还是有一些区别的:

  

1。解析:html BeautifulSoup的解析方式和金桥的写法类似,API非常人性化,支持css选择器;lxml的语法有一定的学习成本

  

2。性能:BeautifulSoup是基于DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多;而lxml只会局部遍历,另外lxml是用c写的,而BeautifulSoup是用python写的,明显的性能上lxml>祝辞BeautifulSoup。

  

综上所诉,使用BeautifulSoup更为简明,易用,lxml虽然有一定学习成本,但总体也很简明易懂,最重要的是它基于C编写,速度快很多,对于笔者这种强迫症,自然而然就选lxml啦。

  

<强> 03 | json

  

python自带json库,对于基础的json的处理,自带库完全足够。但是如果你想更偷懒,可以使用第三方json库,常见的有demjson, simplejson。

  

这两种库,无论是进口模块速度,还是编码,解码速度,都是simplejson更胜一筹,再加上兼容性simplejson更好。所以大家如果想使用方库,可以使用simplejson。

用python3教你任意Html主内容提取功能