日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

扩展和定制Heritrix2

發(fā)布時間:2024/1/1 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 扩展和定制Heritrix2 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章轉(zhuǎn)至 http://blog.csdn.net/fengbolaisearch/archive/2010/01/12/5178492.aspx

?

1.?? Heritrix 簡介

Heritrix是一個專門為互聯(lián)網(wǎng)上的網(wǎng)頁進(jìn)行存檔而開發(fā)的網(wǎng)頁檢索器。它使用Java編寫并且完全開源。它主要的用戶界面可以通過一個web流量器來訪問并通過它來控制檢索器的行為,另外,它還有一個命令行工具來供用戶選擇調(diào)用。

Heritrix是由互聯(lián)網(wǎng)檔案館和北歐國家圖書館聯(lián)合規(guī)范化編寫于2003年初。第一次正式發(fā)布是在2004年1月,并不斷的被互聯(lián)網(wǎng)檔案館和其他感興趣的第三方改進(jìn)著。到現(xiàn)在已經(jīng)成為一個成熟的開源爬蟲,并被廣泛使用。

Heritrix的操作模型:

?

?

?

從模型中可以看到,利用Heritrix我們可以輕松從互聯(lián)網(wǎng)上獲取信息并將它們?nèi)看鎯ο聛?#xff0c;然后可以任意的訪問獲取到的網(wǎng)頁信息并可以查看報告。

?

Heritrix的整體結(jié)構(gòu)簡圖如下:

?

它的工作流程是一個循環(huán),具體流程是:

  1 在預(yù)定的URI中選擇一個。

  2 從選擇的URI的網(wǎng)址下載遠(yuǎn)程文件

  3 分析,歸檔下載到的內(nèi)容

  4 從分析到的內(nèi)容里面選擇感興趣的URI。加入預(yù)定隊列。

  5 標(biāo)記已經(jīng)處理過的URI

?

在大概的了解了Heritrix及它的工作機(jī)制之后,我們就可以開始Heritrix的使用了。

?

2.?? Heritrix 的配置與使用

?1)??? 安裝與配置

從官方網(wǎng)站http://crawler.archive.org/下載最新版本的Heritrix運(yùn)行包,解壓到一個文件夾內(nèi)。其中,Heritrix所用到的工具類庫都存于lib下,另外,在Heritrix目錄下有一個conf目錄,其中包含了一個很重要的文件:heritrix.properties

在 heritrix.properties中配置了大量與Heritrix運(yùn)行息息相關(guān)的參數(shù),這些參數(shù)主要是配置了Heritrix運(yùn)行時的一些默認(rèn)工具類、WebUI的啟動參數(shù),以及Heritrix的日志格式等。當(dāng)?shù)谝淮芜\(yùn)行Heritrix時,只需要修改該文件,為其加入WebUI的登錄名和密碼。在"heritrix.cmdline.admin="后面增加賬戶和密碼,比如heritrix.cmdline.admin=admin:admin 。其中,用戶名和密碼是以一個冒號進(jìn)行分隔,使用者可以指定任何的字符串做為用戶名密碼。

新建一個文件Heritrix.cmd 作為啟動Heritrix的命令文件,在文件內(nèi)寫入:

(假設(shè)文件夾路徑為D:\heritrix)

?

運(yùn)行上述腳本,在瀏覽器輸入http://localhost:8080/,輸入之前設(shè)置的用戶名密碼,即可進(jìn)入Heritrix管理頁面。

?

2)??? 新建抓取任務(wù)

(1)?????? 單擊菜單欄上的“Jobs”標(biāo)簽,就可以進(jìn)入任務(wù)創(chuàng)建頁面。如下圖所示:

?

?

(2)?????? 在任務(wù)創(chuàng)建頁面中,有4種創(chuàng)建任務(wù)的方式,具體含義如下:

l Based on existing job:以一個已經(jīng)有的抓取任務(wù)為模板,創(chuàng)建所有抓取屬性和抓取起始URL的列表

l Based on a recovery:在以前的某個任務(wù)中,可能設(shè)置過一些狀態(tài)點(diǎn),新的任務(wù)將從這個設(shè)置的狀態(tài)點(diǎn)開始。

l Based on a profile:專門為不同的任務(wù)設(shè)置了一些模板,新建的任務(wù)將按照模板來生成。

l With defaults:這個最簡單,表示按默認(rèn)的配置來生成一個任務(wù)。

(3)?????? 單擊With defaults鏈接,創(chuàng)建一個新的抓取任務(wù)。

(4)?????? 在新建任務(wù)的名稱上,填入任務(wù)名稱。在Description中隨意填入字符,然后再在seeds框中,填入待抓取的起始網(wǎng)址。如下圖所示:

