劉順程等
摘 要在大數(shù)據(jù)時(shí)代下,各行各業(yè)都需要大量數(shù)據(jù)的支持,如果所有數(shù)據(jù)都經(jīng)過人工搜索、分析、提煉,則會大大增加工作難度。基于Python的網(wǎng)絡(luò)信息爬取技術(shù)可以自動完成網(wǎng)絡(luò)數(shù)據(jù)的收集、解析、格式化存儲,從而提升工作效率。本文以網(wǎng)絡(luò)信息爬取技術(shù)為研究重點(diǎn),分別介紹網(wǎng)絡(luò)爬蟲的基礎(chǔ)架構(gòu)與運(yùn)行流程,以及基于Python的網(wǎng)絡(luò)爬取技術(shù)實(shí)現(xiàn)。
【關(guān)鍵詞】網(wǎng)絡(luò)爬蟲 Python 大數(shù)據(jù)
隨著“互聯(lián)網(wǎng)+”概念不斷普及,網(wǎng)絡(luò)信息量呈突發(fā)式暴增,導(dǎo)致傳統(tǒng)搜索引擎普遍存在搜索結(jié)果附帶大量無關(guān)信息的問題,加大了收集專用數(shù)據(jù)的難度。于是,網(wǎng)絡(luò)信息爬取技術(shù)(后簡稱網(wǎng)絡(luò)爬蟲技術(shù))應(yīng)運(yùn)而生。
使用網(wǎng)絡(luò)爬蟲技術(shù)可以自動完成網(wǎng)絡(luò)數(shù)據(jù)的挖掘與分析工作。現(xiàn)今的大數(shù)據(jù)時(shí)代,在許多新興產(chǎn)業(yè)中,通過爬蟲爬取下來的信息可以作為數(shù)據(jù)倉庫多維展現(xiàn)的數(shù)據(jù)源,也可作為數(shù)據(jù)挖掘的來源。所以網(wǎng)絡(luò)爬蟲技術(shù)是目前大數(shù)據(jù)時(shí)代下的重要基礎(chǔ)應(yīng)用。
1 網(wǎng)絡(luò)爬蟲的架構(gòu)與流程
1.1 網(wǎng)絡(luò)爬蟲架構(gòu)
網(wǎng)絡(luò)爬蟲架構(gòu)主要有以下三個(gè)基礎(chǔ)部分:網(wǎng)絡(luò)爬蟲調(diào)度端;網(wǎng)絡(luò)爬蟲主程序;價(jià)值數(shù)據(jù)。
爬蟲調(diào)度端能監(jiān)控整個(gè)爬蟲程序的運(yùn)行情況;其中爬蟲主程序包括:
(1)URL管理器,管理將要爬取的URL以及已經(jīng)爬取過的URL;
(2)網(wǎng)頁下載器,根據(jù)待爬URL將指定的網(wǎng)頁下載下來,并存儲為字符串?dāng)?shù)據(jù);
(3)網(wǎng)頁解析器將網(wǎng)頁字符串?dāng)?shù)據(jù)進(jìn)行數(shù)據(jù)抽取,一方面提取出價(jià)值數(shù)據(jù),另一方面提取出新的關(guān)聯(lián)URL傳遞給URL管理器。三個(gè)部分循環(huán)進(jìn)行,只要URL管理器還有待爬取的URL,就會循環(huán)進(jìn)行下去,最終提取出所有價(jià)值數(shù)據(jù)。
1.2 網(wǎng)絡(luò)爬蟲流程
基于以上架構(gòu)的網(wǎng)絡(luò)爬取流程,首先是調(diào)度端詢問URL管理器,是否有待爬取的URL,如過返回是,調(diào)度端會取得第一個(gè)待爬取URL地址,并將其傳送給網(wǎng)頁下載器進(jìn)行網(wǎng)頁下載,調(diào)度端接收到網(wǎng)頁下載內(nèi)容后立即將其傳送給網(wǎng)頁解析器,解析后返回價(jià)值數(shù)據(jù)和新的URL列表給調(diào)度端,一方面將價(jià)值數(shù)據(jù)傳遞給應(yīng)用進(jìn)行收集,另一方面將新URL列表增加到URL管理器中。只要URL管理器有待爬取URL,以上過程會循環(huán)進(jìn)行。最終調(diào)度端會將應(yīng)用中的價(jià)值數(shù)據(jù)進(jìn)行處理并輸出為需要的格式。
2 基于Python的爬蟲模塊技術(shù)實(shí)現(xiàn)
URL管理器能管理待爬URL列表和已爬URL列表,能夠有效防止重復(fù)抓取和循環(huán)抓取,在Python中的實(shí)現(xiàn)方式有三種:通過內(nèi)存,將URL列表存儲在Python內(nèi)存中,使用兩個(gè)set() 數(shù)據(jù)結(jié)構(gòu)分別存儲待爬取與已爬取列表,Python中的set()能自動去除集合中重復(fù)的元素,從而有效防止重復(fù)抓取。第二種是將URL存儲在關(guān)系數(shù)據(jù)庫中,比如MySQL,可以建立一張名為url_list的表,字段為(url,is_crawled)分別表示URL地址和標(biāo)識該URL是已被否爬取,這樣就使用一張表將待爬取和已爬取都進(jìn)行了存儲。第三,在大型互聯(lián)網(wǎng)公司中常常使用緩存數(shù)據(jù)庫來搭建URL管理器,是由于其高效率處理大量數(shù)據(jù)的能力,例如redis,同樣支持set數(shù)據(jù)結(jié)構(gòu),也就可以將待爬取與已爬取URL存儲在兩個(gè)set集合中。
網(wǎng)頁下載器能將指定URL的網(wǎng)頁下載到本地存儲成本地文件或字符串格式,以便進(jìn)行后續(xù)步驟的數(shù)據(jù)分析,故網(wǎng)頁下載器是爬取程序的核心模塊。在Python中我們可以使用urllib2網(wǎng)頁下載器。這是一個(gè)Python官方基礎(chǔ)模塊,它提供了網(wǎng)頁下載、提交用戶數(shù)據(jù)、登錄cookie處理、代理訪問處理等強(qiáng)大功能;我們還能使用功能更為強(qiáng)大的requests,它是一個(gè)Python的第三方插件,同樣支持網(wǎng)頁下載、登錄、文件上傳等功能。當(dāng)我們請求的URL網(wǎng)頁需要用戶登錄或驗(yàn)證登錄時(shí),便可使用網(wǎng)頁下載器提供的特殊處理器,例如在登錄操作中,通常需要操作cookie才能成功登陸,于是需要使用特殊的處理器如HTTPCookieProcessor,將爬蟲程序偽裝成用戶使用瀏覽器正在登錄該網(wǎng)站,隨后即可順利獲取網(wǎng)頁內(nèi)容。
網(wǎng)頁解析器是一個(gè)能從網(wǎng)頁字符串文件中解析出價(jià)值數(shù)據(jù)的處理器,對于的專業(yè)爬蟲來說就是提取出待爬取URL列表和提取出價(jià)值數(shù)據(jù)。Python中有許多網(wǎng)頁解析器,其中使用最為廣泛的是BeautifulSoup這個(gè)第三方插件,它首先進(jìn)行網(wǎng)頁字符的結(jié)構(gòu)化解析,利用HTML與DOM的映射關(guān)系,將HTML文檔轉(zhuǎn)化為DOM樹,對其進(jìn)行基于結(jié)構(gòu)的過濾和基于語義的剪枝操作,使用樹形結(jié)構(gòu)能很精準(zhǔn)定位到某個(gè)節(jié)點(diǎn)、屬性、文本內(nèi)容;接下來即可使用find_all或find方法查詢相應(yīng)節(jié)點(diǎn),訪問節(jié)點(diǎn)名稱、屬性、文字;從而提取出價(jià)值信息進(jìn)行分析。
3 結(jié)束語
進(jìn)入大數(shù)據(jù)時(shí)代,眾多行業(yè)都急需價(jià)值數(shù)據(jù)。網(wǎng)絡(luò)爬取技術(shù)能幫助客戶有效地收集網(wǎng)絡(luò)上的相關(guān)價(jià)值信息,大大降低人力搜索的工作量。同時(shí)基于Python的網(wǎng)絡(luò)爬取技術(shù)不僅簡單易學(xué),而且擁有強(qiáng)大的爬蟲框架作為優(yōu)勢,使得開發(fā)者能更快地開發(fā)出擁有指定功能的爬蟲程序。
參考文獻(xiàn)
[1]羅剛.自己動手寫網(wǎng)絡(luò)爬蟲[M].北京:清華大學(xué)出版社,2010.
[2]王琦,唐世渭,楊冬青,王騰蛟.基于DOM的網(wǎng)頁主題信息自動提取[J].計(jì)算機(jī)研究與發(fā)展,2004(10):1786-1792.
作者簡介
劉順程(1997-),男,大學(xué)本科在讀。就讀于重慶郵電大學(xué)軟件工程學(xué)院。主要研究方向?yàn)榫W(wǎng)絡(luò)安全與大數(shù)據(jù)。
岳思穎(1997-),女,大學(xué)本科在讀。就讀于重慶郵電大學(xué)軟件工程學(xué)院。主要研究方向?yàn)榫W(wǎng)絡(luò)技術(shù)。
作者單位
重慶郵電大學(xué)軟件工程學(xué)院 重慶市 400065endprint