本文將和大家分享一些從互聯(lián)網(wǎng)上爬取語料的經(jīng)驗。
0x1 工具準備
工欲善其事必先利其器,爬取語料的根基便是基于python。
我們基于python3進行開發(fā),主要使用以下幾個模塊:requests、lxml、json。
簡單介紹一個各模塊的功能
01|requests
requests是一個Python第三方庫,處理URL資源特別方便。它的官方文檔上寫著大大口號:HTTP for Humans(為人類使用HTTP而生)。相比python自帶的urllib使用體驗,筆者認為requests的使用體驗比urllib高了一個數(shù)量級。
我們簡單的比較一下:
urllib:
import urllib2 import urllib URL_GET = "https://api.douban.com/v2/event/list" #構建請求參數(shù) params = urllib.urlencode({'loc':'108288','day_type':'weekend','type':'exhibition'}) #發(fā)送請求 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" #構建請求參數(shù) params = {'loc':'108288','day_type':'weekend','type':'exhibition'} #發(fā)送請求 response = requests.get(URL_GET,params=params) #Response Headersprint(response.headers)#Response Codeprint(response.status_code)#Response Bodyprint(response.text)
我們可以發(fā)現(xiàn),這兩種庫還是有一些區(qū)別的:
1. 參數(shù)的構建:urllib需要對參數(shù)進行urlencode編碼處理,比較麻煩;requests無需額外編碼處理,十分簡潔。
2. 請求發(fā)送:urllib需要額外對url參數(shù)進行構造,變?yōu)榉弦蟮男问剑籸equests則簡明很多,直接get對應鏈接與參數(shù)。
3. 連接方式:看一下返回數(shù)據(jù)的頭信息的“connection”,使用urllib庫時,"connection":"close",說明每次請求結束關掉socket通道,而使用requests庫使用了urllib3,多次請求重復使用一個socket,"connection":"keep-alive",說明多次請求使用一個連接,消耗更少的資源
4. 編碼方式:requests庫的編碼方式Accept-Encoding更全,在此不做舉例
綜上所訴,使用requests更為簡明、易懂,極大的方便我們開發(fā)。
02|lxml
BeautifulSoup是一個庫,而XPath是一種技術,python中最常用的XPath庫是lxml。
當我們拿到requests返回的頁面后,我們怎么拿到想要的數(shù)據(jù)呢?這個時候祭出lxml這強大的HTML/XML解析工具。python從不缺解析庫,那么我們?yōu)槭裁匆诒姸鄮炖镞x擇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")
新聞熱點
疑難解答