如果要深入學習Nutch爬蟲技術,僅僅會使用crawl命令是不夠的,還需要對抓取的過程非常熟悉。本篇文章講解分布抓取的詳細步驟,這里需要用到上一教程中seed.txt所保存的URL信息,還需刪除data/crawldb,data/linkdb和data/segments文件夾下的內容,因為我們要分步重新抓取數(shù)據(jù)。
上一教程Nutch 1.10入門教程(四)——crawl命令這篇文章講解了一站式抓取命令crawl的用法,然而,實際的抓取過程包含多個命令的,為了簡化操作,crawl把多個命令組合到一起提供給用戶使用的。如果要深入學習Nutch爬蟲技術,僅僅會使用crawl命令是不夠的,還需要對抓取的過程非常熟悉。本篇文章講解分布抓取的詳細步驟,這里需要用到上一教程中seed.txt所保存的URL信息,還需刪除data/crawldb,data/linkdb和data/segments文件夾下的內容,因為我們要分步重新抓取數(shù)據(jù)。
執(zhí)行crawl命令之后,會在Nutch的runtime/local下面生成一個TestCrawl文件夾,里面包含三個文件夾:crawldb、linkdb和segments。
crawldb:它包含Nutch所發(fā)現(xiàn)的所有URL,它包含了URL是否被抓取、何時被抓取的信息。
linkdb:它包含了Nutch所發(fā)現(xiàn)的crawldb中的URL所對應的全部鏈接,以及源URL和錨文本。
segments:里面包含多個以時間命名的segment文件夾,每個segment就是一個抓取單元,包含一系列的URL,每個segment又包含如下文件夾:
crawl_generate:待抓取的URL
crawl_fetch:每個URL的抓取狀態(tài)
content:從每個URL抓取到的原始內容
parse_text:從每個URL解析得到的文本
parse_data:從每個URL解析得到的外鏈和元數(shù)據(jù)
crawl_parse:包含外鏈URL,用來更新crawldb
bin/nutch inject data/crawldb urls
為了抓取指定URL的頁面,我們需要先從數(shù)據(jù)庫(crawldb)里生成一個抓取列表:
bin/nutch generate data/crawldb data/segments
generate命令執(zhí)行之后,會生成一個待抓取頁面的列表,抓取列表存放在一個新建的segment路徑中。segment的文件夾根據(jù)創(chuàng)建的時間進行命名(本教程文件夾名為201507151245)。
generate還有很多可選參數(shù),讀者可以通過以下命令自行查看(其它命令的查看方法也一樣):
bin/nutch generate
根據(jù)generate生成的抓取列表抓取網(wǎng)頁:
bin/nutch fetch data/segments/201507151245 #這里的201507151245為文件夾名,需要根據(jù)自己的情況進行更改,或者直接采用data/segments文件夾,這樣的操作對segments文件夾下的所有子文件夾生效,后文同理。
bin/nutch parse data/segments/201507151245
根據(jù)抓取的結果更新數(shù)據(jù)庫:
bin/nutch updated data/crawldb –dir data/segments/201507151245
現(xiàn)在,數(shù)據(jù)庫里包含所有初始頁面更新后的入口,以及從初始集合中新發(fā)現(xiàn)的頁面的新入口。
在建立索引之前,我們首先對所有的鏈接進行反轉,這樣我們才可以對頁面的來源錨文本進行索引。
bin/nutch invertlinks data/linkdb –dir data/segments/201507151245
如果還沒有安裝Apache Solr,請參考Nutch 1.10入門教程(三)——Solr安裝與配置安裝好Solr服務器,并啟動。
現(xiàn)在,我們對抓取到的資源建立索引:
bin/nutch index data/crawldb -linkdb data/linkdb -params solr.server.url=http://192.168.1.11:8983/solr -dir data/segments/201507151245
一旦建立了全文索引,它必須處理重復的URL,使得URL是唯一的:
bin/nutch dedup
這個命令基于簽名查找重復的URL,對重復的URL標記為STATUS_DB_DUPLICATE,Cleaning和Indexing任務將會根據(jù)標記刪除它們。
bin/nutch clean –D solr.server.url=http://192.168.1.11:8983/solr data/crawldb
從solr移除HTTP301、404以及重復的文檔。
到此為止,我們使用分步抓取的方式完成了所有抓取步驟,正常抓取的情況下,可以在http://192.168.1.11:8983/solr進行搜索了
更多建議: