1. 程式人生 > >nutch工作流程簡介

nutch工作流程簡介

先用一幅圖來形容nutch的工作流程:  先對上圖做一個簡單說明,圖中標的數字為nutch工作的順序。它的基本流程可分為兩部分,即抓取部分和搜尋部分: 一、抓取部分(網路爬蟲) 1.建立初始URL集 2.將URL集註入crawlDB資料庫(inject包) 3. 根據crawldb資料庫建立抓取列表---generate

4.執行抓取,獲取網頁資訊---fetch

5.更新資料庫,把獲取到的頁面資訊存入資料庫中---updatedb

6.重複進行3~5的步驟,直到預先設定的抓取深度。---這個迴圈過程被稱為“產生/抓取/更新”迴圈

7.根據segments的內容更新linkdb資料庫---invertlinks

(注:a.這裡linkDB是用來存放所有超連結及每個連結的連入地址和錨文字的,如下圖所示:

b.,crawlDB是用來存放所有需要抓取的超連結的資訊(存放下載的URL,及下載的日期,用來頁面更新檢查時間)

crawlDB和linkDB 是web link目錄,存放url 及url的互聯關係,作為爬行與重新爬行的依據,頁面預設30天過期。

c.segments是用來存放抓取的頁面,它與連入深度有關(depth),在這個資料夾下面包含留個子目錄,分別是:

content:抓取下來的網頁內容,在網頁抓取時生成

crawl_fetch:每個下載URL的狀態

crawl_generate

最初生成(初始URL集,即我們常說的種子站點)

crawl_parse用來更新crawldb的外鏈

parse_data解析抓取的資料檔案時生成,主要是每個URL解析出的外部連結和元資料(metadata)

parse_text:解析抓取的資料檔案時生成,網頁的文字資訊

其中crawl_generatecrawl_fetchcrawl_parsecrawldb的部分url資料,它們格式一樣,不同的是抓取時間、狀態、簽名等有所變化 。)   

8.建立索引---index

二、搜尋程式工作流程

1.使用者通過使用者介面進行查詢操作

2.將使用者查詢轉化為lucene查詢

3.從索引庫中提取滿足使用者檢索需求的結果集

4.返回結果

詳細介紹:

第一部分流程綜述:

1.)建立初始URL集

建立URL集的方式主要通過兩種:一是通過各個URL間的web連結關係即超連結,二是通過人為的加入即站長提交,因為按照超連結的方式爬蟲不可能爬取網路中所有的站點,所以站長可以向搜尋引擎提出收錄某個站點,搜尋引擎經過核查後加入,

2.)inject操作分析

inject操作呼叫的是nutch的核心包之一crawl包中的類org.apache.nutch.crawl.Injector。它執行的結果是:crawldb資料庫內容得到更新,包括URL及其狀態。

注入抓取URL。因為Nutch的抓取程式要抓取網頁,而定位到某個(或者某些)網頁需要指定一個URL,在此基礎上,Nutch按照廣度遍歷策略進行抓取,會根據一開始指定的URL(可以是一個URL集合:URLs),以此為基礎進行抓取工作。它主要實現以下幾個功能:

a.將URL集合進行格式化和過濾,消除其中的非法URL,並設定URL狀態(UNFETCHED),按照一定方法進行初始化分值;

b.將URL進行合併,消除重複的URL入口

c.將URL及其狀態、分值存入crawldb資料庫,與原資料庫中重複的則刪除舊的,更換新的

3.)generate 操作分析

generate操作呼叫的是crawl包中的類org.apache.nutch.crawl.Generator。它執行的結果是:建立了抓取 列表,存放於segments目錄下,以時間為資料夾名稱。迴圈抓取多少次,segments資料夾下就會有多少個以時間為名稱的資料夾。它主要實現以下幾個功能:

a. 從crawldb資料庫中將URL取出並進行過濾;

b.對URL進行排序,通過域名、連結數和一種hash演算法綜合進行降序排列;

c.將排列列表寫入segments目錄中。

4.)fetch操作分析

fetch操作呼叫的是fetcher包中的類org.apache.nutch.fetcher.Fetcher。它執行的結果是:將頁面內容抓取下來,存於segment目錄下。它的主要功能如下:

a.執行抓取,按照segments目錄下的抓取列表進行;

b.抓取過程中,頁面的URL地址可能因為連結發生改變,從而需要更新URL地址;

c.抓取採用多執行緒方式進行,以提高抓取速度;

d.fetch操作過程中呼叫了parse操作。

5.)parse 解析操作

parse操作呼叫的是parse包中的類org.apache.nutch.parse.ParseSegment。它執行的結果是:將fetch得到的頁面解析為parse.text和parse.data,存於segments目錄下。

通過content parser解析器,最終獲取到的就是文字內容和其它一些可能需要用到的資料。有了這些可以識別的文字內容和資料,就可以基於此來建立索引庫,而且需要將本次抓取任務的詳細資訊登入到crawlDB,為下次抓取任務提供有用的資訊(比如:避免重複抓取相同的URL指定的頁面)。

因此接下來分為兩個方向:一個是索引,一個是更新crawlDB並繼續執行抓取任務:

indexing

這是一個索引的過程,對分析處理完成並提交的文字及其資料建立索引,通過索引檔案就可以實現資訊的檢索功能了。建立索引過程中,由於是基於Lucene的,所以用到了Analyzer分析器,對預處理的檔案進行分析、過濾、分詞等等,最後將寫入到索引庫,供搜尋程式工作使用。

update crawlDB with new extracted urls

根據網頁分析處理獲取到的資訊,更新crawlDB(爬行資料庫),並根據提取到的抓取任務已經注入的URLs迴圈執行抓取任務。

第二部分流程綜述:

這部分比較簡單了,就是啟動WEB伺服器,為使用者提供檢索服務。

這裡,使用者可以直接通過輸入檢索關鍵字,使用Lucene對使用者檢索關鍵字進行處理呼叫Nutch的搜尋程式,基於索引庫中儲存的資訊,來提取滿足使用者檢索需求的資訊。

http://www.jtben.com/document/963801