?面中,有4種創(chuàng)建任務(wù)的方式,具體含義如下:

l Based on existing job:以一個已經(jīng)有的抓取任務(wù)為模板,創(chuàng)建所有抓取屬性和抓取起始URL的列表

l Based on a recovery:在以前的某個任務(wù)中,可能設(shè)置過一些狀態(tài)點(diǎn),新的任務(wù)將從這個設(shè)置的狀態(tài)點(diǎn)開始。

l Based on a profile:專門為不同的任務(wù)設(shè)置了一些模板,新建的任務(wù)將按照模板來生成。

l With defaults:這個最簡單,表示按默認(rèn)的配置來生成一個任務(wù)。

(3)?????? 單擊With defaults鏈接,創(chuàng)建一個新的抓取任務(wù)。

(4)?????? 在新建任務(wù)的名稱上,填入任務(wù)名稱。在Description中隨意填入字符,然后再在seeds框中,填入待抓取的起始網(wǎng)址。如下圖所示:

?

(5)?????? 單擊“Modules”按鈕,就進(jìn)入了配置抓取時的處理鏈的頁面。

在倒數(shù)第三項 "Select Writers "內(nèi)刪除默認(rèn)的"org.archive.crawler.writer.ARCWriterProcess”,加 "org.archive.crawler.writer.MirrorWriterProcessor",這樣執(zhí)行任務(wù)的時候抓取到的頁面會以鏡像的方式放在本地的目錄結(jié)構(gòu)中,而不是生成ARC存檔文件。如下圖:

?

?

(6)?????? 單擊“Settings” 按鈕,進(jìn)入了屬性設(shè)置的頁面。

在屬性設(shè)置頁面上有非常多的輸入域,Heritrix在抓取網(wǎng)頁時,這些域是用來對的各個組件的值進(jìn)行預(yù)設(shè)。由于頁面上的內(nèi)容非常多,使用者可能無法全部了解它們的作用。所以Heritrix提供了一個輔助功能,來在最大程度上讓使用者了解每個參數(shù)的含義。在每個屬性的右側(cè)都有一個小問號,當(dāng)單擊問號時,就會彈出一個Javascript的Alert提示框,上面介紹了當(dāng)前屬性的作用。

當(dāng)在第一次使用Heritrix時,所需要設(shè)置的參數(shù)并不多,以默認(rèn)設(shè)置為主。但有一些參數(shù)是必須在第一次使用時就設(shè)置好的,就是HTTP-Header這個屬性域。

如下圖所示,紅色框內(nèi)是修改前后對照。其中“user-agent”中的“PROJECT_URL_HERE”對應(yīng)自己的完整URL地址,“from”中設(shè)置自己的合法email地址,這兩項設(shè)置其實(shí)可隨便設(shè)置,只要格式規(guī)則合法即可。圖中的@VERSION@設(shè)置為1.12.1,即1.12.1版本的。

?

(7)?????? 設(shè)置完成后,點(diǎn)擊“Submit job”,即完成全部任務(wù)的建立工作。 這時就可以在Console頁面中點(diǎn)擊start啟動任務(wù)。

?

抓取到的所有文件在” %Heritrix_HOME%/jobs/任務(wù)名-任務(wù)時間/mirror”這個路徑下,按照域名分開存放。

?

?

3.?? Heritrix 的擴(kuò)展開發(fā)

1)??? Heritrix 結(jié)構(gòu)分析

?

????????

從上圖可以看出,Heritrix總體上是一個平臺結(jié)構(gòu),內(nèi)部的組件都具有松耦合的特點(diǎn)。任何一個部分都可以進(jìn)行拆卸并替換,這就給我們進(jìn)行基于Heritrix的自定義開發(fā)提供了條件。

?

下面簡單介紹一下每個組件的作用:

1.????? CrawlController

CrawlController(中央控制器)是抓取任務(wù)的核心組件,它控制著整個抓取的流程。

?

2.????? CrawlOrder

CrawlOrder (抓取任務(wù))是整個抓取工作的起點(diǎn),它記錄了任務(wù)的所有屬性,即在創(chuàng)建任務(wù)時的一系列設(shè)置。

?


3.????? Frontier


Frontier (鏈接制造工廠)負(fù)責(zé)所有鏈接的處理。將已經(jīng)爬過的URI做標(biāo)記,并將未處理的鏈接放入待處理隊列。

?

4.????? ToeThread

ToeThread(處理線程)Heritrix是多線程的,每個 URL 被一個線程處理,這個線程就叫做 ToeThread,每個線程都會包括一條處理鏈,如下圖所示。

?

5.?????? Processor

