張亞鳳,鄭山紅
(長(zhǎng)春工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,吉林 長(zhǎng)春 130012)
?
Heritrix主題爬蟲(chóng)設(shè)計(jì)
張亞鳳,鄭山紅*
(長(zhǎng)春工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,吉林 長(zhǎng)春 130012)
通過(guò)擴(kuò)展Heritrix相應(yīng)組件來(lái)抓取特定網(wǎng)頁(yè),實(shí)現(xiàn)預(yù)定的抓取策略,并加入APHash算法對(duì)URL進(jìn)行散列,達(dá)到了多線程抓取網(wǎng)頁(yè)的目的,極大地提高了抓取數(shù)據(jù)的效率。
垂直搜索引擎;主題爬蟲(chóng);Heritrix;APHash算法
近年來(lái),現(xiàn)代信息技術(shù)和網(wǎng)絡(luò)技術(shù)正以驚人的速度發(fā)展,Internet網(wǎng)絡(luò)上的數(shù)據(jù)也呈指數(shù)級(jí)趨勢(shì)增加。全球前幾年網(wǎng)絡(luò)搜索引擎僅僅包括幾千萬(wàn)頁(yè)的網(wǎng)頁(yè)量,但現(xiàn)在它已經(jīng)達(dá)到了驚人的數(shù)十億頁(yè)。數(shù)量的迅速增加帶來(lái)了搜索服務(wù)的效率嚴(yán)重下降,查詢的結(jié)果集也是大規(guī)模的,常常數(shù)以十萬(wàn)筆的數(shù)據(jù),這些結(jié)果集里有大量冗余和無(wú)用信息,很難找到符合用戶自身需求的信息。因此,需要改進(jìn)現(xiàn)有的一般搜索引擎技術(shù),垂直搜索引擎便在此時(shí)應(yīng)運(yùn)而生。
垂直搜索引擎是專門給某一特定領(lǐng)域、某一特定人群或某一特定需求提供的有一定價(jià)值的信息和有關(guān)服務(wù)?!皩!⒕?、深”是其顯著的特點(diǎn),且行業(yè)色彩鮮明[1]。它不同于一般的通用搜索引擎,無(wú)論是用于專業(yè)知識(shí)的查詢,或是解決日常生活中的資訊,它的專業(yè)性是很清楚的,此時(shí),通用搜索引擎不能實(shí)現(xiàn)快速且準(zhǔn)確的檢索,尤其是對(duì)專業(yè)知識(shí)或?qū)W科的某些區(qū)域,這些弊端比比皆是。因此,人們傾向于使用個(gè)性化、專業(yè)化的垂直搜索來(lái)找到您所需要的信息。
主題爬蟲(chóng)是垂直搜索引擎服務(wù)的關(guān)鍵技術(shù)和核心部分,它的優(yōu)劣直接影響用戶對(duì)所得信息的滿意度,它將網(wǎng)頁(yè)采集到本地服務(wù)器后,對(duì)該網(wǎng)頁(yè)的主題相關(guān)度值進(jìn)行計(jì)算,較低的將不被進(jìn)一步處理而被丟棄[2]。優(yōu)先搜集主題相關(guān)度高的網(wǎng)頁(yè)是垂直搜索引擎一個(gè)顯著的特點(diǎn),在盡少耗費(fèi)網(wǎng)絡(luò)流量的情況下,盡可能地多發(fā)現(xiàn)、采集主題相關(guān)度高的網(wǎng)頁(yè)。
1.1 Heritrix簡(jiǎn)介
Heritrix是一個(gè)完全開(kāi)源的、由Java開(kāi)發(fā)的優(yōu)秀的可擴(kuò)展的Web網(wǎng)絡(luò)爬蟲(chóng)項(xiàng)目,它采用了模塊化的設(shè)計(jì),主要由一些核心類和插件模塊組成。開(kāi)發(fā)者可以利用Heritrix優(yōu)良的可擴(kuò)展性對(duì)它的插件模塊進(jìn)行擴(kuò)展,來(lái)實(shí)現(xiàn)自己預(yù)期的抓取邏輯[3]。
1.2 Heritrix系統(tǒng)結(jié)構(gòu)
Heritrix的系統(tǒng)框架如圖1所示。
圖1 Heritrix的系統(tǒng)框架
其主要模塊及功能如下:
1)CrawlOrde:抓取任務(wù)的配置,它是抓取任務(wù)的起點(diǎn),默認(rèn)情況下通過(guò)配置order.xml文件對(duì)起始Urls、線程數(shù)等信息進(jìn)行配置。
2)CrawlController:抓取的核心程序,控制著每次抓取工作的開(kāi)始和結(jié)束。
3)Frontier:鏈接制造工廠,也可以把它當(dāng)作一個(gè)調(diào)度器,首先提供了特定算法去處理網(wǎng)頁(yè)中的URL地址,然后把處理后的地址送給處理線程,進(jìn)行后續(xù)操作。
4)ToeThreads:這組線程才是實(shí)際的工作線程,每個(gè)線程處理一個(gè)URL,它們實(shí)現(xiàn)URL的爬行操作和一系列的后續(xù)操作,具體流程如圖2所示。
2.1 為Heritrix定制自己的QueueAssignmentPolicy
Heritrix采用Berkeley DB建立鏈接隊(duì)列。這些隊(duì)列放置在BdbMultipleWorkQueues中時(shí),總是先賦予一個(gè)Key,然后再把那些鏈接鍵值相同的放在一起,成為一個(gè)Queue(隊(duì)列)[4]。在Heritrix中,是它的queue-assignment-policy為每個(gè)隊(duì)列賦上Key值。Heritrix默認(rèn)使用的queue-assignment-policy是HostnameQueueAssignmentPolicy,它繼承QueueAssignmentPolicy抽象類,主要負(fù)責(zé)隊(duì)列的分配策略。正像其名稱所暗示的那樣,它與Host名值來(lái)解決這個(gè)問(wèn)題。換言之,也就是所有的相同的URL的Host名會(huì)被放置在同一隊(duì)列的中間。
圖2 heritrix處理一個(gè)url的流程
HostnameQueueAssignmentPolicy存在這樣一個(gè)缺陷,對(duì)某個(gè)具體站點(diǎn)的網(wǎng)頁(yè)抓取時(shí),某一個(gè)隊(duì)列的長(zhǎng)度會(huì)出現(xiàn)極度長(zhǎng)的現(xiàn)象,有的則是在排隊(duì)等待中幾乎是閑置的,這樣就造成多線程抓取的效率極其低下。文中實(shí)驗(yàn)抓取對(duì)象為新方向體育用品購(gòu)物網(wǎng)站,通過(guò)自定義QueueAssignmentPolicy來(lái)解決這個(gè)缺陷,這樣也就改變了Key值的生成方式,從而所有的URL能夠比較平均地散列到不同的隊(duì)列中,從而改善了抓取效率。
在Heritrix中擴(kuò)展queue-assignment-policy,通過(guò)繼承包org.archive.crawler.frontier下的QueueAssignmentPolicy類,重寫(xiě)其getClassKey()方法。此方法先處理一個(gè)連接對(duì)象,再使用散列算法生成一個(gè)Key值,最后把相同Key值的鏈接放置在同一個(gè)隊(duì)列[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,即對(duì)應(yīng)的線程數(shù)
return result;
}
}
還得通過(guò)配置APHashQueueAssignmentPolicy類才能正常工作,才能用來(lái)生成Key值。配置成功后,使用Heritrix抓取網(wǎng)頁(yè)的時(shí)候,Heritrix就變成默認(rèn)使用APHashQueueAssignmentPolicy來(lái)分配鏈接隊(duì)列了。
2.2 擴(kuò)展FrontierScheduler
Heritrix默認(rèn)使用FrontierScheduler來(lái)抓取網(wǎng)頁(yè),它不能實(shí)現(xiàn)對(duì)特定網(wǎng)頁(yè)內(nèi)容進(jìn)行抓取[6-7],因此,需要對(duì)FrontierScheduler進(jìn)行擴(kuò)展,才能使抓取策略控制在新方向體育網(wǎng)站下的體育用品。在MyHeritrix項(xiàng)目的包org.archive.crawler.postprocessor下新建類FrontierSchedulerForXfxty,它繼承FrontierScheduler類,重寫(xiě)父類的schedule()方法,只有符合特定的URL才會(huì)加入到等待隊(duì)列中。關(guān)鍵實(shí)現(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);
}
}
本次實(shí)驗(yàn)開(kāi)發(fā)環(huán)境使用MyEclipse 8.6開(kāi)發(fā)工具,JDK 1.6和Heritrix 1.14.4平臺(tái)進(jìn)行開(kāi)發(fā);機(jī)器配置為:Win7系統(tǒng),內(nèi)存4 G,酷睿2.5 GHz,500 G硬盤(pán),10/100 M以太網(wǎng)。
擴(kuò)展后的Heritrix運(yùn)行中的截圖如圖3所示。
圖3 擴(kuò)展后的Heritrix運(yùn)行狀態(tài)
圖中顯示的50個(gè)線程只有12個(gè)處在工作狀態(tài),這是由于只設(shè)置了一個(gè)種子地址,這也說(shuō)明了加入APHash散列算法后,Heritrix可以更好地支持多線程,從而很大程度上提高了抓取效率。
抓取的部分體育用品頁(yè)面截圖如圖4所示。
圖4 抓取的部分體育用品頁(yè)面
這些頁(yè)面是使用php寫(xiě)的,頁(yè)面中包含了具體體育用品的詳細(xì)信息。
對(duì)于垂直搜索引擎,主題爬蟲(chóng)采集信息的效
率起著決定性的作用。垂直搜索引擎中只有加入設(shè)計(jì)優(yōu)良的主題爬蟲(chóng),才能提高查全率和準(zhǔn)確率,才能給用戶帶來(lái)更優(yōu)質(zhì)的服務(wù)。開(kāi)發(fā)者可以利用Heritrix其優(yōu)良的可擴(kuò)展性來(lái)擴(kuò)展它的相應(yīng)組件,實(shí)現(xiàn)自己期望的爬行策略[8]。
通過(guò)加入APHash散列算法擴(kuò)展Heritrix中默認(rèn)的QueueAssignmentPolicy策略,實(shí)現(xiàn)了在同一主機(jī)域名站點(diǎn)下的多線程抓取網(wǎng)頁(yè)信息,極大地提高了采集信息的效率。
[1] 邵溫.垂直搜索引擎技術(shù)的研究和應(yīng)用[D].北京:北京工業(yè)大學(xué),2009.
[2] 陳叢叢.主題爬蟲(chóng)搜索策略研究[D].濟(jì)南:山東大學(xué),2009.
[3] 東興.垂直搜索引擎關(guān)鍵技術(shù)研究[D].杭州:浙江理工大學(xué),2012.
[4] 朱敏,羅省賢.基于Heritrix的面向特定主題的聚焦爬蟲(chóng)研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012(2):65-68.
[5] 劉育蓮.手機(jī)產(chǎn)品垂直搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2012.
[6] 劉高軍,夏景隆.基于Heritrix的網(wǎng)絡(luò)爬蟲(chóng)研究與應(yīng)用[J].軟件導(dǎo)刊,2013(5):123-125.
[7] 白萬(wàn)民,蘇希樂(lè).Heritrix在垂直搜索引擎中的應(yīng)用[J].計(jì)算機(jī)時(shí)代,2011(9):7-9.
[8] 孔祥春,李義杰,鄭凱明.垂直搜索引擎應(yīng)用研究[J].計(jì)算機(jī)系統(tǒng)應(yī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-),男,漢族,河南平頂山人,長(zhǎng)春工業(yè)大學(xué)碩士研究生,主要從事信息檢索及搜索引擎方向研究,E-mail:fengyuzhe320@163.com. *通訊作者:鄭山紅(1970-),女,朝鮮族,吉林長(zhǎng)春人,長(zhǎng)春工業(yè)大學(xué)副教授,博士,主要從事智能系統(tǒng)與語(yǔ)義網(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