小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

網(wǎng)絡(luò)爬蟲系統(tǒng)Heritrix的結(jié)構(gòu)分析 (個(gè)人讀書報(bào)告)

 復(fù)雜網(wǎng)絡(luò)621 2014-08-09

 

 

摘要

       隨著網(wǎng)絡(luò)時(shí)代的日新月異,人們對(duì)搜索引擎,網(wǎng)頁的內(nèi)容,大數(shù)據(jù)處理等問題有了更多的要求。如何從海量的互聯(lián)網(wǎng)信息中選取最符合要求的信息成為了新的熱點(diǎn)。在這種情況下,網(wǎng)絡(luò)爬蟲框架heritrix出現(xiàn)解決了這個(gè)問題。

       Heritrix是一個(gè)開源的、java開發(fā)的、可擴(kuò)展的web爬蟲項(xiàng)目。用戶可以使用它來從網(wǎng)上抓取想要的資源。其最出色之處在于它良好的可擴(kuò)展性,方便用戶實(shí)現(xiàn)自己的抓取邏輯。

       本文首先介紹網(wǎng)絡(luò)爬蟲程序的概念和作用,分析了heritrix的工作流程,模塊劃分,然后對(duì)源碼進(jìn)行多層次詳細(xì)的分析,最后通過heritrix進(jìn)行面向特定主題的網(wǎng)頁抓取試驗(yàn)并進(jìn)行結(jié)果分析。

 

關(guān)鍵詞:網(wǎng)絡(luò)爬蟲;網(wǎng)頁搜集;heritrix;源碼分析

 

Abstract

       With 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)頁數(shù)量的急劇增長(zhǎng),面對(duì)如此龐大的網(wǎng)絡(luò)資源,快速準(zhǔn)確找到自己需要的信息變得越來越重要,而通用的搜索引擎已經(jīng)不能滿足不同用戶對(duì)不同信息的需求。例如如今電子商務(wù)領(lǐng)域,如何快速、準(zhǔn)確搜索用戶所需求的信息,成為一個(gè)關(guān)鍵因素。搜索引擎是從各種網(wǎng)絡(luò)資源中根據(jù)關(guān)鍵字搜索出特定的資源的一種工具,而網(wǎng)絡(luò)爬蟲技術(shù)是搜索引擎中的關(guān)鍵技術(shù)。目前的搜索引擎室面向互聯(lián)網(wǎng)中所有信息的,但是人們往往需要更精確更具體的搜索引擎,在這種情況下,Heritrix項(xiàng)目應(yīng)運(yùn)而生。Heritrix是一個(gè)純由Java開發(fā)的、開源的Web網(wǎng)絡(luò)爬蟲,用戶可以使用它從網(wǎng)絡(luò)上抓取想要的資源。Heritrix最出色的的特性是開發(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ò)爬蟲Heritrix系統(tǒng)介紹

2.1Heritrix系統(tǒng)簡(jiǎn)介

       網(wǎng)絡(luò)爬蟲是一種按照一定的規(guī)則,自動(dòng)抓取互聯(lián)網(wǎng)信息的程序或腳本。從一個(gè)或若干初始網(wǎng)頁的URL開始,利用HTTP等標(biāo)準(zhǔn)協(xié)議讀取文檔,將文檔中所包括的URL放入U(xiǎn)RL隊(duì)列中,然后從隊(duì)列中新的URL處開始進(jìn)行漫游,把爬過的網(wǎng)頁搜集起來,直到?jīng)]有滿足條件的新的URL為止。

       網(wǎng)絡(luò)爬蟲工具Heritrix是由面向?qū)ο蟮某绦蛟O(shè)計(jì)語言java開發(fā)的,開源的網(wǎng)絡(luò)爬蟲工具包,它的程序執(zhí)行速度之快是傳統(tǒng)搜索引擎無法企及的。作為一個(gè)專為互聯(lián)網(wǎng)網(wǎng)頁進(jìn)行存檔而開發(fā)的網(wǎng)頁檢索器,開發(fā)者可利用其出色可擴(kuò)展性來實(shí)現(xiàn)自己的抓取邏輯。

2.2Heritrix系統(tǒng)結(jié)構(gòu)

       Heritrix是一個(gè)爬蟲框架,其組織結(jié)構(gòu)如圖2.1所示,包含了整個(gè)組件和抓取流程:

      

 

