■ 陳藝揚(yáng) 郭子雄 何文
南京工程學(xué)院 江蘇南京 211167
網(wǎng)絡(luò)爬蟲是一種按照一定匹配規(guī)則提取Web頁(yè)面中特定內(nèi)容的程序或腳本,通過搜索網(wǎng)頁(yè)地址的方式實(shí)現(xiàn)對(duì)用戶需求內(nèi)容查找,將查找并傳送結(jié)果的過程。爬蟲是代替人手工完成爬取工作的自動(dòng)化程序,能夠在抓取過程中進(jìn)行各種異常處理、錯(cuò)誤重試等操作,確保爬取持續(xù)高效地運(yùn)行,相較于傳統(tǒng)的瀏覽器查找模式準(zhǔn)確率更高、信息量更大且更符合用戶上網(wǎng)需求。
Python不僅提供了功能齊全的類庫(kù)來幫助完成請(qǐng)求,包括最基礎(chǔ)的urllib、trep等HTTP庫(kù),還包含豐富的第三方工具包,例如強(qiáng)大的Scrapy、requests。Python能夠?qū)W(wǎng)絡(luò)協(xié)議的各個(gè)層次進(jìn)行抽象封裝,程序員僅需保證編寫程序的邏輯性,而其強(qiáng)大的字節(jié)流處理功能具有很快的開發(fā)速度,同樣為程序開發(fā)的高效性提供了重要保障。
用戶需求是根據(jù)提供的網(wǎng)頁(yè)URL,搜索提取指定類型的數(shù)據(jù)、文件鏈接,并下載保存至數(shù)據(jù)庫(kù);功能性需求有用戶功能,包括輸入網(wǎng)址、選擇數(shù)據(jù)類型、查看保存的數(shù)據(jù);系統(tǒng)功能有獲取并解析原代碼、提取匹配內(nèi)容、下載并存儲(chǔ)數(shù)據(jù);非功能性需求有進(jìn)度可視化、異常提醒。
圖1 系統(tǒng)框架結(jié)構(gòu)
(1)網(wǎng)址管理器
網(wǎng)址管理的方法主要分為三類:①Python內(nèi)存存儲(chǔ),適合存儲(chǔ)少量數(shù)據(jù)。將網(wǎng)址儲(chǔ)存到兩個(gè)集合中,一個(gè)代表待爬集合,一個(gè)代表已爬集合,然后在Python中用Set()來實(shí)現(xiàn)。Set()本身具有較強(qiáng)的清除功能,能夠?qū)⑾到y(tǒng)中的重復(fù)值全部清除;②關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ),適用于對(duì)數(shù)據(jù)進(jìn)行長(zhǎng)期存儲(chǔ)。通過建立表,其中用兩個(gè)字段分別代表網(wǎng)址和爬取狀態(tài)。③將網(wǎng)址存儲(chǔ)到數(shù)據(jù)庫(kù)redis當(dāng)中,適合存儲(chǔ)大量數(shù)據(jù)。
(2)網(wǎng)頁(yè)解析器
網(wǎng)頁(yè)解析器是對(duì)網(wǎng)頁(yè)中的內(nèi)容和數(shù)據(jù)進(jìn)行解剖與分析。在Python基礎(chǔ)上的網(wǎng)頁(yè)解析器主要分為兩種:一種是采用正則表達(dá)式將整個(gè)網(wǎng)頁(yè)文檔看作字符串,使用模糊匹配的方式將有價(jià)值的數(shù)據(jù)提取出來。另一種是根據(jù)HTML網(wǎng)頁(yè)建立一個(gè)DOM樹,通過樹的形式對(duì)各個(gè)節(jié)點(diǎn)進(jìn)行搜索遍歷,DOM樹形結(jié)構(gòu)根據(jù)上下級(jí)關(guān)系,可以很容易地定位各個(gè)元素所在的位置。
(3)網(wǎng)頁(yè)下載器
網(wǎng)頁(yè)下載器是整個(gè)系統(tǒng)的核心模塊,網(wǎng)頁(yè)中展示的內(nèi)容通常為HTML格式?,F(xiàn)階段在Python中支持的網(wǎng)頁(yè)下載工具有兩類: ①Python官方支持的基礎(chǔ)模塊中的urllib包;②requests第三方工具包,它在功能方面具有十分顯著的優(yōu)勢(shì)。
設(shè)計(jì)思想:系統(tǒng)主要采用模塊化的設(shè)計(jì)方式,各個(gè)功能具有自己獨(dú)立的建設(shè)模塊,這為后續(xù)代碼的維護(hù)提供了極大的便利,可以使代碼的作用得到充分發(fā)揮。對(duì)于整個(gè)系統(tǒng)來說,需要將各個(gè)模塊進(jìn)行編制以后來實(shí)現(xiàn)整體功能。
本系統(tǒng)利用Python標(biāo)準(zhǔn)庫(kù)和第三方工具包構(gòu)建了一個(gè)方便數(shù)據(jù)采集者使用的可配置自動(dòng)化信息采集系統(tǒng)。在本文中,并未對(duì)系統(tǒng)前端和數(shù)據(jù)庫(kù)表格進(jìn)行具體設(shè)計(jì),這些問題還需進(jìn)一步分析規(guī)劃。隨著科學(xué)技術(shù)的不斷發(fā)展,以往傳統(tǒng)的搜索引擎已經(jīng)難以滿足當(dāng)前的信息需求,而爬蟲技術(shù)的應(yīng)用有效地克服了傳統(tǒng)引擎的弊端,具有較大的應(yīng)用研究?jī)r(jià)值,能夠通過數(shù)據(jù)抓取挖掘出更多潛在價(jià)值的信息,加上Python語(yǔ)言的功能強(qiáng)大,能為各種軟件工具提供支持,應(yīng)用Python能夠更加便捷地采集Web信息。