herodby
          技術(shù) 筆記
          posts - 14,  comments - 14,  trackbacks - 0

                   最近一直想寫個(gè)和搜索相關(guān)的東東,所以簡單了解搜索引擎方面的知識(shí),個(gè)人總結(jié)一個(gè)垂直搜索引擎 包含以下幾個(gè)部分:
                   1   web 爬蟲,抓取目標(biāo)頁面的內(nèi)容。
                   2  數(shù)據(jù)預(yù)處理,把抓取下來的數(shù)據(jù)進(jìn)行去噪,例如使用htmlparser等工具對(duì)去掉無用的標(biāo)簽數(shù)據(jù)等等,把 
                       數(shù)據(jù)結(jié)構(gòu)化DB或者其他存儲(chǔ)系統(tǒng)已被后面使用。
                   3. 建立索引。
                   4. 分詞,開發(fā)檢索因子, 對(duì)索引數(shù)據(jù)進(jìn)行檢索。
                   5. 把檢索到的數(shù)據(jù),在web段展現(xiàn)。
            下面就結(jié)合heritrix1.14.3  和lucence2.2.0,介紹下,整個(gè)搜索引擎的開發(fā)過程。

          基于lucence+heritrix的開源搜索引擎構(gòu)建
                   

              基于lucence+heritrix的開源搜索引擎構(gòu)建

          一 Heritrix

            簡介

             Heritrix是 一個(gè)用java編寫的,開源的,可擴(kuò)展的 網(wǎng)絡(luò)爬蟲工具,嚴(yán)格遵守robot規(guī)范。 Heritrix,目前還沒有在windows測試過,linux環(huán)境測試通過。筆者為了方便開發(fā)需要,本文檔基于在windows上開發(fā)編寫的。

            

            第一節(jié)   安裝和運(yùn)行Heritrix ,Heritrix的基本配置文件說明

             可以到sourceforge上找到heritrix的官方下載地址http://sourceforge.net/projects/archive-crawler下載。

             軟件支持:

          因?yàn)?font face="Times New Roman">heritrix使用java編寫的,所以需要jdk,筆者的下載的是目前最新版本的heritrix 1.14.3版本),需要安裝jdk1.5以后的版本jdk,故筆者安裝了jdk1.6

          硬件支持:

          Heritrix對(duì)硬件要求不高,默認(rèn)需要256M內(nèi)存運(yù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è)置完成之后,打開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)起來了。簡單吧,不過別高興,麻煩的事情還在后面。

          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í)通過命令行改變heritrix行為,同時(shí)也可以修改conf目錄下的heritrix.properties文件,來改變heritrix的行為。下面介紹一些heritrix常用的屬性配置:

          Heritrix.version   配置heritirx的版本

           heritrix.jobsdir = jobs  配置 抓取的文件存放路徑,默認(rèn)存放到 $HERITRIX_HOME/jbos 目錄下。

          heritrix.cmdline.admin = admin:admin   可以在這里寫好登錄的用戶名密碼,也可以在啟動(dòng)的時(shí)候通過命令行指定

          heritrix.cmdline.port = 8080   web ui控制端訪問的端口

          heritrix.cmdline.run = false  如果設(shè)置成trueheritrix在啟動(dòng)時(shí),就會(huì)把所有的job啟動(dòng)。

          heritrix.cmdline.nowui = false  如果設(shè)置成true,會(huì)阻止通過web方式操作爬蟲 控制臺(tái)

          heritrix.cmdline.order =  如果設(shè)置了一個(gè)string的 文件目錄值,將會(huì)使用用戶指定的orderXml文件

          heritrix.cmdline.jmxserver = false

          heritrix.cmdline.jmxserver.port = 8081

          以上配置完成,就可以啟動(dòng)heritrix,并且通過web ui的方式訪問了 http://127.0.0.1:8080/admin。進(jìn)入login頁面輸入在配置文件中配置的用戶名密碼。就可以進(jìn)入控制臺(tái)了。

          第二節(jié)  定制第一個(gè)網(wǎng)頁抓取任務(wù) 

           啟動(dòng)heritrix,通過瀏覽器訪問 http://127.0.0.1:8080/admin, 輸入用戶名密碼,進(jìn)入控制臺(tái)。點(diǎn)擊job 標(biāo)簽頁,點(diǎn)擊 with default 使用默認(rèn)的描述文件創(chuàng)建一個(gè)抓取job,打開的窗口:

          Name of new job :隨便輸入一個(gè)方面自己記憶的名字

          Description:  隨便輸入

          Seeds:  輸入要抓取的種子頁面。例如要抓取 某個(gè)網(wǎng)站的所有產(chǎn)品頁面的詳細(xì)信息,那么種子應(yīng)該是這些產(chǎn)品的列表頁面,也就是說從這個(gè)頁面可以進(jìn)入每個(gè)產(chǎn)品的詳細(xì)頁面。

          填寫完成之后點(diǎn)擊modules,進(jìn)入設(shè)置頁面,可以設(shè)置的項(xiàng)比較多,這里只挑幾個(gè)重點(diǎn)的介紹下:

          Select Crawl Scope

           BroadScope  從字面上理解應(yīng)該是最大范圍的抓取,個(gè)人感覺應(yīng)該是最大深度的爬取網(wǎng)頁

          其他的幾個(gè),筆者沒有用到,暫時(shí)不做介紹了,免得寫的有出入誤導(dǎo)讀者。

          Select URI Frontier 

             

          Url 處理器它將決定下一個(gè)被處理的URL是什么。同時(shí),它還會(huì)將經(jīng)由處理器鏈所解析出來的URL加入到等待處理的隊(duì)列中去。

          BDBFronter  heritrix 默認(rèn)使用的處理器。這個(gè)類的具體邏輯沒有仔細(xì)研究過,因?yàn)楣P者寫了自己的fronter類,來完成處理邏輯,在后面的章節(jié)里面介紹

          這兩個(gè)配置是最核心的配置,后面還有5個(gè)配置,都是可以自己定制的。大致看下就明白是什么意思了,在這里就不贅述了。特別強(qiáng)調(diào)下Select Writers  的配置,主要是用于將所抓取到的信息寫入磁盤。通常寫入磁盤時(shí)有兩種形式,一種是采用壓縮的方式寫入,在這里被稱為Arc方式,另一種則采用鏡象方式寫入。當(dāng)然處理起來,鏡象方式要更為容易一些,因此 用mirror方式存儲(chǔ)。

          關(guān)于module里面配置,如果想了解每個(gè)配置節(jié)點(diǎn)都是什么意思,可以看下官方文檔,里面有有每個(gè)選項(xiàng)的詳細(xì)字典說明

          設(shè)置完module,點(diǎn)擊setting鏈接,進(jìn)入job設(shè)置頁面,這個(gè)頁面的設(shè)置也比較容易理解。這里特殊說下http-headers的配置:

            User-agent  模擬瀏覽器的header,里面請(qǐng)?zhí)顚懣蛻舳蔚臑g覽器的user-agent

             Mozilla/5.0 (compatible; heritrix/1.14.3 +PROJECT_URL_HERE),把PROJECT_URL_HERE 替換成任意一個(gè)帶有http的完整鏈接即可例如:http://192.168.10.123

          From 里面隨便填寫一個(gè)email格式的email地址即可,不必是真實(shí)的email地址。

          其他的配置,都比較容易理解,如果有不清楚的,可以點(diǎn)擊每個(gè)輸入框前面的問號(hào),heritrix會(huì)告訴你這個(gè)輸入框里的值是用來做什么的,應(yīng)該填寫什么值。

          這個(gè)頁面配置完成后,就可以提交job了。提交之后,進(jìn)入到cosole主控制臺(tái)頁面,應(yīng)該可以看到剛才創(chuàng)建的job,點(diǎn)擊start 開始執(zhí)行任務(wù)了。 在控制臺(tái)上可以監(jiān)控到任務(wù)執(zhí)行時(shí),系統(tǒng)的資源消耗情況和任務(wù)執(zhí)行情況,同時(shí)也可以隨時(shí)暫停任務(wù)和終止任務(wù)。

          小結(jié) :       至此一個(gè)簡單的抓取任務(wù),就建立完成可以開始工作了,但是以上的配置使用的都是heritrix的默認(rèn)提供的實(shí)例來完成的,針對(duì)每個(gè)垂直搜索引擎,對(duì)數(shù)據(jù)的抓取,都有特定的約束需求,那么就需要定制自己的實(shí)例來完成抓取任務(wù),下面我們進(jìn)入heritrix的開發(fā)階段,定制自己的web爬蟲。

          第三節(jié) :開發(fā),定制自己的web爬蟲

                
             本人的word的文檔暫時(shí)寫到這里,明天繼續(xù)補(bǔ)充。
          posted on 2009-06-26 02:35 鄧兵野 閱讀(3888) 評(píng)論(2)  編輯  收藏

          FeedBack:
          # re: 基于lucence+heritrix的開源搜索引擎構(gòu)建(一)
          2009-06-30 22:10 | hongyejie@tom.com
          能幫個(gè)忙么?我有段JAVA編寫的爬蟲程序,是老師布置的,讓我們注釋,實(shí)在太難了,我不會(huì)!你能幫我注釋一下嗎!?
          姓名是我的郵箱,希望你能給我郵件!!謝謝!  回復(fù)  更多評(píng)論
            
          # re: 基于lucence+heritrix的開源搜索引擎構(gòu)建(一)[未登錄]
          2009-07-16 17:24 | google
          500塊錢,我?guī)湍銓懀还?nbsp; 回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          <2009年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 旬阳县| 玛曲县| 清水县| 枣阳市| 孝感市| 曲麻莱县| 金华市| 宜昌市| 宁陕县| 新河县| 公主岭市| 永嘉县| 宁安市| 内乡县| 漠河县| 安化县| 南陵县| 兴化市| 荃湾区| 万州区| 翼城县| 安化县| 左权县| 简阳市| 五常市| 冷水江市| 子洲县| 松阳县| 姚安县| 闻喜县| 铁岭县| 昭平县| 江津市| 会宁县| 哈巴河县| 宜黄县| 淮滨县| 兴国县| 博兴县| 绥滨县| 苏尼特左旗|