最近一直想寫(xiě)個(gè)和搜索相關(guān)的東東,所以簡(jiǎn)單了解搜索引擎方面的知識(shí),個(gè)人總結(jié)一個(gè)垂直搜索引擎 包含以下幾個(gè)部分:
1 web 爬蟲(chóng),抓取目標(biāo)頁(yè)面的內(nèi)容。
2 數(shù)據(jù)預(yù)處理,把抓取下來(lái)的數(shù)據(jù)進(jìn)行去噪,例如使用htmlparser等工具對(duì)去掉無(wú)用的標(biāo)簽數(shù)據(jù)等等,把
數(shù)據(jù)結(jié)構(gòu)化DB或者其他存儲(chǔ)系統(tǒng)已被后面使用。
3. 建立索引。
4. 分詞,開(kāi)發(fā)檢索因子, 對(duì)索引數(shù)據(jù)進(jìn)行檢索。
5. 把檢索到的數(shù)據(jù),在web段展現(xiàn)。
下面就結(jié)合heritrix1.14.3 和lucence2.2.0,介紹下,整個(gè)搜索引擎的開(kāi)發(fā)過(guò)程。
基于lucence+heritrix的開(kāi)源搜索引擎構(gòu)建
基于lucence+heritrix的開(kāi)源搜索引擎構(gòu)建
一 Heritrix篇
簡(jiǎn)介
Heritrix是 一個(gè)用java編寫(xiě)的,開(kāi)源的,可擴(kuò)展的 網(wǎng)絡(luò)爬蟲(chóng)工具,嚴(yán)格遵守robot規(guī)范。 Heritrix,目前還沒(méi)有在windows測(cè)試過(guò),linux環(huán)境測(cè)試通過(guò)。筆者為了方便開(kāi)發(fā)需要,本文檔基于在windows上開(kāi)發(fā)編寫(xiě)的。
第一節(jié) 安裝和運(yùn)行Heritrix ,Heritrix的基本配置文件說(shuō)明
可以到sourceforge上找到heritrix的官方下載地址http://sourceforge.net/projects/archive-crawler下載。
軟件支持:
因?yàn)?font face="Times New Roman">heritrix使用java編寫(xiě)的,所以需要jdk,筆者的下載的是目前最新版本的heritrix (1.14.3版本),需要安裝jdk1.5以后的版本jdk,故筆者安裝了jdk1.6。
硬件支持:
Heritrix對(duì)硬件要求不高,默認(rèn)需要256M內(nèi)存運(yùn)行,也可以修改具體見(jiàn)后面對(duì)啟動(dòng)腳本的修改部分。
假定 把下載包heritrix1.14.3.zip 解壓縮到 E:\develop\opensource\heritrix-1.14.3 目錄下。
假定jdk的安裝目錄是 d:/program files/java 目錄下。
設(shè)定環(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
設(shè)置完成之后,打開(kāi)dos窗口,進(jìn)入 $HERITRIX_HOME\bin目錄下,運(yùn)行
heritrix --help
控制臺(tái)會(huì)輸出 heritrix啟動(dòng)的命令參數(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.
運(yùn)行 heritrix --admin=LOGIN:PASSWORD
至此,heritrix的守護(hù)進(jìn)程就啟動(dòng)起來(lái)了。簡(jiǎn)單吧,不過(guò)別高興,麻煩的事情還在后面。
Heritrix的配置文件:
Heritrix的啟動(dòng)腳本文件是 bin目錄下的heritrix文件,java虛擬機(jī)的環(huán)境設(shè)置可以在這個(gè)文件里修改,例如前面提到的修改內(nèi)存大小可以在這個(gè)文件中加入:
% JAVA_OPTS="-Xmx512m"
把虛擬機(jī)使用的最大內(nèi)存改成512m
另外也可以在 控制臺(tái) 在啟動(dòng)heritrix時(shí)通過(guò)命令行改變heritrix行為,同時(shí)也可以修改conf目錄下的heritrix.properties文件,來(lái)改變heritrix的行為。下面介紹一些heritrix常用的屬性配置:
Heritrix.version 配置heritirx的版本
heritrix.jobsdir = jobs 配置 抓取的文件存放路徑,默認(rèn)存放到 $HERITRIX_HOME/jbos 目錄下。
heritrix.cmdline.admin = admin:admin 可以在這里寫(xiě)好登錄的用戶名密碼,也可以在啟動(dòng)的時(shí)候通過(guò)命令行指定
heritrix.cmdline.port = 8080 web ui控制端訪問(wèn)的端口
heritrix.cmdline.run = false 如果設(shè)置成true,heritrix在啟動(dòng)時(shí),就會(huì)把所有的job啟動(dòng)。
heritrix.cmdline.nowui = false 如果設(shè)置成true,會(huì)阻止通過(guò)web方式操作爬蟲(chóng) 控制臺(tái)
heritrix.cmdline.order = 如果設(shè)置了一個(gè)string的 文件目錄值,將會(huì)使用用戶指定的order。Xml文件
heritrix.cmdline.jmxserver = false
heritrix.cmdline.jmxserver.port = 8081
以上配置完成,就可以啟動(dòng)heritrix,并且通過(guò)web ui的方式訪問(wèn)了 http://127.0.0.1:8080/admin。進(jìn)入login頁(yè)面輸入在配置文件中配置的用戶名密碼。就可以進(jìn)入控制臺(tái)了。
第二節(jié) 定制第一個(gè)網(wǎng)頁(yè)抓取任務(wù)
啟動(dòng)heritrix,通過(guò)瀏覽器訪問(wèn) http://127.0.0.1:8080/admin, 輸入用戶名密碼,進(jìn)入控制臺(tái)。點(diǎn)擊job 標(biāo)簽頁(yè),點(diǎn)擊 with default 使用默認(rèn)的描述文件創(chuàng)建一個(gè)抓取job,打開(kāi)的窗口:
Name of new job :隨便輸入一個(gè)方面自己記憶的名字
Description: 隨便輸入
Seeds: 輸入要抓取的種子頁(yè)面。例如要抓取 某個(gè)網(wǎng)站的所有產(chǎn)品頁(yè)面的詳細(xì)信息,那么種子應(yīng)該是這些產(chǎn)品的列表頁(yè)面,也就是說(shuō)從這個(gè)頁(yè)面可以進(jìn)入每個(gè)產(chǎn)品的詳細(xì)頁(yè)面。
填寫(xiě)完成之后點(diǎn)擊modules,進(jìn)入設(shè)置頁(yè)面,可以設(shè)置的項(xiàng)比較多,這里只挑幾個(gè)重點(diǎn)的介紹下:
Select Crawl Scope
BroadScope 從字面上理解應(yīng)該是最大范圍的抓取,個(gè)人感覺(jué)應(yīng)該是最大深度的爬取網(wǎng)頁(yè)
其他的幾個(gè),筆者沒(méi)有用到,暫時(shí)不做介紹了,免得寫(xiě)的有出入誤導(dǎo)讀者。
Select URI Frontier
Url 處理器它將決定下一個(gè)被處理的URL是什么。同時(shí),它還會(huì)將經(jīng)由處理器鏈所解析出來(lái)的URL加入到等待處理的隊(duì)列中去。
BDBFronter heritrix 默認(rèn)使用的處理器。這個(gè)類的具體邏輯沒(méi)有仔細(xì)研究過(guò),因?yàn)楣P者寫(xiě)了自己的fronter類,來(lái)完成處理邏輯,在后面的章節(jié)里面介紹
這兩個(gè)配置是最核心的配置,后面還有5個(gè)配置,都是可以自己定制的。大致看下就明白是什么意思了,在這里就不贅述了。特別強(qiáng)調(diào)下Select Writers 的配置,主要是用于將所抓取到的信息寫(xiě)入磁盤(pán)。通常寫(xiě)入磁盤(pán)時(shí)有兩種形式,一種是采用壓縮的方式寫(xiě)入,在這里被稱為Arc方式,另一種則采用鏡象方式寫(xiě)入。當(dāng)然處理起來(lái),鏡象方式要更為容易一些,因此 用mirror方式存儲(chǔ)。
關(guān)于module里面配置,如果想了解每個(gè)配置節(jié)點(diǎn)都是什么意思,可以看下官方文檔,里面有有每個(gè)選項(xiàng)的詳細(xì)字典說(shuō)明
設(shè)置完module,點(diǎn)擊setting鏈接,進(jìn)入job設(shè)置頁(yè)面,這個(gè)頁(yè)面的設(shè)置也比較容易理解。這里特殊說(shuō)下http-headers的配置:
User-agent 模擬瀏覽器的header,里面請(qǐng)?zhí)顚?xiě)客戶段的瀏覽器的user-agent
Mozilla/5.0 (compatible; heritrix/1.14.3 +PROJECT_URL_HERE),把PROJECT_URL_HERE 替換成任意一個(gè)帶有http的完整鏈接即可例如:http://192.168.10.123
From 里面隨便填寫(xiě)一個(gè)email格式的email地址即可,不必是真實(shí)的email地址。
其他的配置,都比較容易理解,如果有不清楚的,可以點(diǎn)擊每個(gè)輸入框前面的問(wèn)號(hào),heritrix會(huì)告訴你這個(gè)輸入框里的值是用來(lái)做什么的,應(yīng)該填寫(xiě)什么值。
這個(gè)頁(yè)面配置完成后,就可以提交job了。提交之后,進(jìn)入到cosole主控制臺(tái)頁(yè)面,應(yīng)該可以看到剛才創(chuàng)建的job,點(diǎn)擊start 開(kāi)始執(zhí)行任務(wù)了。 在控制臺(tái)上可以監(jiān)控到任務(wù)執(zhí)行時(shí),系統(tǒng)的資源消耗情況和任務(wù)執(zhí)行情況,同時(shí)也可以隨時(shí)暫停任務(wù)和終止任務(wù)。
小結(jié) : 至此一個(gè)簡(jiǎn)單的抓取任務(wù),就建立完成可以開(kāi)始工作了,但是以上的配置使用的都是heritrix的默認(rèn)提供的實(shí)例來(lái)完成的,針對(duì)每個(gè)垂直搜索引擎,對(duì)數(shù)據(jù)的抓取,都有特定的約束需求,那么就需要定制自己的實(shí)例來(lái)完成抓取任務(wù),下面我們進(jìn)入heritrix的開(kāi)發(fā)階段,定制自己的web爬蟲(chóng)。
第三節(jié) :開(kāi)發(fā),定制自己的web爬蟲(chóng)
本人的word的文檔暫時(shí)寫(xiě)到這里,明天繼續(xù)補(bǔ)充。