張亞鳳,鄭山紅
(長春工業(yè)大學 計算機科學與工程學院,吉林 長春 130012)
?
Heritrix主題爬蟲設計
張亞鳳,鄭山紅*
(長春工業(yè)大學 計算機科學與工程學院,吉林 長春 130012)
通過擴展Heritrix相應組件來抓取特定網(wǎng)頁,實現(xiàn)預定的抓取策略,并加入APHash算法對URL進行散列,達到了多線程抓取網(wǎng)頁的目的,極大地提高了抓取數(shù)據(jù)的效率。
垂直搜索引擎;主題爬蟲;Heritrix;APHash算法
近年來,現(xiàn)代信息技術(shù)和網(wǎng)絡技術(shù)正以驚人的速度發(fā)展,Internet網(wǎng)絡上的數(shù)據(jù)也呈指數(shù)級趨勢增加。全球前幾年網(wǎng)絡搜索引擎僅僅包括幾千萬頁的網(wǎng)頁量,但現(xiàn)在它已經(jīng)達到了驚人的數(shù)十億頁。數(shù)量的迅速增加帶來了搜索服務的效率嚴重下降,查詢的結(jié)果集也是大規(guī)模的,常常數(shù)以十萬筆的數(shù)據(jù),這些結(jié)果集里有大量冗余和無用信息,很難找到符合用戶自身需求的信息。因此,需要改進現(xiàn)有的一般搜索引擎技術(shù),垂直搜索引擎便在此時應運而生。
垂直搜索引擎是專門給某一特定領域、某一特定人群或某一特定需求提供的有一定價值的信息和有關(guān)服務。“專、精、深”是其顯著的特點,且行業(yè)色彩鮮明[1]。它不同于一般的通用搜索引擎,無論是用于專業(yè)知識的查詢,或是解決日常生活中的資訊,它的專業(yè)性是很清楚的,此時,通用搜索引擎不能實現(xiàn)快速且準確的檢索,尤其是對專業(yè)知識或?qū)W科的某些區(qū)域,這些弊端比比皆是。因此,人們傾向于使用個性化、專業(yè)化的垂直搜索來找到您所需要的信息。
主題爬蟲是垂直搜索引擎服務的關(guān)鍵技術(shù)和核心部分,它的優(yōu)劣直接影響用戶對所得信息的滿意度,它將網(wǎng)頁采集到本地服務器后,對該網(wǎng)頁的主題相關(guān)度值進行計算,較低的將不被進一步處理而被丟棄[2]。優(yōu)先搜集主題相關(guān)度高的網(wǎng)頁是垂直搜索引擎一個顯著的特點,在盡少耗費網(wǎng)絡流量的情況下,盡可能地多發(fā)現(xiàn)、采集主題相關(guān)度高的網(wǎng)頁。
1.1 Heritrix簡介
Heritrix是一個完全開源的、由Java開發(fā)的優(yōu)秀的可擴展的Web網(wǎng)絡爬蟲項目,它采用了模塊化的設計,主要由一些核心類和插件模塊組成。開發(fā)者可以利用Heritrix優(yōu)良的可擴展性對它的插件模塊進行擴展,來實現(xiàn)自己預期的抓取邏輯[3]。
1.2 Heritrix系統(tǒng)結(jié)構(gòu)
Heritrix的系統(tǒng)框架如圖1所示。

