1. 程式人生 > >開源爬蟲: Heritrix 1.14.4 安裝/使用

開源爬蟲: Heritrix 1.14.4 安裝/使用

Heritrix 是一個由 java 開發的、開源的網路爬蟲,使用者可以使用它來從網上抓取想要的資源。其最出色之處在於它良好的可擴充套件性,方便使用者實現自己的抓取邏輯。本文詳細介紹了 Heritrix 在 Eclipse 中的配置、執行。

目前 Heritrix 的最新版本是 3.1.0(2011-10-21 釋出),您可以從 SourceForge(http://sourceforge.net/projects/archive-crawler/files/)上下載。每個版本都有四個壓縮包,兩個 .tar.gz 包用於 Linux 下,.zip 用於 windows 下。

如:http://sourceforge.net/projects/archive-crawler/files/archive-crawler (heritrix 1.x)/1.14.4/

其中 heritrix-1.14.4.zip 是原始碼經過編譯打包後的檔案,而 heritrix-1.14.4-src.zip 中包含原始的原始碼,方便進行二次開發。本文需要用到 heritrix-1.14.4-src.zip,將其下載並解壓至 heritrix-1.14.4-src 資料夾。

在 Eclipse 中的配置

首先在 Eclipse 中新建 Java 工程 MyHeritrix。然後利用下載的原始碼包根據以下步驟來配置這個工程。

1. 匯入類庫

Heritrix 所用到的工具類庫都在 heritrix-1.14.4-src\lib 目錄下,需要將其匯入 MyHeritrix 工程。

1)將 heritrix-1.14.4-src 下的 lib 資料夾拷貝到 MyHeritrix 專案根目錄;

2)在 MyHeritrix 工程上右鍵單擊選擇“Build Path -> Configure Build Path …”,然後選擇 Library 選項卡,單擊“Add JARs …”,如圖 1 所示。

圖 1. 匯入類庫 - 匯入前

3)在彈出的“JAR Selection”對話方塊中選擇 MyHeritrix 工程 lib 資料夾下所有的 jar 檔案,然後點選 OK 按鈕。如圖 2 所示。

圖 2. 選擇類庫

設定完成後如圖 3 所示:

圖 3. 匯入類庫 - 匯入後

2. 拷貝原始碼

1)將 heritrix-1.14.4-src\src\java 下的 com、org 和 st 三個資料夾拷貝進 MyHeritrix 工程的 src 下。這三個資料夾包含了執行 Heritrix 所必須的核心原始碼;

2)將 heritrix-1.14.4-src\src\resources\org\archive\util 下的檔案 tlds-alpha-by-domain.txt 拷貝到 MyHeritrix\src\org\archive\util 中。該檔案是一個頂級域名列表,在 Heritrix 啟動時會被讀取;

3)將 heritrix-1.14.4-src\src 下 conf 資料夾拷貝至 Heritrix 工程根目錄。它包含了 Heritrix 執行所需的配置檔案;

4)將 heritrix-1.14.4-src\src 中的 webapps 資料夾拷貝至 Heritrix 工程根目錄。該資料夾是用來提供 servlet 引擎的,包含了 Heritrix 的 web UI 檔案。需要注意的是它不包含幫助文件,如果想使用幫助,可以將 heritrix-1.14.4.zip\docs 中的 articles 資料夾拷貝到 MyHeritrix\webapps\admin\docs(需新建 docs 資料夾)下。或直接用 heritrix-1.14.4.zip 的 webapps 資料夾替換 heritrix-1.14.4-src\src 中的 webapps 資料夾,缺點是這個是打包好的 .war 檔案,無法修改原始碼。

拷貝完畢後的 MyHeritrix 工程目錄層次如圖 4 所示。這裡執行 Heritrix 所需的原始碼等已經準備完備,下面需要修改配置檔案並新增執行引數。

圖 4. MyHeritrix 工程的目錄層次

3. 修改配置檔案

conf 資料夾是用來提供配置檔案的,裡面包含了一個很重要的檔案:heritrix.properties。heritrix.properties 中配置了大量與 Heritrix 執行息息相關的引數,這些引數的配置決定了 Heritrix 執行時的一些預設工具類、Web UI 的啟動引數,以及 Heritrix 的日誌格式等。當第一次執行 Heritrix 時,只需要修改該檔案,為其加入 Web UI 的使用者名稱和密碼。如圖 5 所示,設定 heritrix.cmdline.admin = admin:admin,“admin:admin”分別為使用者名稱和密碼。然後設定版本引數為 1.14.4。

圖 5. 設定登陸使用者名稱和密碼

4. 配置執行檔案

在 MyHeritrix 工程上右鍵單擊選擇“Run As -> Run Configurations”,選擇 Java Application, 確保 Main 選項卡中的 Project 和 Main class 選項內容正確,如圖 6 所示。其中的 Name 引數可以設定為任何方便識別的名字。

圖 6. 配置執行檔案—設定工程和類

然後在 Classpath 頁選擇 UserEntries 選項,此時右邊的 Advanced 按鈕處於啟用狀態,點選它,在彈出的對話方塊中選擇“Add Folders”,然後選擇 MyHeritrix 工程下的 conf 資料夾。如圖 7 所示。

圖 7. 新增配置檔案

至此我們的 MyHeritrix 工程已經可以執行起來了。下面我們來看看如何啟動 Heritrix 並設定一個具體的抓取任務。

建立網頁抓取任務

