【爬蟲】Heritrix 3.2安裝和執行例項

widiot1發表於2018-05-13

1. Heritrix安裝

1.1 本地環境

  • 系統:Ubuntu 16.04
  • Heritrix版本:3.2
  • JDK版本:1.7(Heritrix 3.2不支援Java8)

1.2 下載解壓

下載方式如下:

  1. 在CSDN上查詢可以直接通過命令列使用的Heritrix 3.2版本,然後解壓到工作目錄,通過執行二進位制檔案執行
  2. 也可以在GitHub下載release版本,然後通過IDE直接編譯執行
  3. 如果能訪問外網,可以直接通過Heritrix官網下載

以下采用的是二進位制檔案執行方式。

1.3 配置

1.設定JAVA_HOME環境變數

指向Java的安裝路徑,比如:

export JAVA_HOME=/usr/local/java/jre

2.設定HERITRIX_HOME環境變數

指向Heritrix目錄,應該設定為包含bin的目錄:

export HERITRIX_HOME=/PATH/TO/HERITRIX

比如,Heritrix的bin目錄為/home/user/heritrix3.2/bin,那麼它的設定應該為:

export HERITRIX_HOME=/home/user/heritrix3.2

3.設定Heritrix啟動檔案的執行許可權

修改heritrix檔案的許可權:

chmod u+x $HERITRIX_HOME/bin/heritrix

4.修改Java分配給Heritrix的堆記憶體大小

設定JAVA_OPTS環境變數,比如分配1GB記憶體給Heritrix:

export JAVA_OPTS=-Xmx1024M

1.4 執行

1.4.1 命令列選項

Heritrix可以用多個選項執行,可以用以下命令檢視選項:

$HERITRIX_HOME/bin/heritrix --help

選項描述如下表所示:

命令列選項 描述
-p,–web-port < arg> 指定Web UI監聽的埠
-a --web-admin < arg> 指定訪問Web UI的username和password,這個引數在訪問Web UI的時候必須指定。引數格式為:,比如admin:admin。從Heritrix3.1開始,如果提供給-a選項的引數是一個以“@”開頭字串,那麼該字串的剩餘部分會被認為是一個包含管理員登入名和密碼的本地檔名,這個方式新增了一層對管理員username和password的保護。
-r,–run-job < arg> 指定一個準備好的job或者profile名字用於Heritrix啟動時載入。如果只指定了一個profile名,那這個profile名將首先被複制到一個新準備好的job,然後新準備好的job會被載入。從Heritrix3.1開始,這個選項被移除。
-s,–ssl-params < arg> 指定用於HTTPS的金鑰庫路徑、金鑰庫密碼和金鑰密碼。值之間用逗號分割,不能包含空格。
-b --web-bind-hosts < arg> 指定要繫結到Web UI的用逗號分割的主機名/IP地址列表。如果不指定,Web UI只能通過localhost/127.0.0.1訪問。可以使用‘/’作為‘所有地址’的縮寫。
-h,–help < arg> 展示使用資訊。
-j,–jobs-dir 展示jobs目錄。預設為 ./jobs。
-l,–logging-properties 展示日誌配置檔案的絕對路徑(比如,conf/logging.properties)。如果存在,這個檔案將被用於配置Java日誌。預設為 ./conf/loggin.properties。

1.4.2 啟動Web UI

如果使用Web UI啟動Heritrix,使用如下命令,username和password分別指定為adminadmin

$HERITRIX_HOME/bin/heritrix -a admin:admin

輸出資訊如下:

2018年 05月 12日 星期六 21:50:47 CST Heritrix starting (pid 16917).
Using ad-hoc HTTPS certificate with fingerprint...
SHA1:41:A8:52:5D:B1:FF:07:06:5E:DA:A9:24:90:36:27:80:7E:88:8A:39
Verify in browser before accepting exception.
engine listening at port 8443
operator login set per command-line
NOTE: We recommend a longer, stronger password, especially if your web 
interface will be internet-accessible.

然後必須通過HTTPS訪問,比如:

https://localhost:8443/

但是瀏覽器會因為證照原因阻止訪問,這時點選繼續訪問就可以了:

然後輸入通過命令列輸入的username和password,比如分別為adminadmin。然後就進入了主介面:

預設情況下,Web UI監聽地址只繫結到localhost地址,因此只能在啟動Web UI的同一臺計算機上訪問Web UI。-b選項可用於偵聽不同的/附加的地址。

2. Heritrix簡介

參考自網路爬蟲系統Heritrix的結構分析 (個人讀書報告)

2.1 系統簡介