圖1 Heritrix的系統(tǒng)框架
其主要模塊及功能如下:
1)CrawlOrde:抓取任務的配置,它是抓取任務的起點,默認情況下通過配置order.xml文件對起始Urls、線程數(shù)等信息進行配置。
2)CrawlController:抓取的核心程序,控制著每次抓取工作的開始和結(jié)束。
3)Frontier:鏈接制造工廠,也可以把它當作一個調(diào)度器,首先提供了特定算法去處理網(wǎng)頁中的URL地址,然后把處理后的地址送給處理線程,進行后續(xù)操作。
4)ToeThreads:這組線程才是實際的工作線程,每個線程處理一個URL,它們實現(xiàn)URL的爬行操作和一系列的后續(xù)操作,具體流程如圖2所示。
2.1 為Heritrix定制自己的QueueAssignmentPolicy
Heritrix采用Berkeley DB建立鏈接隊列。這些隊列放置在BdbMultipleWorkQueues中時,總是先賦予一個Key,然后再把那些鏈接鍵值相同的放在一起,成為一個Queue(隊列)[4]。在Heritrix中,是它的queue-assignment-policy為每個隊列賦上Key值。Heritrix默認使用的queue-assignment-policy是HostnameQueueAssignmentPolicy,它繼承QueueAssignmentPolicy抽象類,主要負責隊列的分配策略。正像其名稱所暗示的那樣,它與Host名值來解決這個問題。換言之,也就是所有的相同的URL的Host名會被放置在同一隊列的中間。

圖2 heritrix處理一個url的流程
HostnameQueueAssignmentPolicy存在這樣一個缺陷,對某個具體站點的網(wǎng)頁抓取時,某一個隊列的長度會出現(xiàn)極度長的現(xiàn)象,有的則是在排隊等待中幾乎是閑置的,這樣就造成多線程抓取的效率極其低下。文中實驗抓取對象為新方向體育用品購物網(wǎng)站,通過自定義QueueAssignmentPolicy來解決這個缺陷,這樣也就改變了Key值的生成方式,從而所有的URL能夠比較平均地散列到不同的隊列中,從而改善了抓取效率。
在Heritrix中擴展queue-assignment-policy,通過繼承包org.archive.crawler.frontier下的QueueAssignmentPolicy類,重寫其getClassKey()方法。此方法先處理一個連接對象,再使用散列算法生成一個Key值,最后把相同Key值的鏈接放置在同一個隊列[5]。常用字符串哈希算法有BKDRHash,APHash,DJBHash,JSHash,ELFHash,PJWHash等,文中使用APHash算法生成Key值。自定義的APHashQueueAssignmentPolicy類的關(guān)鍵代碼如下:
public class APHashQueueAssignmentPolicy extends QueueAssignmentPolicy {
@Override
public String getClassKey(CrawlController controller,CandidateURI cauri) {
eturn this.APHash(cauri.getUURI().toString(),50) + "";
}
/**
* APHash算法
*/
public long APHash(String str,int number) {
long hash = 0;
for(int i = 0; i < str.length(); i++) {
hash ^= ((i & 1) == 0) ? ( (hash << 7) ^ str.charAt(i) ^ (hash >> 3)) :(~((hash << 11) ^ str.charAt(i) ^ (hash >> 5)));
}
long result = hash % number; //模number,即對應的線程數(shù)
return result;
}
}
還得通過配置APHashQueueAssignmentPolicy類才能正常工作,才能用來生成Key值。配置成功后,使用Heritrix抓取網(wǎng)頁的時候,Heritrix就變成默認使用APHashQueueAssignmentPolicy來分配鏈接隊列了。
2.2 擴展FrontierScheduler
Heritrix默認使用FrontierScheduler來抓取網(wǎng)頁,它不能實現(xiàn)對特定網(wǎng)頁內(nèi)容進行抓取[6-7],因此,需要對FrontierScheduler進行擴展,才能使抓取策略控制在新方向體育網(wǎng)站下的體育用品。在MyHeritrix項目的包org.archive.crawler.postprocessor下新建類FrontierSchedulerForXfxty,它繼承FrontierScheduler類,重寫父類的schedule()方法,只有符合特定的URL才會加入到等待隊列中。關(guān)鍵實現(xiàn)代碼如下:
protected void schedule(CandidateURI caUri) {
String uri = caUri.toString();
//只抓取包含"xfx-ty"和"product"的URL,控制抓取范圍在www.xfx-ty.com域名下且包含體育用品的URL
if(uri.contains("xfx-ty") && uri.contains("product")) {
getController().getFrontier().schedule(caUri);
}
}
本次實驗開發(fā)環(huán)境使用MyEclipse 8.6開發(fā)工具,JDK 1.6和Heritrix 1.14.4平臺進行開發(fā);機器配置為:Win7系統(tǒng),內(nèi)存4 G,酷睿2.5 GHz,500 G硬盤,10/100 M以太網(wǎng)。
擴展后的Heritrix運行中的截圖如圖3所示。