找到 org.archive.crawler 包中的 Heritrix.java 檔案,它是 Heritrix 爬蟲啟動的入口,右鍵單擊選擇“Run As Java Application”,如果配置正確,會在控制檯輸出如圖 8 所示的啟動資訊。

圖 8. 執行成功時控制檯輸出

在瀏覽器中輸入 http://localhost:8080,會開啟如圖 9 所示的 Web UI 登入介面。

輸入之前設定的使用者名稱 / 密碼:admin/admin,進入到 Heritrix 的管理介面,如圖 10 所示。因為我們還沒有建立抓取任務,所以 Jobs 顯示為 0。

圖 10. Heritrix 控制檯

Heritrix 使用 Web 使用者介面來啟動、設定爬行引數並監控爬行,簡單直觀,易於管理。下面我們以北京林業大學首頁 (http://www.bjfu.edu.cn/) 為種子站點來建立一個抓取例項。

在 Jobs 頁面建立一個新的抓取任務,如圖 11 所示,可以建立四種任務型別。

圖 11. 建立抓取任務

Based on existing job:以一個已經有的抓取任務為模板生成新的抓取任務。

Based on a recovery:在以前的某個任務中,可能設定過一些狀態點,新的任務將從這個設定的狀態點開始。

Based on a profile:專門為不同的任務設定了一些模板,新建的任務將按照模板來生成。

With defaults:這個最簡單,表示按預設的配置來生成一個任務。

這裡我們選擇“With defaults”,然後輸入任務相關資訊,如圖 12 所示。

圖 12. 建立抓取任務“BJFU”

注意圖 11 中下方的按鈕,通過這些按鈕可以對抓取工作進行詳細的設定,這裡我們只做一些必須的設定。

首先點選“Modules”按鈕,在相應的頁面為此次任務設定各個處理模組,一共有七項可配置的內容,這裡我們只設置 Crawl Scope 和 Writers 兩項,下面簡要介紹各項的意義。

1)Select Crawl Scope:Crawl Scope 用於配置當前應該在什麼範圍內抓取網頁連結。例如選擇 BroadScope 則表示當前的抓取範圍不受限制,選擇 HostScope 則表示抓取的範圍在當前的 Host 範圍內。在這裡我們選擇 org.archive.crawler.scope.BroadScope,並單擊右邊的 Change 按鈕儲存設定狀態。

2)Select URI Frontier:Frontier 是一個 URL 的處理器,它決定下一個被處理的 URL 是什麼。同時,它還會將經由處理器鏈解析出來的 URL 加入到等待處理的佇列中去。這裡我們使用預設值。

3)Select Pre Processors:這個佇列的處理器是用來對抓取時的一些先決條件進行判斷。比如判斷 robot.txt 資訊等,它是整個處理器鏈的入口。這裡我們使用預設值。

4)Select Fetchers:這個引數用於解析網路傳輸協議,比如解析 DNS、HTTP 或 FTP 等。這裡我們使用預設值。

5)Select Extractors:主要是用於解析當前伺服器返回的內容,取出頁面中的 URL,等待下次繼續抓取。這裡我們使用預設值。

6)Select Writers:它主要用於設定將所抓取到的資訊以何種形式寫入磁碟。一種是採用壓縮的方式(Arc),還有一種是映象方式(Mirror)。這裡我們選擇簡單直觀的映象方式:org.archive.crawler.writer.MirrorWriterProcessor。

7)Select Post Processors:這個引數主要用於抓取解析過程結束後的掃尾工作,比如將 Extrator 解析出來的 URL 有條件地加入到待處理的佇列中去。這裡我們使用預設值。

設定完畢後的效果如圖 13:

圖 13. 設定 Modules

設定完“Modules”後,點選“Settings”按鈕,這裡只需要設定 user-agent 和 from,其中:

“@[email protected]”字串需要被替換成 Heritrix 的版本資訊。

“PROJECT_URL_HERE”可以被替換成任何一個完整的 URL 地址。

“from”屬性中不需要設定真實的 E-mail 地址,只要是格式正確的郵件地址就可以了。

對於各項引數的解釋,可以點選引數前的問號檢視。本次任務設定如圖 14 所示。

圖 14. 設定 Settings

完成上述設定後點擊“Submit job”連結,然後回到 console 控制檯,可以看到我們剛剛建立的任務處於 pending 狀態,如圖 15 所示。

圖 15. 啟動任務

點選 “Start”啟動任務,重新整理一下即可看到抓取進度以及相關引數。同時可以暫停或終止抓取過程,如圖 16 所示。需要注意的是,進度條的百分比數量並不是準確的,這個百分比是實際上已經處理的連結數和總共分析出的連結數的比值。隨著抓取工作不斷進行,這個百分比的數字也在不斷變化。

圖 16. 開始抓取

同時,在 MyHeritrix 工程目錄下自動生成“jobs”資料夾,包含本次抓取任務。抓取下來網頁以映象方式存放,也就是將 URL 地址按“/”進行切分,進而按切分出來的層次儲存。如圖 17 所示。

圖 17. 抓取到的網頁

從圖 17 也可以看出,因為我們選擇了 BroadScope 的抓取範圍,爬蟲會抓取所有遇到的 URL,這樣會造成 URL 佇列無限制膨脹,無法終止,只能強行終止任務。儘管 Heritrix 也提供了一些抓取範圍控制的類,但是根據實際測試經驗,如果想要完全實現自己的抓取邏輯,僅僅靠 Heritrix 提供的抓取控制是不夠的,只能修改擴充套件原始碼。