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