基于lucence+heritrix的開源搜索引擎構建
一 Heritrix篇
簡介
Heritrix是 一個用java編寫的,開源的,可擴展的 網絡爬蟲工具,嚴格遵守robot規(guī)范。 Heritrix,目前還沒有在windows測試過,linux環(huán)境測試通過。筆者為了方便開發(fā)需要,本文檔基于在windows上開發(fā)編寫的。
第一節(jié) 安裝和運行Heritrix ,Heritrix的基本配置文件說明
可以到sourceforge上找到heritrix的官方下載地址http://sourceforge.net/projects/archive-crawler下載。
軟件支持:
因為heritrix使用java編寫的,所以需要jdk,筆者的下載的是目前最新版本的heritrix (1.14.3版本),需要安裝jdk1.5以后的版本jdk,故筆者安裝了jdk1.6。
硬件支持:
Heritrix對硬件要求不高,默認需要256M內存運行,也可以修改具體見后面對啟動腳本的修改部分。
假定 把下載包heritrix1.14.3.zip 解壓縮到 E:\develop\opensource\heritrix-1.14.3 目錄下。
假定jdk的安裝目錄是 d:/program files/java 目錄下。
設定環(huán)境變量
JAVA_HOME D:\Program Files\java\jdk1.6.0_02
HERITRIX_HOME E:\develop\opensource\heritrix-1.14.3\heritrix-1.14.3
設置完成之后,打開dos窗口,進入 $HERITRIX_HOME\bin目錄下,運行
heritrix --help
控制臺會輸出 heritrix啟動的命令參數(shù):
Usage: heritrix --help
Usage: heritrix --nowui ORDER.XML
Usage: heritrix [--port=#] [--run] [--bind=IP,IP...] --admin=LOGIN:PASSWORD \
[ORDER.XML]
Usage: heritrix [--port=#] --selftest[=TESTNAME]
Version: @VERSION@
Options:
-b,--bind Comma-separated list of IP addresses or hostnames for web
server to listen on. Set to / to listen on all available
network interfaces. Default is 127.0.0.1.
-a,--admin Login and password for web user interface administration.
Required (unless passed via the 'heritrix.cmdline.admin'
system property). Pass value of the form 'LOGIN:PASSWORD'.
-h,--help Prints this message and exits.
-n,--nowui Put heritrix into run mode and begin crawl using ORDER.XML. Do
not put up web user interface.
-p,--port Port to run web user interface on. Default: 8080.
-r,--run Put heritrix into run mode. If ORDER.XML begin crawl.
-s,--selftest Run the integrated selftests. Pass test name to test it only
(Case sensitive: E.g. pass 'Charset' to run charset selftest).
Arguments:
ORDER.XML Crawl order to run.
運行 heritrix --admin=LOGIN:PASSWORD
至此,heritrix的守護進程就啟動起來了。簡單吧,不過別高興,麻煩的事情還在后面。
Heritrix的配置文件:
Heritrix的啟動腳本文件是 bin目錄下的heritrix文件,java虛擬機的環(huán)境設置可以在這個文件里修改,例如前面提到的修改內存大小可以在這個文件中加入:
% JAVA_OPTS="-Xmx512m"
把虛擬機使用的最大內存改成512m
另外也可以在 控制臺 在啟動heritrix時通過命令行改變heritrix行為,同時也可以修改conf目錄下的heritrix.properties文件,來改變heritrix的行為。下面介紹一些heritrix常用的屬性配置:
Heritrix.version 配置heritirx的版本
heritrix.jobsdir = jobs 配置 抓取的文件存放路徑,默認存放到 $HERITRIX_HOME/jbos 目錄下。
heritrix.cmdline.admin = admin:admin 可以在這里寫好登錄的用戶名密碼,也可以在啟動的時候通過命令行指定
heritrix.cmdline.port = 8080 web ui控制端訪問的端口
heritrix.cmdline.run = false 如果設置成true,heritrix在啟動時,就會把所有的job啟動。
heritrix.cmdline.nowui = false 如果設置成true,會阻止通過web方式操作爬蟲 控制臺
heritrix.cmdline.order = 如果設置了一個string的 文件目錄值,將會使用用戶指定的order。Xml文件
heritrix.cmdline.jmxserver = false
heritrix.cmdline.jmxserver.port = 8081
以上配置完成,就可以啟動heritrix,并且通過web ui的方式訪問了 http://127.0.0.1:8080/admin。進入login頁面輸入在配置文件中配置的用戶名密碼。就可以進入控制臺了。
第二節(jié) 定制第一個網頁抓取任務
啟動heritrix,通過瀏覽器訪問 http://127.0.0.1:8080/admin, 輸入用戶名密碼,進入控制臺。點擊job 標簽頁,點擊 with default 使用默認的描述文件創(chuàng)建一個抓取job,打開的窗口:

Name of new job :隨便輸入一個方面自己記憶的名字
Description: 隨便輸入
Seeds: 輸入要抓取的種子頁面。例如要抓取 某個網站的所有產品頁面的詳細信息,那么種子應該是這些產品的列表頁面,也就是說從這個頁面可以進入每個產品的詳細頁面。
填寫完成之后點擊modules,進入設置頁面,可以設置的項比較多,這里只挑幾個重點的介紹下:
Select Crawl Scope
BroadScope 從字面上理解應該是最大范圍的抓取,個人感覺應該是最大深度的爬取網頁
其他的幾個,筆者沒有用到,暫時不做介紹了,免得寫的有出入誤導讀者。
Select URI Frontier
Url 處理器它將決定下一個被處理的URL是什么。同時,它還會將經由處理器鏈所解析出來的URL加入到等待處理的隊列中去。
BDBFronter heritrix 默認使用的處理器。這個類的具體邏輯沒有仔細研究過,因為筆者寫了自己的fronter類,來完成處理邏輯,在后面的章節(jié)里面介紹
這兩個配置是最核心的配置,后面還有5個配置,都是可以自己定制的。大致看下就明白是什么意思了,在這里就不贅述了。特別強調下Select Writers 的配置,主要是用于將所抓取到的信息寫入磁盤。通常寫入磁盤時有兩種形式,一種是采用壓縮的方式寫入,在這里被稱為Arc方式,另一種則采用鏡象方式寫入。當然處理起來,鏡象方式要更為容易一些,因此 用mirror方式存儲。
關于module里面配置,如果想了解每個配置節(jié)點都是什么意思,可以看下官方文檔,里面有有每個選項的詳細字典說明
設置完module,點擊setting鏈接,進入job設置頁面,這個頁面的設置也比較容易理解。這里特殊說下http-headers的配置:
User-agent 模擬瀏覽器的header,里面請?zhí)顚懣蛻舳蔚臑g覽器的user-agent
Mozilla/5.0 (compatible; heritrix/1.14.3 +PROJECT_URL_HERE),把PROJECT_URL_HERE 替換成任意一個帶有http的完整鏈接即可例如:http://192.168.10.123
From 里面隨便填寫一個email格式的email地址即可,不必是真實的email地址。
其他的配置,都比較容易理解,如果有不清楚的,可以點擊每個輸入框前面的問號,heritrix會告訴你這個輸入框里的值是用來做什么的,應該填寫什么值。
這個頁面配置完成后,就可以提交job了。提交之后,進入到cosole主控制臺頁面,應該可以看到剛才創(chuàng)建的job,點擊start 開始執(zhí)行任務了。 在控制臺上可以監(jiān)控到任務執(zhí)行時,系統(tǒng)的資源消耗情況和任務執(zhí)行情況,同時也可以隨時暫停任務和終止任務。
小結 : 至此一個簡單的抓取任務,就建立完成可以開始工作了,但是以上的配置使用的都是heritrix的默認提供的實例來完成的,針對每個垂直搜索引擎,對數(shù)據(jù)的抓取,都有特定的約束需求,那么就需要定制自己的實例來完成抓取任務,下面我們進入heritrix的開發(fā)階段,定制自己的web爬蟲。
第三節(jié) :開發(fā),定制自己的web爬蟲