Heritrix DecidingScope正则表达式URI

时间:2014-10-01 03:05:41

标签: regex heritrix

我使用HERITRIX抓取名为octetfarm.com的网站。我希望爬虫在URI(或URL)上执行regexp,如果字符串" octetfarm"存在,爬虫应该接受它。

我制定了2条规则

1 MatchesRegExpDecideRule" ACCEPT"和regexp" .octetfarm。"

2 rejectByDefault

当我在octetfarm.com(我非常简单的测试网站)上启动爬虫时,第一页只是一个链接,如下所示:

<a href="http://octetfarm.com/layer1/layer1.html">layer1</a>

为什么抓取工具不会遵循包含字符串&#34; octetfarm&#34;的简单链接。

这是我在xml中的规则

 <newObject name="decide-rules" class="org.archive.crawler.deciderules.DecideRuleSequence">
    <map name="rules">
      <newObject name="rejectByDefault" class="org.archive.crawler.deciderules.RejectDecideRule">
      </newObject>
      <newObject name="octetfarm" class="org.archive.crawler.deciderules.MatchesRegExpDecideRule">
        <string name="decision">ACCEPT</string>
        <string name="regexp">*.octetfarm.*</string>
      </newObject>
    </map>
  </newObject>

1 个答案:

答案 0 :(得分:0)

你在那里列出的正则表达式并不是很正确;试试这个:

<string name="regexp">.*octetfarm.*</string>

此与您之间的唯一区别是直接在octetfarm之前的两个字符已被颠倒。

正则表达式中的

.*是一个包含两部分的声明。 .告诉正则表达式匹配任何字符(通常默认情况下不包括换行符),*告诉正则表达式匹配0或更多直接在它之前的字符。

如果在查看字符串octetfarm之前有任何字符中有0个或更多个字符,那么此正则表达式的完全效果将匹配,然后是0或更多任何字符。

如果正则表达式引擎尝试匹配整个字符串,那么将octetfarm字符串包裹在.*的任何一方实际上是非常重要的。您可能会发现只有正则表达式可能适用于您,因为根据正则表达式引擎的设置,它可能只查找提供的文本中找到匹配项的任何实例:

<string name="regexp">octetfarm</string>