網路爬蟲是一種按照一定的規則,自動抓取網際網路資訊的程式或指令碼。從一個或若干初始網頁的URL開始,利用HTTP等標準協議讀取文件,將文件中所包括的URL放入URL佇列中,然後從佇列中新的URL處開始進行漫遊,把爬過的網頁蒐集起來,直到沒有滿足條件的新的URL為止。

網路爬蟲工具Heritrix是由物件導向的程式設計語言Java開發的,開源的網路爬蟲工具包,它的程式執行速度之快是傳統搜尋引擎無法企及的。作為一個專為網際網路網頁進行存檔而開發的網頁檢索器,開發者可利用其出色可擴充套件性來實現自己的抓取邏輯。

2.2 系統結構

Heritrix是一個爬蟲框架,其組織結構如圖3所示,包含了整個元件和抓取流程:

Heritrix採用的是模組化的設計,各個模組由一個控制器類(CrawlController類)來協調,控制器是整體的核心:


CrawlController類是整個爬蟲的總控制者,控制整個抓取工作的起點,決定整個抓取任務的開始和結束。CrawlController從Frontier獲取URL,傳遞給執行緒池(ToePool)中的ToeThread處理。

Frontier(邊界控制器)主要確定下一個將被處理的URL,負責訪問的均衡處理,避免對某一Web伺服器造成太大的壓力。Frontier儲存著爬蟲的狀態,包括已經找到的URI、正在處理中的URI和已經處理過的URI。

Heritrix是按多執行緒方式抓取的爬蟲,主執行緒把任務分配給Teo執行緒(處理執行緒),每個Teo執行緒每次處理一個URL。Teo執行緒對每個URL執行一遍URL處理器鏈。URL處理器鏈包括如下5個處理步驟:

  1. 預取鏈:主要是做一些準備工作,例如,對處理進行延遲和重新處理,否決隨後的操作
  2. 提取鏈:主要是下載網頁,進行DNS轉換,填寫請求和響應表單
  3. 抽取鏈:當提取完成時,抽取感興趣的HTML和JavaScript,通常那裡有新的要抓取的URL
  4. 寫鏈:儲存抓取結果,可以在這一步直接做全文索引。Heritrix提供了用ARC格式儲存下載結果的ARCWriterProcessor實現
  5. 提交鏈:做和此URL相關操作的最後處理。檢查哪些新提取出的URL在抓取範圍內,然後把這些URL提交給Frontier。另外還會更新DNS快取資訊

伺服器快取(Server cache)存放伺服器的持久資訊,能夠被爬行部件隨時查到,包括被抓取的Web伺服器資訊,例如DNS查詢結果,也就是IP地址。

3. 爬蟲例項

3.1 建立Job

在“Create new job with recommended starting configuration”中輸入新建Job的名字,然後點選“create”::

新建的Job將會在Job列表中展示。在Heritrix 3.0中Job基於profile-defaults配置檔案。從Heritrix 3.1之後,profile-defaults配置檔案被移除。

3.2 檢視Job

點選新建Job的名字將會進入Job的頁面:

頁面頂部是導航欄,點選“Configuration”可以進入crawler-beans.xml的可編輯頁面:

crawler-beans.xml的內容如圖所示,在修改它的內容之後需要點選最下方的“save changes”按鈕進行儲存

3.3 編輯crawler-beans.xml

必須在crawler-beans.xml中輸入一些屬性才能讓Job可以執行,新增內容如下所示:

  1. 首先在metadata.operatorContactUrl屬性中新增一個有效的值,比如https://www.archive.org
  2. 然後用爬蟲的種子值填充“longerOverrides” bean的<prop>元素,其中有一個測試的種子值用於參考。修改好之後就點選“save changes”按鈕

3.4 構建Job

在Job頁面中點選“build”按鈕,這個命令將構建用於執行Job的Spring基礎架構。在Job Log中會輸出“INFO JOB instantiated.”:

3.5 Job就緒

在構建Job之後點選“launch”按鈕,然後重新整理頁面,這個命令會使Job處於暫停模式,隨時可以執行:

3.6 執行Job

點選“unpause”按鈕就可以執行Job,Job會開始向設定的爬取種子值傳送請求。Job的狀態將會變為執行狀態,重新整理頁面就可以更新狀態和變數值:

3.7 儲存格式

Job爬取的資料預設儲存為warc格式,如果要可以直接檢視,需要將warcWriter bean的class屬性修改為“MirrorWriterProcessor”:

3.8 爬取結果

如果是warc格式,則爬取結果在“./jobs/mynewjob/<以時間名命令>/warc/”資料夾中,需要解壓縮檢視:

如果是mirror格式,爬取結果在“./jobs/mynewjob/<以時間名命令>/mirror/”資料夾中,爬取結果是儲存的網頁,可以直接通過瀏覽器檢視:

相關文章