How to Use Nutch From Java, Not From the Command Line

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Apache Nutch 是一个用 Java 编写的开源框架。它的目的是帮助我们抓取一组网站(或整个互联网)的内容,并为 Solr(例如)进行索引准备。如果你问我,这是一个非常有用的框架,然而它主要是设计用于命令行。你需要下载压缩包,解压后运行二进制文件。它会进行抓取并获取数据。然而,我有一个项目需要将这个抓取过程嵌入到我的 Java 应用程序中。我意识到在这方面完全没有任何文档。因此,写了这篇博文。它解释了如何使用 Nutch 在 Java 中,而不是在命令行中。

我将讨论 Nutch 1.15 版本。还有一个更新的 2+ 版本,但我没能使其正常工作。如果你知道如何操作,请在下方留言。

我建议你先阅读这篇教程,以了解如何在命令行中使用 Nutch 的工作原理。对我来说,这真的很有帮助。

现在,让我们看看如何在没有命令行的情况下使用 Nutch。首先,你需要在 pom.xml 中添加以下依赖项(Nutch 使用 Apache Hadoop,所以我们需要第二个依赖项):

接下来,这是你的Java代码,它会完成所有的工作:

请注意,这里的 Path 不是来自 JDK 的 Path。它是来自 Hadoop 的 Path。不要问我为什么。

这似乎是一个相当简单的算法,然而有一个棘手的部分。为了正常运行,Nutch 需要一些插件,它们是独立的 JAR 包,不包含在默认的 JAR 中。它们存在于其二进制分发中,它们非常庞大(在 Nutch 1.15 中超过 250MB)。Nutch 希望您下载整个分发包,解压并运行提供的二进制 nutch,它将与提供的插件一起工作。

既然我们现在是在 Java 中,而不是在命令行中,我们能做些什么呢?这是我建议的做法:

这个Maven插件将下载Nutch的整个二进制分发版本,并将其解压缩到target/apache-nutch-1.15。插件将位于target/apache-nutch-1.15/plugins。我们仍然需要做的唯一一件事是为单元测试设置系统属性。

实际上,我们还需要做一件事:将二进制分发版本中的conf目录的内容复制到我们的src/main/resources目录中。其中有许多文件,包括最重要的nutch-default.xml文件。所有这些文件都必须在类路径上可用,否则Nutch将在许多地方发出警告,并且无法加载Configuration

您可以在我创建的GitHub存储库中查看它们是如何一起工作的,以说明这个示例:yegor256/nutch-in-java

如果您有任何问题或建议,请随时提交拉取请求或在此处评论。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-15 at 06:39

sixnines availability badge   GitHub stars