2017-08-29 51 views
2

我正在使用Nutch來抓取一個網站,並且我想收集所有404個網址在抓取過程中。然後,我擡頭一看Nutch的wiki和我發現,使用Nutch的命令 'readdb' 可以產生類似:是否有可能使用java代碼讀取crawldb?

http://xxx.yy.com/版本:7

狀態:1(db_unfetched)

提取時間:孫月08 21點42分34秒CST 2013

修改時間:星期四1月1 8點00分00秒CST 1970

重試因爲取:0

重試間隔:2592000秒(30天)

積分:1個

簽名:空

元數據:

和所有404的URL的狀態爲3.

我認爲這些imformathion都來自crawldb。那麼有沒有辦法使用java代碼來讀取crawldb?我還了解到nutch在HDFS上存儲數據,因此我需要使用hadoop工具來讀取它們嗎?或者有沒有更好的方法來達到我的要求?

P.s.我Nutch的版本是1.13,和我的運行環境是Ubuntu16.04

回答

2

Nutch的是用Java編寫的,所以是有可能,其實readdb命令這樣做完全是,該readdb命令的邏輯是在org.apache.nutch.crawl.CrawlDbReader類。你可以看看那裏來實現你自己的命令。你的問題的Hadoop部分,Nutch是建立在Hadoop的基礎上的,這意味着我們使用Hadoop庫,即使你在本地運行Nutch,所以你應該使用Hadoop庫(尤其是如果你想運行某個時候您的羣集中的抓取工具)。

如果您只想獲取所有404的列表,可以使用readdb命令的-status選項。

你也可以看看NUTCH-2229,它增加了對readdb命令使用JEXL表達式的支持,所以你可以從CrawlDB獲取404個URL的列表,而不需要編寫自己的代碼。

相關問題