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