我正在使用Nutch来爬网网站,并且我想在爬网过程中收集所有404 URL。然后我查看了Nutch Wiki,发现使用nutch命令“readdb”会产生类似以下内容:
并且所有404 URL的状态均为3。
我认为这些信息都来自crawldb。那么,有什么方法可以使用Java代码读取crawldb?我还了解到,nutch将数据存储在HDFS上,所以我需要使用hadoop工具来读取它们吗?还是有更好的方法来满足我的要求?
P.s.我的Nutch版本是1.13,运行环境是Ubuntu16.04
最佳答案
Nutch用Java编写,因此可以,实际上readdb
命令正是这样做的,readdb
命令的逻辑在org.apache.nutch.crawl.CrawlDbReader
类中。您可以在那里查看实现自己的命令。
关于您问题的Hadoop部分,Nutch建立在Hadoop之上,这意味着即使您在本地运行Nutch,我们也使用Hadoop库,因此您应该使用Hadoop库(尤其是如果您想在集群)。
如果只想获取所有404的列表,则可以使用-status
命令的readdb
选项。
您还可以看看NUTCH-2229,它在readdb
命令上增加了对使用JEXL表达式的支持,因此您可以从CrawlDB中获取404 URL列表,而无需编写自己的代码。