Processor(處理器)代表著單個的處理器,所有的處理器都是它的子類。它包括以下幾種:PreProcessor(預(yù)處理器)、Fetcher(獲取器)、Extractor(抽取器)、Writer(存儲器)、PostProcessor(后處理器)。

??????????????????????????????????????????????????????????

?

?

?

?

2)??? Heritrix 的組件開發(fā)

在使用Heritrix的過程中,可能會需要一些特定功能,比如說只想抓取一個域名下的網(wǎng)頁等。這時就需要擴(kuò)展原有的Heritrix,自己寫一些組件來滿足這些要求。

(1)?? 擴(kuò)展FrontierScheduler

首先在Heritrix工程中創(chuàng)建類包my. processor. ,之后新建類MyFrontierScheduler。代碼如下:

?

?


???????? 之后打開Heritrix目錄下的module文件夾,里面是所有模塊的配置文件。打開Processor.options,在里面加入一行my. processor.MyFrontierScheduler|MyFrontierScheduler。然后保存退出,之后你就可以在新建任務(wù)的時候選擇使用自己擴(kuò)展的FrontierScheduler了。

(2)?? 擴(kuò)展MirrorWriterProcessor

有的時候我們需要在網(wǎng)頁下載之前將網(wǎng)頁進(jìn)行分析并提取有效內(nèi)容存儲起來,這時我們可以擴(kuò)展MirrorWriterProcessor這個模塊。利用一個開源的包htmlparser分析網(wǎng)頁結(jié)構(gòu),并將結(jié)果存儲起來。htmlparser可以在http://htmlparser.sourceforge.net 獲得。將下載的包添加到項目的引用列表中。

新建MyMirrorWriterProcessor,將之前MirrorWriterProcessor的代碼復(fù)制過來,改掉類名及構(gòu)造函數(shù)的名稱。添加新的引用:

?


新建一個方法AnalysisFile(),在writeToPath這個函數(shù)中調(diào)用它:

?

?

?之后就可以在AnalysisFile()中處理dest這個文件,將其進(jìn)行分析并保存為想要的格式。以下例子將其去掉Html標(biāo)簽之后封裝進(jìn)一個XML文件:

?

4.?? Heritrix 的常用技巧

1)??? 只保存html類型的文件

對于大多數(shù)的搜索引擎,我們所要做的只是對于純文本的搜索。因此只需要保存html類型的內(nèi)容。Heritrix的官方文檔”Heritrix User Manual”中給出了一個解決方案

???????? 在新建任務(wù)時點(diǎn)擊”submodules”,如下圖:

?

???? 添加一個新的規(guī)則,類型為NotMatchesFilePatternDecideRule,并將其放置在PrerequisiteAccept-

DecideRule之前,不然dns將不會被正確解析。之后在設(shè)置面板中如下設(shè)置:

?

這樣設(shè)置之后,爬蟲就會只抓取html類型的文件,而將其它類型的文件都忽略掉。

2)??? Queue-assignment-policy的設(shè)置。

當(dāng)我們設(shè)置了在特定的域名下爬行的時候,經(jīng)常會碰到永遠(yuǎn)只有一個線程在運(yùn)行的情況,導(dǎo)致爬行十分緩慢。這是因?yàn)樵谀J(rèn)的情況下,Heritrix使用HostnameQueueAssignmentPolicy來產(chǎn)生key值,從這個策略的名字,我們也可以很容易的看出,key跟hostname是有關(guān)系的。而事實(shí)上,這個策略正是用hostname作為key值的。因此一個域名下的所有鏈接都會放到同一個線程中去。

為解決這個問題,我們新建一個策略:

?

這樣用ELF hash算法把url盡量平均分部到各個隊列中去,采集的速度大大的加快了。

?

參考資料:

1.?? Gordon Mohretal : An introduction to Heritrix. Accessed Apr 2009.

http://crawler.archive.org/An%20Introduction%20to%20Heritrix.pdf

2.??? Wikipedia Heritrix Homepage. Accessed Apr 2009.??? http://en.wikipedia.org/wiki/Heritrix

3.??? John Erik Halse : Heritrix developer documentation. Accessed Apr 2009.

http://crawler.archive.org/articles/developer_manual.html

4.??? Kristinn Sigur?sso: Heritrix User Manual. Accessed Apr 2009.

http://crawler.archive.org/articles/user_manual/index.html

5.??? 邱哲 符滔滔:《開發(fā)自己的搜索引擎-Lucene 2.0+Heritrix》人民郵電出版社 ISBN:711516000?

?

本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/fengbolaisearch/archive/2010/01/12/5178492.aspx

總結(jié)

以上是生活随笔為你收集整理的扩展和定制Heritrix2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。