我正在使用Nutch抓取网站,我想在抓取过程中收集所有404网址。然后我查了一下Nutch wiki,我发现使用nutch命令'readdb'可以产生类似的东西:
状态:1(db_unfetched)
获取时间:2013年12月8日星期日21:42:34
修改时间:周一01月01日08:00:00 CST 1970
自提取后重试:0
重试间隔:2592000秒(30天)
得分:1
签名:null
元数据:
所有404网址的状态为3.
我认为这些信息都来自于crawldb。那么有没有办法使用java代码读取crawldb?我还了解到nutch在HDFS上存储数据,所以我是否需要使用hadoop工具来读取它们?或者有更好的方法来达到我的要求吗?
P.S。我的Nutch版本是1.13,我的运行环境是Ubuntu16.04
答案 0 :(得分:2)
Nutch是用Java编写的,所以是可能的,实际上readdb
命令正是这样做的,readdb
命令的逻辑在org.apache.nutch.crawl.CrawlDbReader
类中。你可以看看那里实现自己的命令。
关于你的问题的Hadoop部分,Nutch是建立在Hadoop之上的,这意味着我们使用Hadoop库,即使你在本地运行Nutch,所以你应该使用Hadoop库(特别是如果你想在某个时刻在群集中运行您的爬虫)。
如果您只想获取所有404的列表,可以使用-status
命令的readdb
选项。
您还可以查看NUTCH-2229,它增加了对readdb
命令中使用JEXL表达式的支持,这样您就可以从CrawlDB获取404 URL的列表,而无需编写自己的代码。