如何通过 Apache Nutch 对特定主题进行网络爬虫?

How to conduct a web crawl for specific topic via Apache Nutch?

我是这个领域的新手,作为一名学生,我们必须为特定主题创建一个门户网站。作为第一步,我们必须抓取网络(或部分网络),以便我们可以在索引和排名之前收集该主题的链接,最终目的是将它们作为我们门户的数据库。

问题是我想不出正确的方法。假设我们门户的主题是 "health insurance"。

  1. 我必须遵循哪些步骤作为方法和我需要的工具?
  2. 有没有办法针对特定内容引导nutc​​h?
  3. 我是否应该在我的 seeds.txt 中添加大量链接来解析大量链接,然后过滤内容?

您可以描述高级步骤,我会研究如何实施。

简介

您要构建的是所谓的focused crawlertopical crawler,它只收集数据,它在您感兴趣的特定领域。

关于如何开发这样的系统有很多不同的(科学的)方法。它通常涉及统计方法或机器学习来估计某个网页与您的主题的相似度。接下来,种子点的选择对于这种方法至关重要。我建议使用搜索引擎为您感兴趣的领域收集高质量的种子。作为替代方案,您可以使用 Web 目录中的预分类 URL,例如 curlie.org.

a journal paper by Kumar et al..

关于此主题的一篇很好的文献综述以及对不同方法的一些深入解释

过程简述

简而言之,实现这样一个系统的过程是:

  1. 建立一个相关性模型,它可以决定给定的网页是否属于您感兴趣的领域/主题(例如文本分类器)。
  2. 评估您的特定领域相关性模型。如果您不满意,请返回(1)
  3. 将您的高质量种子点输入系统并开始抓取

建筑

大致一般(重点)爬虫架构(在单个server/pc上)看起来像这样:

免责声明:图片是我自己的作品。请参考此 post.

以尊重这一点

Apache Nutch

遗憾的是,Apache Nutch 默认情况下无法执行此操作。您必须将附加逻辑实现为插件。 anthelion 对如何做到这一点的启发可能是 Nutch 的一个专注的爬虫插件。但是,它不再主动维护了。

默认情况下,Nutch 只关心接下来要抓取哪些 link(在当前或下一个抓取周期中)。 "next URL" 的概念在 Nutch 中由评分插件控制。

由于 NUTCH-2039 被合并,Nutch 现在支持 "relevance based scoring"。这意味着您可以定义一个黄金标准(您的理想页面)并让爬虫根据新 link 与您的理想情况的相似程度对每个潜在 URL 进行爬网评分。这(在某种程度上)提供了一个基于主题的爬虫。

你可以看看 https://cwiki.apache.org/confluence/display/nutch/SimilarityScoringFilter 看看如何 enable/configure 这个插件。

Nutch 带有内置的 NaiveBayesParseFilter。您必须在 nutch-site.xml 中添加以下 属性 并创建一个培训文件,如下所述。 根据我的经验,即使有少量火车文件,它也能表现出色。当然是越多越好

<property>
<name>plugin.includes</name>
<value>parsefilter-naivebayes</value>
</property>
<property>
  <name>parsefilter.naivebayes.trainfile</name>
  <value></value>
  <description>Set the name of the file to be used for Naive Bayes training. The format will be:
Each line contains two tab seperated parts
There are two columns/parts:
1. "1" or "0", "1" for relevant and "0" for irrelevant document.
3. Text (text that will be used for training)

Each row will be considered a new "document" for the classifier.
CAUTION: Set the parser.timeout to -1 or a bigger value than 30, when using this classifier.

  </description>
</property>