摘要隨著網(wǎng)絡(luò)時(shí)代的日新月異,人們對(duì)搜索引擎,網(wǎng)頁(yè)的內(nèi)容,大數(shù)據(jù)處理等問(wèn)題有了更多的要求。如何從海量的互聯(lián)網(wǎng)信息中選取最符合要求的信息成為了新的熱點(diǎn)。在這種情況下,網(wǎng)絡(luò)爬蟲(chóng)框架heritrix出現(xiàn)解決了這個(gè)問(wèn)題。 Heritrix是一個(gè)開(kāi)源的、java開(kāi)發(fā)的、可擴(kuò)展的web爬蟲(chóng)項(xiàng)目。用戶可以使用它來(lái)從網(wǎng)上抓取想要的資源。其最出色之處在于它良好的可擴(kuò)展性,方便用戶實(shí)現(xiàn)自己的抓取邏輯。 本文首先介紹網(wǎng)絡(luò)爬蟲(chóng)程序的概念和作用,分析了heritrix的工作流程,模塊劃分,然后對(duì)源碼進(jìn)行多層次詳細(xì)的分析,最后通過(guò)heritrix進(jìn)行面向特定主題的網(wǎng)頁(yè)抓取試驗(yàn)并進(jìn)行結(jié)果分析。
關(guān)鍵詞:網(wǎng)絡(luò)爬蟲(chóng);網(wǎng)頁(yè)搜集;heritrix;源碼分析
AbstractWith the development of network, user’s requirement for search engines, webpage content, large data processing problems increases all the time. How to select most valuable information from massive Internet information has become a new hotspot. In this case, a new web crawler frame-heritrix solved this problem. The heritrix web crawler is a java-developed, open-source, extensible project. Users can use it fetch resources from Internet. Its most outstanding feature lies in its good scalability, makes users can fetch information in their own logic. This paper firstly introduces the concept and function of network crawler, analyzes the work process, module division of heritrix. Then analyzes the source in detail, at last, uses heritrix to fetch the specific web pages and analyzes the result.
Key words: heritrix; web crawler; source code analysis; web page search. 一、引言隨著互聯(lián)網(wǎng)中網(wǎng)頁(yè)數(shù)量的急劇增長(zhǎng),面對(duì)如此龐大的網(wǎng)絡(luò)資源,快速準(zhǔn)確找到自己需要的信息變得越來(lái)越重要,而通用的搜索引擎已經(jīng)不能滿足不同用戶對(duì)不同信息的需求。例如如今電子商務(wù)領(lǐng)域,如何快速、準(zhǔn)確搜索用戶所需求的信息,成為一個(gè)關(guān)鍵因素。搜索引擎是從各種網(wǎng)絡(luò)資源中根據(jù)關(guān)鍵字搜索出特定的資源的一種工具,而網(wǎng)絡(luò)爬蟲(chóng)技術(shù)是搜索引擎中的關(guān)鍵技術(shù)。目前的搜索引擎室面向互聯(lián)網(wǎng)中所有信息的,但是人們往往需要更精確更具體的搜索引擎,在這種情況下,Heritrix項(xiàng)目應(yīng)運(yùn)而生。Heritrix是一個(gè)純由Java開(kāi)發(fā)的、開(kāi)源的Web網(wǎng)絡(luò)爬蟲(chóng),用戶可以使用它從網(wǎng)絡(luò)上抓取想要的資源。Heritrix最出色的的特性是開(kāi)發(fā)者可以在現(xiàn)有的框架基礎(chǔ)上對(duì)各個(gè)組件進(jìn)行擴(kuò)展,實(shí)現(xiàn)自己所需要的抓取邏輯。 本文將從介紹Heritrix系統(tǒng)的框架和工作流程入手,繼而深入分析核心的源碼,然后在本地對(duì)該系統(tǒng)進(jìn)行測(cè)試,實(shí)現(xiàn)自己定義的搜索邏輯,最后對(duì)整個(gè)結(jié)果進(jìn)行測(cè)試分析。 二、網(wǎng)絡(luò)爬蟲(chóng)Heritrix系統(tǒng)介紹2.1Heritrix系統(tǒng)簡(jiǎn)介網(wǎng)絡(luò)爬蟲(chóng)是一種按照一定的規(guī)則,自動(dòng)抓取互聯(lián)網(wǎng)信息的程序或腳本。從一個(gè)或若干初始網(wǎng)頁(yè)的URL開(kāi)始,利用HTTP等標(biāo)準(zhǔn)協(xié)議讀取文檔,將文檔中所包括的URL放入U(xiǎn)RL隊(duì)列中,然后從隊(duì)列中新的URL處開(kāi)始進(jìn)行漫游,把爬過(guò)的網(wǎng)頁(yè)搜集起來(lái),直到?jīng)]有滿足條件的新的URL為止。 網(wǎng)絡(luò)爬蟲(chóng)工具Heritrix是由面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言java開(kāi)發(fā)的,開(kāi)源的網(wǎng)絡(luò)爬蟲(chóng)工具包,它的程序執(zhí)行速度之快是傳統(tǒng)搜索引擎無(wú)法企及的。作為一個(gè)專(zhuān)為互聯(lián)網(wǎng)網(wǎng)頁(yè)進(jìn)行存檔而開(kāi)發(fā)的網(wǎng)頁(yè)檢索器,開(kāi)發(fā)者可利用其出色可擴(kuò)展性來(lái)實(shí)現(xiàn)自己的抓取邏輯。 2.2Heritrix系統(tǒng)結(jié)構(gòu)Heritrix是一個(gè)爬蟲(chóng)框架,其組織結(jié)構(gòu)如圖2.1所示,包含了整個(gè)組件和抓取流程:
圖2.1 Heritrix系統(tǒng)架構(gòu) Heritrix采用的是模塊化的設(shè)計(jì),各個(gè)模塊由一個(gè)控制器類(lèi)(CrawlController類(lèi))來(lái)協(xié)調(diào),控制器是整體的核心。控制器結(jié)構(gòu)圖如圖2.2所示:
圖2.2 CrawlController類(lèi)結(jié)構(gòu)圖 CrawlController類(lèi)是整個(gè)爬蟲(chóng)的總控制者,控制整個(gè)抓取工作的起點(diǎn),決定整個(gè)抓取任務(wù)的開(kāi)始和結(jié)束。CrawlController從Frontier獲取URL,傳遞給線程池(ToePool)中的ToeThread處理。 Frontier(邊界控制器)主要確定下一個(gè)將被處理的URL,負(fù)責(zé)訪問(wèn)的均衡處理,避免對(duì)某一Web服務(wù)器造成太大的壓力。Frontier保存著爬蟲(chóng)的狀態(tài),包括已經(jīng)找到的URI、正在處理中的URI和已經(jīng)處理過(guò)的URI。 Heritrix是按多線程方式抓取的爬蟲(chóng),主線程把任務(wù)分配給Teo線程(處理線程),每個(gè)Teo線程每次處理一個(gè)URL。Teo線程對(duì)每個(gè)URL執(zhí)行一遍URL處理器鏈。URL處理器鏈包括如下5個(gè)處理步驟。整個(gè)流程都在圖2.1中。 (1)預(yù)取鏈:主要是做一些準(zhǔn)備工作,例如,對(duì)處理進(jìn)行延遲和重新處理,否決隨后的操作。 (2)提取鏈:主要是下載網(wǎng)頁(yè),進(jìn)行DNS轉(zhuǎn)換,填寫(xiě)請(qǐng)求和響應(yīng)表單。 (3)抽取鏈:當(dāng)提取完成時(shí),抽取感興趣的HTML和JavaScript,通常那里有新的要抓取的URL。 (4)寫(xiě)鏈:存儲(chǔ)抓取結(jié)果,可以在這一步直接做全文索引。Heritrix提供了用ARC格式保存下載結(jié)果的ARCWriterProcessor實(shí)現(xiàn)。 (5)提交鏈:做和此URL相關(guān)操作的最后處理。檢查哪些新提取出的URL在抓取范圍內(nèi),然后把這些URL提交給Frontier。另外還會(huì)更新DNS緩存信息。 服務(wù)器緩存(Server cache)存放服務(wù)器的持久信息,能夠被爬行部件隨時(shí)查到,包括被抓取的Web服務(wù)器信息,例如DNS查詢結(jié)果,也就是IP地址。 三、Heritrix核心源碼分析3.1核心包及類(lèi)功能說(shuō)明
1) CommandLineParser類(lèi) 可通過(guò)CMD命令在命令行對(duì)Heritrix進(jìn)行操作,該類(lèi)用于解析CMD命令。 2) Heritrix類(lèi) Heritrix主類(lèi),通過(guò)該類(lèi)啟動(dòng)Heritrix。 3) SimpleHttpServer類(lèi) Web服務(wù)器,可以通過(guò)Web管理Heritrix。 4) WebappLifecycle類(lèi) 封裝Servlet,可以通過(guò)Web啟動(dòng)Heritrix,里邊裝載Heritrix對(duì)象。
1) CrawlJob類(lèi) Heritrix的核心類(lèi),代表著一個(gè)抓取任務(wù),order.xml大部分屬性圍繞其配置 2) CrawlJobErrorHandler類(lèi) 維護(hù)一個(gè)抓取任務(wù)(CrawlJob)的錯(cuò)誤日志,在UI中顯示JOB錯(cuò)誤 3) CrawlJobHandler類(lèi) 抓取任務(wù)管理器,Heritrix可以有多個(gè)抓取任務(wù),都由它進(jìn)行管理 4) SeedRecord類(lèi) 記錄種子的處理記錄,如種子重定向到哪個(gè)URL,在seed.txt里有說(shuō)明。 5) StaticsticsTracker類(lèi) Heritrix核心類(lèi),統(tǒng)計(jì)追蹤器,貫穿整個(gè)Heritrix的運(yùn)行,如統(tǒng)計(jì)抓取了多少URL。
1) CookieUtils類(lèi) Cookie工具類(lèi),主要用于訪問(wèn)Cookie。 2) JobConfigureUtils類(lèi) CrawlJob配置管理工具類(lèi),通過(guò)WebUI配置CrawlJob時(shí)會(huì)使用該類(lèi)
1) CandidateURI類(lèi) 核心類(lèi),代表一個(gè)URL,貫穿整個(gè)抓取工程,還沒(méi)有通過(guò)調(diào)度器(Frontier) 2) CheckPoint類(lèi) Heritrix會(huì)定期備份數(shù)據(jù),如日志、正在獲取的URL等,當(dāng)異常中斷時(shí)課利用它來(lái)恢復(fù)。 3) CrawlHost類(lèi) 核心類(lèi),代表一個(gè)Host,里邊主要包含域名、IP。 4) CrawlOrder類(lèi) 核心類(lèi),基本上對(duì)應(yīng)著配置文件order.xml的各個(gè)屬性值。 5) CrawlServer類(lèi) 核心類(lèi),對(duì)應(yīng)一個(gè)Host,里邊裝載著一個(gè)Host的各種Heritrix數(shù)據(jù)。
1) DecideRule類(lèi) URL規(guī)則的父類(lèi),審核一個(gè)URL是否接受、拒絕或放棄。 2) DecidingScope類(lèi) 驗(yàn)證一個(gè)URL是否在范圍內(nèi)來(lái)決定是否接受、拒絕或放棄。
1) CrawlStatusListner類(lèi) 爬蟲(chóng)監(jiān)聽(tīng)器,監(jiān)聽(tīng)爬蟲(chóng)是否在運(yùn)行,是否暫停等。 2) CrawlURIDispositionListener類(lèi) URL監(jiān)聽(tīng)器,監(jiān)聽(tīng)URL是否失敗,是否要重新抓取等。
1) Extractor類(lèi) 所有抽取類(lèi)的父類(lèi),用于從一個(gè)URL中抽取新的URL。 2) ExtractorCSS類(lèi)、ExtractorHTML類(lèi)、ExtractorPDF類(lèi)、ExtractorXML類(lèi)等 從相應(yīng)的格式總抽取新的URL。
1) CrawlController類(lèi) 核心類(lèi)。控制器,控制整個(gè)爬蟲(chóng)的啟動(dòng),暫停、停止等。 2) Filter類(lèi) 過(guò)濾器,決定哪些URL可以抓取哪些不抓,父類(lèi),具體由子類(lèi)實(shí)現(xiàn) 3) Frontier類(lèi) 調(diào)度器,對(duì)進(jìn)來(lái)的URL進(jìn)行調(diào)度。 4) Processor類(lèi) 處理器,一個(gè)URL由不同的處理器合作完成。該類(lèi)作為父類(lèi)。 5) ToePool類(lèi) 線程池,用于管理爬蟲(chóng)線程。 6) WritePoolProcessor類(lèi) 寫(xiě)處理器管理池,用于管理多個(gè)寫(xiě)處理器,可以在分布式中使用。
1) AbstractFrontier類(lèi) 調(diào)度器基本實(shí)現(xiàn)類(lèi),非常復(fù)雜的實(shí)現(xiàn)。 2) BdbWorkQueue類(lèi) 抓取隊(duì)列由BDB存儲(chǔ)管理,相同classkey的URL為一個(gè)隊(duì)列.classkey由用戶配置決定,Heritrix默認(rèn)是相同host的URL就為一個(gè)隊(duì)列。 3) RecoveryJournal類(lèi) 管理著/logs/recover,該文件記錄所有的URL抓取情況,如抓取成功、失敗都有不同的對(duì)應(yīng)格式。該文件主要用于下次Heritrix恢復(fù),如Heritrix異常中斷重新啟動(dòng)Heritrix的話又會(huì)重新抓取,而如果基于該文件啟動(dòng)的話則會(huì)避免這個(gè)問(wèn)題,同時(shí)對(duì)于上次異常中斷而來(lái)不及抓取的URL都會(huì)優(yōu)先抓取。 4) WorkQueueFrontier類(lèi) 隊(duì)列調(diào)度器,管理所有的隊(duì)列,里面用不同類(lèi)型管理不同隊(duì)列。 3.2配置文件分析Heritrix系統(tǒng)的一個(gè)核心是order.xml配置文件,它里邊的每一個(gè)配置都關(guān)系到整個(gè)系統(tǒng)的運(yùn)行情況,例如可以控制抓取的速度,可以優(yōu)化電腦行呢,可以在某一次的抓取上繼續(xù)抓取。整個(gè)文件格式為標(biāo)簽語(yǔ)言xml,現(xiàn)將挑選核心的標(biāo)簽進(jìn)行說(shuō)明。
四、小結(jié)目前搜索引擎技術(shù)越來(lái)越受到關(guān)注,而網(wǎng)絡(luò)爬蟲(chóng)作為其中至關(guān)重要的一環(huán)自然是需要更多地理解與深入地分析。Heritrix作為開(kāi)源的擴(kuò)展性優(yōu)良的網(wǎng)絡(luò)爬蟲(chóng)程序,有著很高的研究,使用價(jià)值。 本文通過(guò)對(duì)Heritrix系統(tǒng)的整體架構(gòu)分析開(kāi)始,理清整個(gè)系統(tǒng)的各個(gè)模塊劃分及各個(gè)模塊的作用。整體抓取的流程為:在CrawlController的控制下,一次把URL一個(gè)一個(gè)抓取出來(lái),利用調(diào)度器Frontier實(shí)現(xiàn)URL鏈的處理,再利用FetchProcessor獲取網(wǎng)頁(yè)中的URL信息,然后把網(wǎng)頁(yè)內(nèi)容寫(xiě)入本地磁盤(pán),再按規(guī)則抓取下一個(gè)URL。分析了流程,對(duì)源碼在本地測(cè)試,分析源碼的核心實(shí)現(xiàn),了解了重要的包和類(lèi)的作用,并且分析了整體配置文件order.xml的核心內(nèi)容。對(duì)以后利用Heritrix抓取URL工作做好了準(zhǔn)備,可以在此基礎(chǔ)上實(shí)現(xiàn)自己的抓取規(guī)則來(lái)設(shè)計(jì)新的爬蟲(chóng)程序。
參考文獻(xiàn)[1] Kristinn Siguresson. Incremental crawling with Heritrix. National and University Library of Iceland[M].2008 [2] 白萬(wàn)民,蘇希樂(lè).Heritrix在垂直搜索引擎中的應(yīng)用[J].計(jì)算機(jī)時(shí)代,2011(9) [3] 朱 敏,羅省賢.基于 Heritrix 的面向特定主題的聚焦爬蟲(chóng)研究[J]. 計(jì)算機(jī)技術(shù)與發(fā)展,2012 (2) [4] 劉顯一. 基于Lucene和Heritrix的主題搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)[M].北京郵電大學(xué).2012.8 [5] 張敏. 基于Heritrix 限定爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件.2013.4(4) [6] 楊 頌,歐陽(yáng)柳波.基于 Heritrix 的面向電子商務(wù)網(wǎng)站增量爬蟲(chóng)研究[J]. 軟件導(dǎo)刊,2010,9( 7) : 38-39. [7] 楊定中,趙 剛,王 泰.網(wǎng)絡(luò)爬蟲(chóng)在 Web 信息搜索與數(shù)據(jù)挖掘中的應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30( 24) [8] 邱 哲,符滔滔. Lucene 2.0+Heritrix 開(kāi)發(fā)自己的搜索引擎[M].北京: 人民郵電出版社,2007
|
|