圖2.1 Heritrix系統(tǒng)架構(gòu)

       Heritrix采用的是模塊化的設(shè)計(jì),各個(gè)模塊由一個(gè)控制器類(CrawlController類)來協(xié)調(diào),控制器是整體的核心??刂破鹘Y(jié)構(gòu)圖如圖2.2所示:

 

圖2.2 CrawlController類結(jié)構(gòu)圖

       CrawlController類是整個(gè)爬蟲的總控制者,控制整個(gè)抓取工作的起點(diǎn),決定整個(gè)抓取任務(wù)的開始和結(jié)束。CrawlController從Frontier獲取URL,傳遞給線程池(ToePool)中的ToeThread處理。

Frontier(邊界控制器)主要確定下一個(gè)將被處理的URL,負(fù)責(zé)訪問的均衡處理,避免對(duì)某一Web服務(wù)器造成太大的壓力。Frontier保存著爬蟲的狀態(tài),包括已經(jīng)找到的URI、正在處理中的URI和已經(jīng)處理過的URI。

Heritrix是按多線程方式抓取的爬蟲,主線程把任務(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)頁,進(jìn)行DNS轉(zhuǎn)換,填寫請(qǐng)求和響應(yīng)表單。

(3)抽取鏈:當(dāng)提取完成時(shí),抽取感興趣的HTML和JavaScript,通常那里有新的要抓取的URL。

(4)寫鏈:存儲(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核心包及類功能說明

  1. 包名:org.archive.crawler Heritrix 程序運(yùn)行的入口包

1)        CommandLineParser類

可通過CMD命令在命令行對(duì)Heritrix進(jìn)行操作,該類用于解析CMD命令。

2)        Heritrix類

Heritrix主類,通過該類啟動(dòng)Heritrix。

3)        SimpleHttpServer類

Web服務(wù)器,可以通過Web管理Heritrix。

4)        WebappLifecycle類

封裝Servlet,可以通過Web啟動(dòng)Heritrix,里邊裝載Heritrix對(duì)象。

  1. 包名:org.archive.crawler.admin  Heritrix的管理包,比如CrawlJob表示一個(gè)抓取任務(wù)job,CrawlJobHandler管理JOB,以及日志統(tǒng)計(jì)等

1)        CrawlJob類

Heritrix的核心類,代表著一個(gè)抓取任務(wù),order.xml大部分屬性圍繞其配置

2)        CrawlJobErrorHandler類

維護(hù)一個(gè)抓取任務(wù)(CrawlJob)的錯(cuò)誤日志,在UI中顯示JOB錯(cuò)誤

3)        CrawlJobHandler類

抓取任務(wù)管理器,Heritrix可以有多個(gè)抓取任務(wù),都由它進(jìn)行管理

4)        SeedRecord類

記錄種子的處理記錄,如種子重定向到哪個(gè)URL,在seed.txt里有說明。

5)        StaticsticsTracker類

Heritrix核心類,統(tǒng)計(jì)追蹤器,貫穿整個(gè)Heritrix的運(yùn)行,如統(tǒng)計(jì)抓取了多少URL。

  1. 包名:org.archive.crawler.admin.ui 服務(wù)于UI管理界面

1)        CookieUtils類

Cookie工具類,主要用于訪問Cookie。

2)        JobConfigureUtils類

CrawlJob配置管理工具類,通過WebUI配置CrawlJob時(shí)會(huì)使用該類

  1. 包名:org.archive.crawler,datamodel Heritrix的數(shù)據(jù)模型包,如在Heritrix中代表一個(gè)URL的CandidateURI

1)        CandidateURI類

核心類,代表一個(gè)URL,貫穿整個(gè)抓取工程,還沒有通過調(diào)度器(Frontier)

2)        CheckPoint類

Heritrix會(huì)定期備份數(shù)據(jù),如日志、正在獲取的URL等,當(dāng)異常中斷時(shí)課利用它來恢復(fù)。

3)        CrawlHost類

核心類,代表一個(gè)Host,里邊主要包含域名、IP。

4)        CrawlOrder類

核心類,基本上對(duì)應(yīng)著配置文件order.xml的各個(gè)屬性值。

5)        CrawlServer類

