Heritrix —— eclipse 安裝與配置

1.Heritrix 下載

    Heritrix使用的是1.14.42010-5-10 發佈),從SourceForgehttp://sourceforge.net/projects/archive-crawler/files/)上下載。每個版本都有四個壓縮包,兩個 .tar.gz 包用於 Linux 下,.zip 用於 windows 下。其中heritrix-1.14.4.zip 是源代碼經過編譯打包後的文件,而 heritrix-1.14.4-src.zip 中包含原始的源代碼,方便進行二次開發。我用 heritrix-1.14.4-src.zip,將其下載並解壓至 heritrix-1.14.4-src 文件夾。

2.    Eclipse 中的配置

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

 

1. 導入類庫

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

1)將heritrix-1.14.4-src 下的 lib 文件夾拷貝到 WHeritrix 項目根目錄;

2)在 WHeritrix 工程上右鍵單擊選擇“Build PathConfigure Build Path …”,然後選擇 Library 選項卡,單擊“Add JARs …”

3)在彈出的“JAR Selection”對話框中選擇 WHeritrix 工程lib 文件夾下所有的 jar 文件,然後點擊 OK按鈕。

 

2. 拷貝源代碼

1)將heritrix-1.14.4-src\src\java 下的 comorg 和 st 三個文件夾拷貝進 WHeritrix 工程的src 下。這三個文件夾包含了運行 Heritrix 所必須的核心源代碼;

2)將heritrix-1.14.4-src\src\resources\org\archive\util 下的文件tlds-alpha-by-domain.txt 拷貝到 WHeritrix\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 文件夾拷貝到WHeritrix\webapps\admin\docs(需新建 docs 文件夾)下。或直接用 heritrix-1.14.4.zip 的webapps 文件夾替換 heritrix-1.14.4-src\src 中的 webapps 文件夾,缺點是這個是打包好的 .war文件,無法修改源代碼。

至此,運行 Heritrix 所需的源代碼等已經準備完備,下面需要修改配置文件並添加運行參數。

 

3. 修改配置文件

    conf 文件夾是用來提供配置文件的,裏面包含了一個很重要的文件:heritrix.propertiesheritrix.properties 中配置了大量與 Heritrix 運行息息相關的參數,這些參數的配置決定了 Heritrix 運行時的一些默認工具類、Web UI 的啓動參數,以及 Heritrix 的日誌格式等。當第一次運行 Heritrix 時,只需要修改該文件,爲其加入 Web UI 的用戶名和密碼。設置heritrix.cmdline.admin = admin:admin,“admin:admin”分別爲用戶名和密碼。然後設置版本參數爲1.14.4

 

4. 配置運行文件

    在 WHeritrix 工程上右鍵單擊選擇“Run AsRun Configurations”,確保 Main 選項卡中的Project 和 Main class 選項內容正確,其中的Name 參數可以設置爲wangcg

    然後在 Classpath 頁選擇 UserEntries 選項,此時右邊的 Advanced 按鈕處於激活狀態,點擊它,在彈出的對話框中選擇“Add Folders”,然後選擇 WHeritrix 工程下的conf 文件夾。

    至此WHeritrix 工程已經可以運行起來了。接着,講述如何啓動 Heritrix 並設置一個具體的抓取任務。

3.   創建網頁抓取任務

    找到 org.archive.crawler 包中的 Heritrix.java 文件,它是 Heritrix 爬蟲啓動的入口,右鍵單擊選擇“Run As Java Application”,如果配置正確,會在控制檯輸出啓動信息。

    輸入之前設置的用戶名 / 密碼:admin/admin,進入到 Heritrix 的管理界面。

    Heritrix 使用 Web 用戶界面來啓動、設置爬行參數並監控爬行,簡單直觀,易於管理。下面以“深圳研究生院”的網站: http://www.szpku.edu.cn 爲種子站點來創建一個抓取實例。在Jobs 頁面創建一個新的抓取任務,如圖 1 所示,可以創建四種任務類型。


使用Heritrix對網站進行爬取,及其配置、安裝、使用方法

 

 1 創建抓取任務

 

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

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

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

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

選擇“With defaults”,然後輸入任務相關信息,如圖2所示。

使用Heritrix對網站進行爬取,及其配置、安裝、使用方法

 

 2創建抓取任務sz

 

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

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

2Select URI FrontierFrontier 是一個 URL 的處理器,它決定下一個被處理的 URL 是什麼。同時,它還會將經由處理器鏈解析出來的 URL 加入到等待處理的隊列中去。這裏使用默認值。

3Select Pre Processors:這個隊列的處理器是用來對抓取時的一些先決條件進行判斷。比如判斷robot.txt 信息等,它是整個處理器鏈的入口。這裏使用默認值。

4Select Fetchers:這個參數用於解析網絡傳輸協議,比如解析 DNSHTTP 或 FTP 等。這裏使用默認值。

5Select Extractors:主要是用於解析當前服務器返回的內容,取出頁面中的 URL,等待下次繼續抓取。這裏使用默認值。

6Select Writers:它主要用於設定將所抓取到的信息以何種形式寫入磁盤。一種是採用壓縮的方式(Arc),還有一種是鏡像方式(Mirror)。這裏選擇簡單直觀的鏡像方式:org.archive.crawler.writer.MirrorWriterProcessor

7Select Post Processors:這個參數主要用於抓取解析過程結束後的掃尾工作,比如將 Extrator 解析出來的 URL 有條件地加入到待處理的隊列中去。這裏使用默認值。設置完畢後的效果如圖 3

