一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

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

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

 

 

摘要

       隨著網(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;源碼分析

 

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)頁(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. 包名:org.archive.crawler Heritrix 程序運(yùn)行的入口包

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

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. 包名:org.archive.crawler.admin.ui 服務(wù)于UI管理界面

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. 包名:org.archive.crawler,datamodel Heritrix的數(shù)據(jù)模型包,如在Heritrix中代表一個(gè)URL的CandidateURI

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. 包名:org.archive,crawler.deciderules Heritrix的規(guī)則包,如決定哪些URL可以抓取可以調(diào)度。

1)        DecideRule類(lèi)

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

2)        DecidingScope類(lèi)

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

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

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. 包名:org.archive.crawler.extractor Heritrix的造血器,通過(guò)它抽取新的URL再次進(jìn)行抓取

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. 包名:org.archive.crawler.framework Heritrix的框架包,存放一些核心類(lèi),一般是父類(lèi),如Heritrix控制類(lèi)CrawlController;調(diào)度器類(lèi)Frontier。

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. 包名:org.archive.crawler.frontie Heritrix的調(diào)度器,決定抓取哪個(gè)URL

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ō)明。

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

 

四、小結(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

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(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)論公約

    類(lèi)似文章 更多

    久久精品a毛片看国产成人| 日本少妇三级三级三级| 出差被公高潮久久中文字幕| 免费大片黄在线观看日本| 国产免费成人激情视频| 亚洲欧美日韩国产成人| 美日韩一区二区精品系列 | 欧美日不卡无在线一区| 国产一区二区在线免费| 一区二区三区四区亚洲另类| 亚洲一区二区三区福利视频| 欧美区一区二区在线观看| 成人精品欧美一级乱黄| 开心五月激情综合婷婷色| 国产不卡视频一区在线| 青草草在线视频免费视频| 五月激情综合在线视频| 日本理论片午夜在线观看| 亚洲视频一区自拍偷拍另类| 日韩精品在线观看一区| 高清欧美大片免费在线观看| 国产精品偷拍视频一区| 深夜福利亚洲高清性感| 91偷拍裸体一区二区三区| 开心五月激情综合婷婷色| 日韩精品中文字幕在线视频| 国产精品色热综合在线| 经典欧美熟女激情综合网| 久久热麻豆国产精品视频| 91超精品碰国产在线观看| 亚洲第一区欧美日韩在线| 大香蕉久久精品一区二区字幕| 久久午夜福利精品日韩| 中文字幕熟女人妻视频| 深夜视频在线观看免费你懂| 日韩欧美高清国内精品| 亚洲欧美日本国产有色| 青青操日老女人的穴穴 | 深夜福利欲求不满的人妻| 精品精品国产自在久久高清| 日韩欧美国产精品自拍|