0

我正在使用 HERITRIX 抓取一个名为 octetfarm.com 的网站。我希望爬虫对 URI(或 URL)执行正则表达式,如果存在字符串“octetfarm”,则爬虫应该接受它。

我制定了两条规则

1 MatchesRegExpDecideRule "ACCEPT" 和正则表达式 " .octetfarm. "

2 拒绝默认

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

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

为什么爬虫不遵循包含字符串“octetfarm”的简单链接。

这是我在 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>
4

1 回答 1

0

您在那里列出的正则表达式不太正确;试试这个:

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

这和你的唯一区别是前面的两个字符octetfarm被颠倒了。

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

如果在看到字符串之前有 0 个或多个任何字符,则此正则表达式的完整效果是匹配octetfarm,然后是 0 个或多个任何字符。

仅当正则表达式引擎尝试匹配完整字符串时,octetfarm用任一侧包装字符串实际上才重要;.*您可能会发现只有以下正则表达式可能对您有用,因为根据正则表达式引擎的设置,它可能只是在提供的文本中查找匹配的任何实例:

<string name="regexp">octetfarm</string>
于 2014-10-01T03:32:04.253 回答