本文将和大家分享一些从互联网上爬取语料的经验。
0x1 工具准备
工欲善其事必先利其器,爬取语料的根基便是基于python。
我们基于python3进行开发,主要使用以下几个模块:requests、lxml、json。
简单介绍一个各模块的功能
01|requests
requests是一个Python第三方库,处理URL资源特别方便。它的官方文档上写着大大口号:HTTP for Humans(为人类使用HTTP而生)。相比python自带的urllib使用体验,笔者认为requests的使用体验比urllib高了一个数量级。
我们简单的比较一下:
urllib:
import urllib2 import urllib URL_GET = "https://api.douban.com/v2/event/list" #构建请求参数 params = urllib.urlencode({'loc':'108288','day_type':'weekend','type':'exhibition'}) #发送请求 response = urllib2.urlopen('?'.join([URL_GET,'%s'])%params)#Response Headersprint(response.info())#Response Codeprint(response.getcode())#Response Bodyprint(response.read())
requests:
import requests URL_GET = "https://api.douban.com/v2/event/list" #构建请求参数 params = {'loc':'108288','day_type':'weekend','type':'exhibition'} #发送请求 response = requests.get(URL_GET,params=params) #Response Headersprint(response.headers)#Response Codeprint(response.status_code)#Response Bodyprint(response.text)
我们可以发现,这两种库还是有一些区别的:
1. 参数的构建:urllib需要对参数进行urlencode编码处理,比较麻烦;requests无需额外编码处理,十分简洁。
2. 请求发送:urllib需要额外对url参数进行构造,变为符合要求的形式;requests则简明很多,直接get对应链接与参数。
3. 连接方式:看一下返回数据的头信息的“connection”,使用urllib库时,"connection":"close",说明每次请求结束关掉socket通道,而使用requests库使用了urllib3,多次请求重复使用一个socket,"connection":"keep-alive",说明多次请求使用一个连接,消耗更少的资源
4. 编码方式:requests库的编码方式Accept-Encoding更全,在此不做举例
综上所诉,使用requests更为简明、易懂,极大的方便我们开发。
02|lxml
BeautifulSoup是一个库,而XPath是一种技术,python中最常用的XPath库是lxml。
当我们拿到requests返回的页面后,我们怎么拿到想要的数据呢?这个时候祭出lxml这强大的HTML/XML解析工具。python从不缺解析库,那么我们为什么要在众多库里选择lxml呢?我们选择另一款出名的HTML解析库BeautifulSoup来进行对比。
我们简单的比较一下:
BeautifulSoup:
from bs4 import BeautifulSoup #导入库# 假设html是需要被解析的html#将html传入BeautifulSoup 的构造方法,得到一个文档的对象soup = BeautifulSoup(html,'html.parser',from_encoding='utf-8')#查找所有的h4标签 links = soup.find_all("h4")
新闻热点
疑难解答