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

Is it possible to read crawldb using java code?

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

http://xxx.yy.com/  Version: 7

Status: 1 (db_unfetched)

Fetch time: Sun Dec 08 21:42:34 CST 2013

Modified time: Thu Jan 01 08:00:00 CST 1970

Retries since fetch: 0

Retry interval: 2592000 seconds (30 days)

Score: 1

Signature: null

Metadata:

并且所有 404 网址的状态都是 3。

我认为这些信息都来自crawdb。那么有什么方法可以使用java代码来读取crawldb吗?我还了解到nutch将数据存储在HDFS上,所以我需要使用hadoop工具来读取它们吗?或者有没有更好的方法来实现我的要求?

P.s。我的Nutch版本是1.13,我的运行环境是Ubuntu16.04

Nutch 写在Java,所以是可能的,实际上readdb命令就是这样做的,readdb命令的逻辑在org.apache.nutch.crawl.CrawlDbReader class。你可以看看那里实现你自己的命令。

关于你问题的 Hadoop 部分,Nutch 建立在 Hadoop 之上,这意味着我们使用 Hadoop 库,即使你 运行 在本地使用 Nutch,所以你应该使用 Hadoop 库 (特别是如果你想 运行 你的爬虫在某个时候在集群中)。

如果您只想获得所有 404 的列表,您可以使用 readdb 命令的 -status 选项。

您还可以查看 NUTCH-2229,它添加了对在 readdb 命令上使用 JEXL 表达式的支持,这样您就可以从 CrawlDB 中获取 404 URL 的列表,而无需编写你自己的代码。