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