(五)—Nutch分步抓取

2018-07-31 14:18 更新

如果要深入學(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ù)。

1 Nutch數(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

2 將URL列表注入到crawldb中

bin/nutch inject data/crawldb urls

3 抓取

3.1 生成抓取列表

為了抓取指定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

3.2 開始抓取

根據(jù)generate生成的抓取列表抓取網(wǎng)頁:

bin/nutch fetch data/segments/201507151245  #這里的201507151245為文件夾名,需要根據(jù)自己的情況進(jìn)行更改,或者直接采用data/segments文件夾,這樣的操作對(duì)segments文件夾下的所有子文件夾生效,后文同理。

3.3 解析

bin/nutch parse data/segments/201507151245

3.4 更新數(shù)據(jù)庫

根據(jù)抓取的結(jié)果更新數(shù)據(jù)庫:

bin/nutch updated data/crawldb –dir data/segments/201507151245

現(xiàn)在,數(shù)據(jù)庫里包含所有初始頁面更新后的入口,以及從初始集合中新發(fā)現(xiàn)的頁面的新入口。

3.5 反轉(zhuǎn)鏈接

在建立索引之前,我們首先對(duì)所有的鏈接進(jìn)行反轉(zhuǎn),這樣我們才可以對(duì)頁面的來源錨文本進(jìn)行索引。

bin/nutch invertlinks data/linkdb –dir data/segments/201507151245

3.6 將抓取到的數(shù)據(jù)加入Solr索引

如果還沒有安裝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

3.7 去除重復(fù)URL

一旦建立了全文索引,它必須處理重復(fù)的URL,使得URL是唯一的:

bin/nutch dedup

這個(gè)命令基于簽名查找重復(fù)的URL,對(duì)重復(fù)的URL標(biāo)記為STATUS_DB_DUPLICATE,Cleaning和Indexing任務(wù)將會(huì)根據(jù)標(biāo)記刪除它們。

3.8 清理

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)行搜索了

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)