核心類,對(duì)應(yīng)一個(gè)Host,里邊裝載著一個(gè)Host的各種Heritrix數(shù)據(jù)。

  1. 包名:org.archive,crawler.deciderules Heritrix的規(guī)則包,如決定哪些URL可以抓取可以調(diào)度。

1)        DecideRule類

URL規(guī)則的父類,審核一個(gè)URL是否接受、拒絕或放棄。

2)        DecidingScope類

驗(yàn)證一個(gè)URL是否在范圍內(nèi)來決定是否接受、拒絕或放棄。

  1. 包名:org.archive.crawler.event 事件管理,如Heritrix的暫停、重啟、停止等

1)        CrawlStatusListner類

爬蟲監(jiān)聽器,監(jiān)聽爬蟲是否在運(yùn)行,是否暫停等。

2)        CrawlURIDispositionListener類

URL監(jiān)聽器,監(jiān)聽URL是否失敗,是否要重新抓取等。

  1. 包名:org.archive.crawler.extractor Heritrix的造血器,通過它抽取新的URL再次進(jìn)行抓取

1)        Extractor類

所有抽取類的父類,用于從一個(gè)URL中抽取新的URL。

2)        ExtractorCSS類、ExtractorHTML類、ExtractorPDF類、ExtractorXML類等

從相應(yīng)的格式總抽取新的URL。

  1. 包名:org.archive.crawler.framework Heritrix的框架包,存放一些核心類,一般是父類,如Heritrix控制類CrawlController;調(diào)度器類Frontier。

1)        CrawlController類

核心類??刂破?,控制整個(gè)爬蟲的啟動(dòng),暫停、停止等。

2)        Filter類

過濾器,決定哪些URL可以抓取哪些不抓,父類,具體由子類實(shí)現(xiàn)

3)        Frontier類

調(diào)度器,對(duì)進(jìn)來的URL進(jìn)行調(diào)度。

4)        Processor類

處理器,一個(gè)URL由不同的處理器合作完成。該類作為父類。

5)        ToePool類

線程池,用于管理爬蟲線程。

6)        WritePoolProcessor類

寫處理器管理池,用于管理多個(gè)寫處理器,可以在分布式中使用。

  1. 包名:org.archive.crawler.frontie Heritrix的調(diào)度器,決定抓取哪個(gè)URL

1)        AbstractFrontier類

調(diào)度器基本實(shí)現(xiàn)類,非常復(fù)雜的實(shí)現(xiàn)。

2)        BdbWorkQueue類

抓取隊(duì)列由BDB存儲(chǔ)管理,相同classkey的URL為一個(gè)隊(duì)列.classkey由用戶配置決定,Heritrix默認(rèn)是相同host的URL就為一個(gè)隊(duì)列。

3)        RecoveryJournal類

管理著/logs/recover,該文件記錄所有的URL抓取情況,如抓取成功、失敗都有不同的對(duì)應(yīng)格式。該文件主要用于下次Heritrix恢復(fù),如Heritrix異常中斷重新啟動(dòng)Heritrix的話又會(huì)重新抓取,而如果基于該文件啟動(dòng)的話則會(huì)避免這個(gè)問題,同時(shí)對(duì)于上次異常中斷而來不及抓取的URL都會(huì)優(yōu)先抓取。

4)        WorkQueueFrontier類

隊(duì)列調(diào)度器,管理所有的隊(duì)列,里面用不同類型管理不同隊(duì)列。

