在使用nutch和solr进行爬网或索引时从html中删除菜单

时间:2011-04-11 06:06:40

标签: solr design-patterns nutch

我正在使用nutch抓取我们的大型网站,然后使用solr进行索引,结果非常好。但是,整个站点上有几个菜单结构可以索引和破坏查询结果。

这些菜单中的每一个都在DIV中明确定义,<div id="RHBOX"> ... </div> or <div id="calendar"> ...</div>和其他几个菜单。

我需要在某些时候删除这些DIVS中的内容。

我猜测正确的地方是在solr索引期间,但无法解决问题。

模式看起来像(<div id="calendar">).*?(<\/div>),但我无法在<tokenizer class="solr.PatternTokenizerFactory" pattern="(<div id="calendar">).*?(<\/div>)" />中使用该模式,我不确定将它放在schema.xml中的哪个位置。

当我在schema.xml中放置该模式时不解析。

4 个答案:

答案 0 :(得分:1)

我认为你有几个选择:

  1. 扩展Nutch HTML解析器,并添加逻辑以剥离标头。 (可能有更好的地方可以做到这一点,比如当您拥有原始数据但在解析DOM之前)
  2. 让您的网站足够智能,以便在nutch抓取时不会绘制标题。只需检查请求标头中的User-Agent值,这很容易实现。你可能需要做更好的播种爬行,因为标题中的链接不会帮助nutch找到其他页面
  3. 以某种方式让Solr删除nutch数据的标头。我不确定你是怎么做到这一点的,我想这意味着你失去了一些Nutch / Solr的协同效应。
  4. 以某种方式编辑Nutch索引(只是一个lucene索引)。从理论上讲,您可以浏览索引中的所有文档,并修剪每个文档的正确属性。
  5. 我认为最简单的方法是,如果您有一致的绘制标题的方式(即皮肤或常见的包含),则执行#2。那么也许#1和#4。我认为#3会是最难的,但我可能错了。

答案 1 :(得分:1)

SOLR的

Here is a patch,您可以将其放在索引配置中,以忽略您配置的标记的内容。但它只适用于XML,因此,如果您可以整理HTML或者您知道它是XHTML,那么这可以工作,但它不适用于任何随机HTML。

答案 2 :(得分:1)

Nutch 1.12中引入了一项新功能,使用了apache tika解析器,该解析器适用于samppipe算法,用于在解析阶段本身中从html页面中去除页眉和页脚内容。

我们可以在nutch-site.xml中使用以下属性来实现:

<!-- parse-tika plugin properties -->
<property>
  <name>tika.extractor</name>
  <value>boilerpipe</value>
  <description>
  Which text extraction algorithm to use. Valid values are: boilerpipe or none.
  </description>
</property>
<property>
  <name>tika.extractor.boilerpipe.algorithm</name>
  <value>DefaultExtractor</value>
  <description>
  Which Boilerpipe algorithm to use. Valid values are: DefaultExtractor, ArticleExtractor
  or CanolaExtractor.
  </description>
</property>

它为我工作。希望它也适用于其他人...... :)

有关详细概述,您可以参考此票证: https://issues.apache.org/jira/browse/NUTCH-961

答案 3 :(得分:0)

如果你想这样做,我相信你应该用nutch编写一个自定义解析器,这样要索引的数据就不包含数据了。 基本上解析后,文本数据是原始文本,没有任何结构。