代鵬
摘要:本文介紹了Nutch網(wǎng)絡(luò)爬蟲(chóng)的系統(tǒng)架構(gòu)和抓取網(wǎng)頁(yè)信息流程,針對(duì)Nutch網(wǎng)頁(yè)信息數(shù)據(jù)采集冗余的問(wèn)題,引入了增量更新方法和適應(yīng)性采集周期計(jì)算方法,首先使用Simhash算法和漢明距離計(jì)算出網(wǎng)頁(yè)相似度,根據(jù)網(wǎng)頁(yè)相似度計(jì)算出網(wǎng)頁(yè)采集周期,然后根據(jù)此周期進(jìn)行網(wǎng)頁(yè)信息采集,在采集前根據(jù)網(wǎng)頁(yè)元信息中的網(wǎng)頁(yè)內(nèi)容長(zhǎng)度與網(wǎng)頁(yè)最后更新時(shí)間的變化與否判斷是否進(jìn)行采集。實(shí)驗(yàn)結(jié)果表明,隨著采集次數(shù)的增多,網(wǎng)頁(yè)采集周期會(huì)在真實(shí)網(wǎng)絡(luò)變化周期上下浮動(dòng),使得網(wǎng)頁(yè)采集周期與真實(shí)網(wǎng)頁(yè)變化周期之間較為接近,最終有效的減少了冗余的網(wǎng)頁(yè)信息采集數(shù)據(jù)量,減輕了對(duì)網(wǎng)絡(luò)環(huán)境的壓力,實(shí)現(xiàn)了適應(yīng)性的增量的網(wǎng)頁(yè)信息采集過(guò)程。
關(guān)鍵詞:計(jì)算機(jī)軟件與理論;Nutch;Simhash;漢明距離;增量采集方法
中圖分類(lèi)號(hào):TP311.5
文獻(xiàn)標(biāo)識(shí)碼:A
DOI: 10.3969/j.issn.1003-6970.2015.11.025
0 引言
目前,互聯(lián)網(wǎng)資源成指數(shù)級(jí)增長(zhǎng),僅就國(guó)內(nèi)方面,根據(jù)中國(guó)互聯(lián)網(wǎng)信息中心發(fā)布的數(shù)據(jù),截至2014年12月,中國(guó)網(wǎng)頁(yè)數(shù)量為1899億個(gè),年增長(zhǎng)26.6%。面對(duì)如此龐大的網(wǎng)絡(luò)資源,搜索引擎需要依賴于高效的網(wǎng)絡(luò)爬蟲(chóng)進(jìn)行網(wǎng)絡(luò)信息采集。
網(wǎng)絡(luò)爬蟲(chóng)的采集策略主要分為以下幾種:基于整個(gè)Web的信息采集(Scaleble Web Crawling),增量式Web信息采集(Incremental Web Crawling),基于主題的Web信息采集(Focused Web Crawling),基于元搜索的信息采集(Metasearch Web Crawling),基于用戶個(gè)性化的信息采集(Customized Web Crawling),基于Agent的信息采集(Agent Based Web Crawling)。隨著網(wǎng)絡(luò)資源的迅速增長(zhǎng),增量式的Web信息采集顯示出越來(lái)越大的優(yōu)勢(shì),相比其他的周期性全部采集的方式,可以極大的減少數(shù)據(jù)采集量和數(shù)據(jù)冗余。增量的網(wǎng)頁(yè)信息采集技術(shù)成為獲取網(wǎng)頁(yè)信息的一種有效且必要的手段。
本文設(shè)計(jì)與實(shí)現(xiàn)了一種增量采集方法和一種計(jì)算網(wǎng)頁(yè)采集周期的方法。通過(guò)使用Simhash算法與漢明距離計(jì)算出網(wǎng)頁(yè)相似度,根據(jù)網(wǎng)頁(yè)相似度計(jì)算出網(wǎng)頁(yè)采集周期,在采集前根據(jù)網(wǎng)頁(yè)元信息中的網(wǎng)頁(yè)內(nèi)容長(zhǎng)度與網(wǎng)頁(yè)最后更新時(shí)間判斷是否進(jìn)行此次采集,最后在Nutch網(wǎng)絡(luò)爬蟲(chóng)基礎(chǔ)上,實(shí)現(xiàn)了網(wǎng)頁(yè)信息的增量采集功能。
1 相關(guān)技術(shù)介紹
1.1 Web網(wǎng)絡(luò)爬蟲(chóng)
Web網(wǎng)絡(luò)爬蟲(chóng)是一種自動(dòng)的采集網(wǎng)頁(yè)的程序,一個(gè)典型的爬蟲(chóng)從一組URLs開(kāi)始,這組URLs稱為種子地址,首先網(wǎng)絡(luò)爬蟲(chóng)會(huì)從種子地址開(kāi)始采集網(wǎng)頁(yè),然后將網(wǎng)頁(yè)中地址解析出來(lái)放到待采集地址隊(duì)列中,然后網(wǎng)絡(luò)爬蟲(chóng)以某種順序(深度優(yōu)先、廣度優(yōu)先、優(yōu)先隊(duì)列等)從待采集地址隊(duì)列中獲取地址,然后重復(fù)上述過(guò)程。
如圖l是爬蟲(chóng)的基本架構(gòu):
1.2 Nutch
Nutch作為當(dāng)前最流行的開(kāi)源爬蟲(chóng)之一,已經(jīng)廣泛應(yīng)用于企業(yè)產(chǎn)品中,目前Nutch的l.x版本中,從1.3版本本身就主要只有爬蟲(chóng)功能。
Nutch的具體工作流程如下:
1)將種子文件中的URL地址輸入到Crawl DB中,作為采集的初始地址。
2)從Crawl DB中按照某種順序獲取下一次需要抓取的地址列表。
3)根據(jù)地址列表進(jìn)行網(wǎng)頁(yè)信息抓取。
4)解析網(wǎng)頁(yè)信息。
5)更新Crawl DB庫(kù)。
6)重復(fù)2-5步,直到達(dá)到抓取深度或終止程序。
具體過(guò)程如圖2所示:
Nutch為了增強(qiáng)可擴(kuò)展性、靈活性與可維護(hù)性,使用了插件系統(tǒng),編寫(xiě)一個(gè)插件實(shí)際上是給已經(jīng)定義好的擴(kuò)展點(diǎn)增加一個(gè)或多個(gè)擴(kuò)展,核心的擴(kuò)展點(diǎn)有Parser、HtmlParseFilter、Protocol、URLFilter等。根據(jù)本文的需求,可以實(shí)現(xiàn)通過(guò)實(shí)Parser擴(kuò)展點(diǎn)開(kāi)發(fā)簡(jiǎn)單的插件,進(jìn)行實(shí)驗(yàn)驗(yàn)證。
1.3 漢明距離
在信息論中,兩個(gè)等長(zhǎng)字符串之間的漢明距離是兩個(gè)字符串對(duì)應(yīng)位置的不同字符的個(gè)數(shù),換言之,即將一個(gè)字符串變換成另外一個(gè)字符串所需要替換的字符個(gè)數(shù)。例如:“1011101”與“1001001”之間的漢明距離是2?!癟oned”與“roses”之間的漢明距離是3。
在下面的Simhash算法中使用漢明距離來(lái)判斷網(wǎng)頁(yè)之間的相似性。
1.4 Simhash算法
在傳統(tǒng)的文本相似度比較技術(shù)中,典型的方法是將一篇文章的特征詞映射到高維空間,即這篇文章的向量,然后計(jì)算出每篇文章的向量,根據(jù)向量之間的距離來(lái)判斷文章的相似度。但這種方法存在一個(gè)問(wèn)題,如果文章的特征詞特別多就會(huì)導(dǎo)致整個(gè)向量的維度很高,使得整個(gè)計(jì)算的代價(jià)很大,而且這種方法需要對(duì)所有的文章進(jìn)行兩兩比較,從而產(chǎn)生了非常大的計(jì)算代價(jià)。在少量的數(shù)據(jù)情況下,這種方法是可以接受的,但在大量的數(shù)據(jù)情況下,對(duì)于Google這種處理萬(wàn)億級(jí)別的網(wǎng)頁(yè)的搜索引擎是很難接受的,Google為了解決這種問(wèn)題采用了基于降維思想的Simhash算法。
Simhash的主要思想就是降維,將高維的的特征向量映射成一個(gè)f-bit的指紋(fingerprint),通過(guò)比較兩個(gè)文章的f-bit的指紋的漢明距離來(lái)確定兩篇文章是否重復(fù)或者高度近似。
2 系統(tǒng)設(shè)計(jì)
針對(duì)本文的具體需求,結(jié)合Nutch系統(tǒng),精簡(jiǎn)了其中的有關(guān)索引、反轉(zhuǎn)鏈接的模塊,在數(shù)據(jù)存儲(chǔ)中添加了URL存儲(chǔ)元信息,對(duì)Parser模塊進(jìn)行了重寫(xiě),在Parser模塊中主要添加了增量更新方法和網(wǎng)頁(yè)采集周期計(jì)算的方法。最終設(shè)計(jì)的系統(tǒng)主要包含7個(gè)模塊。
2.1 網(wǎng)頁(yè)采集系統(tǒng)功能模塊圖endprint