3.2配置文件分析

       Heritrix系統(tǒng)的一個(gè)核心是order.xml配置文件,它里邊的每一個(gè)配置都關(guān)系到整個(gè)系統(tǒng)的運(yùn)行情況,例如可以控制抓取的速度,可以優(yōu)化電腦行呢,可以在某一次的抓取上繼續(xù)抓取。整個(gè)文件格式為標(biāo)簽語言xml,現(xiàn)將挑選核心的標(biāo)簽進(jìn)行說明。

  1. <meta></meta>  代表著該抓取JOB的基本元素,包括的屬性有:Job的名稱name,抓取Job的描述description,抓取工作的操作者operator,抓取任務(wù)的時(shí)間date等元素。
  2.  <controller></controller> 里包括與抓取有關(guān)的所有參數(shù),由于內(nèi)容較多,并且Heritrix也已將他們分成不同模塊。自己包括的基本屬性有很多與path有關(guān)的字符串,用來保存與抓取工作相關(guān)的文件目錄的各種路徑。例如<string name="logs-path">logs</string>記錄了日志的存放路徑。
  3. <newObject name="scope" class="org.archive.crawler ">抓取范圍,構(gòu)建CrawlScope。通過多個(gè)參數(shù)來控制抓取過程中種子文件的處理和URL的放置。
  4. <map name="http-headers">HTTP協(xié)議,當(dāng)處理爬蟲HTTP協(xié)議時(shí)需要構(gòu)造。利用string類型的“user-agent”字段來確保用戶代理的可用性。該字段必須包含瀏覽器信息、有效的URL,如此爬蟲來可以訪問網(wǎng)站。
  5. <newObject name="frontier" class="org.archive.crawler.frontier.BdbFrontier">Frontier調(diào)度器。利用多個(gè)參數(shù)控制URL抓取的頻率,時(shí)間,重試次數(shù),URL的優(yōu)先級(jí)等??梢酝ㄟ^修改本調(diào)度器的內(nèi)容來實(shí)現(xiàn)抓取過程的優(yōu)化。改進(jìn)爬蟲程序。
  6. <map name="fetch-processors"> 獲取組件,通過本組件來獲取整個(gè)網(wǎng)頁的HTTP協(xié)議、DNS協(xié)議、IP地址、端口等信息,將抓取頁面的內(nèi)容按照相應(yīng)的格式一一獲取。
  7. <map name="write-processors"> 寫組件,用來記錄將抓取的內(nèi)容寫入本地存儲(chǔ)中的各項(xiàng)選項(xiàng),如寫入的方式,存儲(chǔ)的位置等。

 

四、小結(jié)

目前搜索引擎技術(shù)越來越受到關(guān)注,而網(wǎng)絡(luò)爬蟲作為其中至關(guān)重要的一環(huán)自然是需要更多地理解與深入地分析。Heritrix作為開源的擴(kuò)展性優(yōu)良的網(wǎng)絡(luò)爬蟲程序,有著很高的研究,使用價(jià)值。

本文通過對(duì)Heritrix系統(tǒng)的整體架構(gòu)分析開始,理清整個(gè)系統(tǒng)的各個(gè)模塊劃分及各個(gè)模塊的作用。整體抓取的流程為:在CrawlController的控制下,一次把URL一個(gè)一個(gè)抓取出來,利用調(diào)度器Frontier實(shí)現(xiàn)URL鏈的處理,再利用FetchProcessor獲取網(wǎng)頁中的URL信息,然后把網(wǎng)頁內(nèi)容寫入本地磁盤,再按規(guī)則抓取下一個(gè)URL。分析了流程,對(duì)源碼在本地測(cè)試,分析源碼的核心實(shí)現(xiàn),了解了重要的包和類的作用,并且分析了整體配置文件order.xml的核心內(nèi)容。對(duì)以后利用Heritrix抓取URL工作做好了準(zhǔn)備,可以在此基礎(chǔ)上實(shí)現(xiàn)自己的抓取規(guī)則來設(shè)計(jì)新的爬蟲程序。

 

 

參考文獻(xiàn)

[1] Kristinn Siguresson. Incremental crawling with Heritrix. National and University Library of Iceland[M].2008

[2] 白萬民,蘇希樂.Heritrix在垂直搜索引擎中的應(yīng)用[J].計(jì)算機(jī)時(shí)代,2011(9)

[3] 朱 敏,羅省賢.基于 Heritrix 的面向特定主題的聚焦爬蟲研究[J]. 計(jì)算機(jī)技術(shù)與發(fā)展,2012 (2)

[4] 劉顯一. 基于Lucene和Heritrix的主題搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)[M].北京郵電大學(xué).2012.8

[5] 張敏. 基于Heritrix 限定爬蟲的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件.2013.4(4)

[6] 楊 頌,歐陽柳波.基于 Heritrix 的面向電子商務(wù)網(wǎng)站增量爬蟲研究[J]. 軟件導(dǎo)刊,2010,9( 7) : 38-39.

[7] 楊定中,趙 剛,王 泰.網(wǎng)絡(luò)爬蟲在 Web 信息搜索與數(shù)據(jù)挖掘中的應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30( 24)

[8] 邱 哲,符滔滔. Lucene 2.0+Heritrix 開發(fā)自己的搜索引擎[M].北京: 人民郵電出版社,2007

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多