使用Heritrix對網站進行爬取,及其配置、安裝、使用方法

 

 3 設置 Modules

 

    設置完“Modules”後,點擊“Settings”按鈕,這裏只需要設置 user-agent 和 from,其中:

@VERSION@”字符串需要被替換成Heritrix 的版本信息。

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

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

對於各項參數的解釋,可以點擊參數前的問號查看。本次任務設置如圖 4 所示。

使用Heritrix對網站進行爬取,及其配置、安裝、使用方法

 

 4 設置 Settings

 

    完成上述設置後點擊“Submit job”鏈接,然後回到 console 控制檯,可以看到剛剛創建的任務處於pending 狀態。

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

使用Heritrix對網站進行爬取,及其配置、安裝、使用方法

 

 5開始抓取

    同時,在 WHeritrix 工程目錄下自動生成“jobs”文件夾,包含本次抓取任務。抓取下來網頁以鏡像方式存放,也就是將 URL 地址按“/”進行切分,進而按切分出來的層次存儲。因爲選擇了 BroadScope 的抓取範圍,爬蟲會抓取所有遇到的 URL,這樣會造成 URL 隊列無限制膨脹,無法終止,只能強行終止任務。儘管Heritrix 也提供了一些抓取範圍控制的類,但是根據實際測試經驗,如果想要完全實現自己的抓取邏輯,僅僅靠 Heritrix 提供的抓取控制是不夠的,只能修改擴展源代碼。

下面以實現抓取“深圳研究生院”的網站: http://www.szpku.edu.cn下相關頁面爲例說明如何擴展Heritrix 實現自己的抓取邏輯。

4.   擴展 Heritrix

    先來分析一下 Heritrix 的總體結構和 URI 的處理鏈。

1)     Heritrix 的總體結構

    Heritrix 採用了模塊化的設計,用戶可以在運行時選擇要用的模塊。它由核心類(core classes)和插件模塊(pluggable modules)構成。核心類可以配置,但不能被覆蓋,插件模塊可以由第三方模塊取代。所以可以用實現了特定抓取邏輯的第三方模塊來取代默認的插件模塊,從而滿足自己的抓取需要。

    Heritrix 的整體結構如圖 6 所示。其中CrawlController(下載控制器)整個下載過程的總控制者,整個抓取工作的起點,決定整個抓取任務的開始和結束。每個 URI 都有一個獨立的線程,它從邊界控制器(Frontier)獲取新的 URI,然後傳遞給 Processor chains(處理鏈)經過一系列 Processor(處理器)處理。

 

使用Heritrix對網站進行爬取,及其配置、安裝、使用方法

 6  Heritrix 整體結構

2)     URI 處理流程

    處理鏈由多個處理器組成,共同完成對 URI 的處理,如圖 7 所示。

使用Heritrix對網站進行爬取,及其配置、安裝、使用方法

 

 7 URI 處理鏈

 

1Pre-fetch processing chain( 預處理鏈 ),用來判斷抓取時的一些先決條件,如 robot 協議、DNS等。

2Fetch processing chain(抓取處理鏈),解析網絡傳輸協議,從遠程服務器獲取數據。

3Extractor processing chain(抽取處理鏈),從網頁中抽取新的 URL

4Write/index processing chain(寫處理鏈),負責把數據寫入本地磁盤。

5Post-processing chain(後置處理鏈),在整個抓取解析過程結束後,進行一些掃尾工作,比如將前面Extractor 解析出來的 URL 有條件的加入到待處理隊列中去。這裏只需要控制加入到待處理隊列中的 URL,就可以控制抓取的範圍。

3)     擴展 FrontierScheduler 來抓取特定網站內容

    FrontierScheduler 是 org.archive.crawler.postprocessor 包中的一個類,它的作用是將在Extractor 中所分析得出的鏈接加入到 Frontier 中,以待繼續處理。在該類的innerProcess(CrawlURI) 函數中,首先檢查當前鏈接隊列中是否有一些屬於高優先級的鏈接。如果有,則立刻轉走進行處理;如果沒有,則對所有的鏈接進行遍歷,然後調用 Frontier 中的 schedule() 方法加入隊列進行處理。innerProcess() 函數並未直接調用 Frontier 的 schedule() 方法,而是調用自己內部的schedule() 方法,進而在這個方法中再調用 Frontier 的 schedule() 方法。而 FrontierScheduler的 schedule() 方法實際上直接將當前的候選鏈接不加任何判斷地直接加入到抓取隊列當中了。這種方式爲FrontierScheduler 的擴展留出了很好的接口。構造一個FrontierScheduler 的派生類FrontierSchedulerForszpku,這個類重載了 schedule(CandidateURI caUri) 這個方法,限制抓取的URI 必須包含“szpku”、“pku”,以保證抓取的鏈接都是北大深圳內部的地址。在 modules 文件夾中的Processor.options 中添加一行“org.archive.crawler.postprocessor.FrontierSchedulerForszpku |FrontierSchedulerForszpku”,這樣在爬蟲的 WebUI 中就可以選擇我們擴展的org.archive.crawler.postprocessor.FrontierSchedulerForszpku 選項。

    最終抓取的頁面如圖 8 所示,全部都是 http://www.szpku.edu.cn下的頁面。

使用Heritrix對網站進行爬取,及其配置、安裝、使用方法

 

 8擴展後的抓取效果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章