圖3 擴展后的Heritrix運行狀態(tài)
圖中顯示的50個線程只有12個處在工作狀態(tài),這是由于只設置了一個種子地址,這也說明了加入APHash散列算法后,Heritrix可以更好地支持多線程,從而很大程度上提高了抓取效率。
抓取的部分體育用品頁面截圖如圖4所示。

圖4 抓取的部分體育用品頁面
這些頁面是使用php寫的,頁面中包含了具體體育用品的詳細信息。
對于垂直搜索引擎,主題爬蟲采集信息的效
率起著決定性的作用。垂直搜索引擎中只有加入設計優(yōu)良的主題爬蟲,才能提高查全率和準確率,才能給用戶帶來更優(yōu)質(zhì)的服務。開發(fā)者可以利用Heritrix其優(yōu)良的可擴展性來擴展它的相應組件,實現(xiàn)自己期望的爬行策略[8]。
通過加入APHash散列算法擴展Heritrix中默認的QueueAssignmentPolicy策略,實現(xiàn)了在同一主機域名站點下的多線程抓取網(wǎng)頁信息,極大地提高了采集信息的效率。
[1] 邵溫.垂直搜索引擎技術(shù)的研究和應用[D].北京:北京工業(yè)大學,2009.
[2] 陳叢叢.主題爬蟲搜索策略研究[D].濟南:山東大學,2009.
[3] 東興.垂直搜索引擎關(guān)鍵技術(shù)研究[D].杭州:浙江理工大學,2012.
[4] 朱敏,羅省賢.基于Heritrix的面向特定主題的聚焦爬蟲研究[J].計算機技術(shù)與發(fā)展,2012(2):65-68.
[5] 劉育蓮.手機產(chǎn)品垂直搜索引擎的設計與實現(xiàn)[D].西安:西安電子科技大學,2012.
[6] 劉高軍,夏景隆.基于Heritrix的網(wǎng)絡爬蟲研究與應用[J].軟件導刊,2013(5):123-125.
[7] 白萬民,蘇希樂.Heritrix在垂直搜索引擎中的應用[J].計算機時代,2011(9):7-9.
[8] 孔祥春,李義杰,鄭凱明.垂直搜索引擎應用研究[J].計算機系統(tǒng)應用,2009(7):150-152.
Heritrix based theme crawler design
ZHANG Yafeng,ZHENG Shanhong*
(School of Computer Science & Engineering,Changchun University of Technology,Changchun 130012,China)
By extending related components of Heritrix to crawl a specific page,some predetermined crawling strategies can be realized. The APHash algorithm is introduced to hash the URL for multi-threaded web page crawling,so the efficiency of data capture is improved.
vertical search engine; theme crawler; Heritrix; APHash algorithm.
2016-03-01
張亞鳳(1990-),男,漢族,河南平頂山人,長春工業(yè)大學碩士研究生,主要從事信息檢索及搜索引擎方向研究,E-mail:fengyuzhe320@163.com. *通訊作者:鄭山紅(1970-),女,朝鮮族,吉林長春人,長春工業(yè)大學副教授,博士,主要從事智能系統(tǒng)與語義網(wǎng)方向研究,E-mail:1668277288@qq.com.
10.15923/j.cnki.cn22-1382/t.2016.5.19
TP 31
A
1674-1374(2016)05-0507-05