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