主要包括調度器,URL管理器,網(wǎng)頁(yè)下載器,網(wǎng)頁(yè)解析器這些部分,實(shí)現價(jià)值數據的獲取。
對待抓取的URL集合和已抓取的URL集合進(jìn)行管理,避免重復抓取和循環(huán)抓取。
主要有5個(gè)部分的功能,判斷待添加URL是否在容器中、添加新的URL到待爬取集合、判斷是否還有待爬取集合、獲取待爬取URL、將URL從待爬取的集合移動(dòng)到已爬取集合中。
分類(lèi):Python內存(待爬取和已爬取兩個(gè)set()集合),關(guān)系數據庫(eg:MySQL,建表來(lái)實(shí)現存儲),緩存數據庫(eg:redis,支持set數據結構)。大型公司一般采用高效的緩存數據庫作為URL管理器,小型的或想要永久保存的采用關(guān)系數據庫作為URL管理器,小型的不需要保存的可以直接存儲在Python內存中。
將互聯(lián)網(wǎng)上URL對應的網(wǎng)頁(yè)下載到本地。
主要功能有:將待獲取URL對應的互聯(lián)網(wǎng)網(wǎng)頁(yè)以HTML的形式下載到本地,并以本地文件或內存字符串的形式進(jìn)行存儲,以便后續的處理。
分類(lèi):urllib2(Python官方基礎模塊),requests(Python的第三方插件)等。
1.2.1 urllib2下載網(wǎng)頁(yè)的方法
a.使用urlopen函數直接獲取網(wǎng)頁(yè)信息
具體代碼:

b.添加data(用戶(hù)需要輸入的數據),http header數據,結合urllib2的Request和urlopen函數來(lái)獲取網(wǎng)頁(yè)信息
具體代碼:

c.添加特殊情景的處理器,根據不同的URL選擇不同的處理器(eg:HTTPCookieProcessor、ProxyHandler、HTTPSHandler、HTTPRedirectHandler),綜合使用urllib2的build_opener、install_opener和urlopen函數來(lái)獲取網(wǎng)頁(yè)信息。
具體代碼(以Cookie為例):

從網(wǎng)頁(yè)中提取有價(jià)值數據的工具。
主要功能有:提取價(jià)值數據,提供新的待爬取的URL列表。
分類(lèi):模糊匹配(正則表達式),結構化解析(html.parser,Beautiful Soup第三方插件,lxml)。其中Beautiful Soup這個(gè)第三方插件可以使用html.parser或lxml作為解析器,功能較強大。
1.3.1 結構化解析
將整個(gè)網(wǎng)頁(yè)文檔加載為一個(gè)DOM(Document Object Model文檔對象模型)樹(shù)。

1.3.2 Beautiful Soup網(wǎng)頁(yè)解析語(yǔ)法
a.根據下載的HTML網(wǎng)頁(yè),創(chuàng )建BeautifulSoup對象。此時(shí)即將整個(gè)網(wǎng)頁(yè)文檔字符串下載為一個(gè)DOM樹(shù)。

b.根據DOM樹(shù)進(jìn)行節點(diǎn)的搜索,對應的方法有find_all(搜索出所有滿(mǎn)足要求的節點(diǎn))和find(搜索出第一個(gè)滿(mǎn)足要求的節點(diǎn)),這兩種方法的參數設置相同,分別為name,attrs,string,分別對應為名稱(chēng)、屬性、文字,并依據這三種信息進(jìn)行搜索。

c.在獲取節點(diǎn)后,我們可以對節點(diǎn)的名稱(chēng)、屬性、文字等進(jìn)行解析,訪(fǎng)問(wèn)節點(diǎn)信息。


聯(lián)系客服