是否可以使用java代码读取crawldb?

时间:2017-08-29 14:54:11

标签: java hadoop nutch

我正在使用Nutch抓取网站,我想在抓取过程中收集所有404网址。然后我查了一下Nutch wiki,我发现使用nutch命令'readdb'可以产生类似的东西:

  

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

     

状态: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

1 个答案:

答案 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的列表,而无需编写自己的代码。