本文將和大家分享一些從互聯網上爬取語料的經驗。
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")
新聞熱點
疑難解答