原帖地址:http://www.iteye.com/topic/84206
一、架構介紹 公司最近項目要用到全文檢索索引,檢索對象是一些網站的網頁內容,要使用到網路爬蟲工具。 目前技術選型對象主要有兩個:Heritrix 和 Nutch。二者均為Java開源架構,Heritrix 是 SourceForge上的開源產品,Nutch為Apache的一個子項目,它們都稱作網路爬蟲/蜘蛛( Web Crawler),它們實現的原理基本一致:深度遍曆網站的資源,將這些資源抓取到本地,使用的方法都是分析網站每一個有效URI,並提交Http請求,從而獲得相應結果,產生本地檔案及相應的日誌資訊等。 下面是二者的介紹,摘自網路:
Heritrix 是個 "archival crawler" -- 用來擷取完整的、精確的、網站內容的深度複製。包括擷取映像以及其他非常值內容。
抓取並儲存相關的內容。對內容來者不拒,不對頁面進行內容上的修改。重新爬行對相同的URL不針對先前的進行替換。爬蟲通過Web使用者介面啟動、監控、調整,允許彈性的定義要擷取的URL。
二者的差異:
- Nutch 只擷取並儲存可索引的內容。Heritrix則是照單全收。力求儲存頁面原貌
- Nutch 可以修剪內容,或者對內容格式進行轉換。
- Nutch 儲存內容為資料庫最佳化格式便於以後索引;重新整理替換舊的內容。而Heritrix 是添加(追加)新的內容。
- Nutch 從命令列運行、控制。Heritrix 有 Web 控制管理介面。
- Nutch 的定製能力不夠強,不過現在已經有了一定改進。Heritrix 可控制的參數更多。
二、關於Heritrix使用的初步總結
目前對
Heritrix做了初步選型測試,有了一些總結:
1.關於安裝:
目前的版本號碼為1.12.1,官網地址為
http://crawler.archive.org/。常規安裝,即解壓到相關目錄,之後配置系統內容變數"HERITRIX_HOME"到該解壓目錄(Java環境已經配置好)。
2.安裝的後續工作:
將 %HERITRIX_HOME%\heritrix-1.12.1.jar 解壓到臨時目錄,拷貝其中的profiles目錄到 %HERITRIX_HOME%\conf\目錄下,用來解決Heritrix 關於的Profile預設配置的一個Bug。
3.組態管理帳戶:
拷貝 %HERITRIX_HOME%\conf\jmxremote.password.template 到 %HERITRIX_HOME%\下,並且重新命名為"jmxremote.password"。之後編輯該檔案內容關於密碼的部分:monitorRole @PASSWORD@ monitorRole admin
controlRole @PASSWORD@ ==> controlRole admin 修改完畢之後,儲存該檔案。並且需要將該檔案的屬性改為“唯讀”。然後有很重要的一步:在該檔案jmxremote.password的屬性視窗中查看“安全”標籤,該標籤下的第一項“組或使用者名稱稱”下要確認該檔案的所有權應該只隸屬於你當前的系統使用者,而不應該是某一個使用者組(例如Administrators),這應該是Heritrix安全機制的一個Bug。否則運行Heritrix的時候會報許可權錯誤,需要你修改jmxremote.password檔案的屬性為“唯讀”,但是其實已經做了該項改動。
4.運行Heritrix:
CMD定位到 %HERITRIX_HOME%\bin,執行 "heritrix --admin=admin:admin" 命令,即可啟動 heritrix,有一點需要注意,heritrix預設使用8080連接埠,要保證系統連接埠沒有衝突。之後便可以訪問
http://127.0.0.1:8080 使用 heritrix 提供的WUI,即Web管理端。並且使用"admin/admin"登入。 該管理端提供了Heritrix預設提供的所有配置功能,並且可以建立一個Job並且執行該Job抓取網站。
5.一個簡單的Job: Heritrix提供的配置功能非常豐富,但是也很複雜,剛開始的時候很難正確的建立並且執行一個Job去抓取網站,自己閱讀了大部分的Heritrix使用者文檔和多次嘗試之後,總結了一個簡單的建立執行Job的用例,該用例為
抓取
www.baidu.com
下的網頁,但子域(如
news.baidu.com)不抓取,步驟如下,可供參考:
(1) WUI的上邊的導覽列選擇"Jobs",呈現的第一項是"Create New Job",選擇第四小項"With defaults"。輸入項的前兩項 Name和Description隨意,Seeds非常重要:http://www.baidu.com/ 注意最後一個反斜線必須。 (2) 選擇下邊的"Modules",進入Module配置頁(Heritrix的擴充功能都是通過模組概念實現的,可以實現自己的模組完成自己 想要的功能)。其中第一項 "
Select Crawl Scope" 使用預設的 "org.archive.crawler.deciderules.DecidingScope" 。倒數第三項 "
Select Writers " 刪除預設的 "org.archive.crawler.writer.ARCWriterProcessor" ,後添加 "org.archive.crawler.writer.MirrorWriterProcessor",這樣執行任務的時候抓取到的頁面會以鏡像的方式放在本地的 目錄結構中,而不是產生ARC封存檔案。 (3) 選擇"Modules"右邊的"Submodules",在第一項內容中 "
crawl-order ->
scope->
decide-rules->
rules" 刪除掉其 中的 "acceptIfTranscluded" (
org.archive.crawler.deciderules.TransclusionDecideRule) 的這一項抓取範圍的 規則。否則當Http請求返回301或者302時Heritrix會去抓取其他域下的網頁。 (4) 在WUI的第二行導覽列中選擇"Settings"進入Job的配置頁面,其中主要修改兩項:
http-headers
下的user-agent 和 from,他們的"PROJECT_URL_HERE" 和 "CONTACT_EMAIL_ADDRESS_HERE" 替換為自己的內容 ("PROJECT_URL_HERE" 要以 "http://" 開頭) (5) 在WUI的第二行導覽列中選擇最右邊的"Submit job" (6) 在WUI的第一行導覽列中選擇第一項的"Console",點擊"Start",抓取任務正式開始,時間長短有網路狀況和所抓取網站的 深度有關。
按照如上步驟應該可以正確的執行一次網站的抓取任務,抓取頁面會存放在你的工作目錄下的mirror檔案夾內。關於Job的建立和執行過程中的各種設定可以在使用者手冊中查到,都有詳細的說明。