應用已有的開源搜索引警(Nutch應用)
???Nutch作為一款剛剛誕生的開元web搜索引警,提供了除商業搜索引警外的一種新的選擇。個人,企業都可以通過Nutch來構建適合于自己的搜索引警平臺,提供適合自己的搜索服務,而不必完全被動的接受商業搜索引警的各種制約。???Nutch的工作流程可以分為兩個大的部分:抓取部分和搜索部分。抓取程序抓取頁面并把抓取回來的數據進行反向索引,搜索程序則對反向索引進行搜索回答用戶的請求,索引是聯系這兩者的紐帶。
???首先要建立一個空的url數據庫,并且把起始根urls添加到url數據庫中(步驟一),依據url數據庫在新創建的segment中生成fetchlist,存放了待爬行的urls(步驟二),根據fetchlist從Internet進行相關網頁內容的爬行抓取與下載(步驟三),隨后把這些抓取到的內容解析成文本與數據庫(步驟四),從中提取出新的網頁連接url,并對url數據庫進行更新(步驟五),重復步驟一到五直到達到被指定的爬行抓取深度。以上構成了Nutch的整個抓取過程,可以用一個循環來對其進行描述:生成-抓取-更新-循環。
???當抓取過程完成后,對抓取到的網頁進行反向索引,對重復的內容與url進行剔除,然后對多個索引進行合并,為搜索建立統一的索引庫,而后用戶可以通過由tomcat容器提供的Nutch用戶界面提交搜索請求,然后由Lucene對索引庫進行查詢,并返回搜索結果給用戶,完成整個搜索過程。
???Nutch程序采用Java編寫,其運行環境需要一個Tomcat容器。本文運行環境以j2sdk1.4.2-12及tomcat-5.0.28為例。
???試用Nutch進行數據抓取。
???Nutch通過運行網絡爬蟲工具進行網絡內容的抓取,它提供了爬行企業內部網與整個互聯網兩種方式。
???先說爬行企業內部網
???爬行企業內部網適合于針對一小撮web服務器,并且網頁數在百萬以內的情況。它使用crawl命令進行網絡爬行抓取,在進行爬行前,需要對Nutch進行一系列的配置,過程如下:
???首先需要建立一個目錄,并且在此目錄中創建包含起始根urls的文件。我們以爬行sohu網站為例來講述。
???#cd? /usr/local/nutch
???#mkdir? urls
???#touch urls/sohu
???因此文件urls/sohu的內容為:http://www.sohu.com/。依據爬行網站的實際情況,可以繼續在此文件末尾添加其它url或者在url目錄里添加其它包含url的文件。需要注意的是Nutch7.0的版本中不需要創建目錄,直接創建包含起始根url的文件即可。
???接下來,要在config/crawl-urlfilter.txt文件,將中文MY.DOMAIN.NAME部分提環為準爬行的域名,并去掉前面的注釋。因此在本文中進行域名替換后的形式為:
???+^http://([a-z0-9]*\.)*sohu.com/
???文件config/crawl-urlfilter.txt主要用于限定爬行的url形式,其中url的形式使用正則表達式進行描述。
???然后,編輯文件conf/nutch-site.xml,并且包含以下內容:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>http:.agent.name</name>
<value>sohu.com</value>
<description>sohu.com</description>
</property>
</configuration>
???除http.agent.name外,在<configuration></configuration>間還包括http.agent.description,http.agent.url,http.agent.email這三項。
???最后開始爬行抓取。完成對Nutch的配置后,運行crawl命令進行爬行。在本文中爬行腳本為:
#bin/nutch crawl urls -dir sohu -depth 5 -topN 1000
另外,crawl還有一個參數項:threads,他設定并行爬行的進程數。在爬行過程中,可以通過Nutch日志文件查看爬行的進展狀態,爬行完成后結果存放在sohu目錄里。
至此內部網的過程就完成了,爬行整個互聯網將在下篇文章中講解。