我正在使用HERITRIX爬行一个名为octetfarm.com的站点。我希望爬虫在URI (或URL)上执行regexp,如果字符串"octetfarm“存在,爬虫应该接受它。
我制定了两条规则
1 MatchesRegExpDecideRule“接受”和regexp“.octetfarm”。
2个rejectByDefault
当我在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>发布于 2014-10-01 03:32:04
您列出的正则表达式不太正确,请尝试如下:
<string name="regexp">.*octetfarm.*</string>这与您的唯一不同之处在于,octetfarm前面的两个字符被反转了。
regex中的.*是由两部分组成的语句。.告诉regex匹配任何字符(通常默认情况下不包含换行符),而*告诉regex匹配它前面的任何字符中的0或更多。
这个正则表达式的效果是在看到字符串octetfarm之前匹配任何字符中的0或多个字符,后面是任何字符的0或多个字符。
只有当regex引擎试图匹配完整的字符串时,将字符串octetfarm用.*包装实际上是很重要的;您可能会发现,下面的正则表达式可能对您有用,因为根据regex引擎的设置,它可能只需要在所提供的文本中查找它找到匹配的任何实例:
<string name="regexp">octetfarm</string>https://stackoverflow.com/questions/26133484
复制相似问题