我使用HERITRIX抓取名为octetfarm.com的网站。我希望爬虫在URI(或URL)上执行regexp,如果字符串" octetfarm"存在,爬虫应该接受它。
我制定了2条规则
当我在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>
答案 0 :(得分:0)
你在那里列出的正则表达式并不是很正确;试试这个:
<string name="regexp">.*octetfarm.*</string>
此与您之间的唯一区别是直接在octetfarm
之前的两个字符已被颠倒。
.*
是一个包含两部分的声明。 .
告诉正则表达式匹配任何字符(通常默认情况下不包括换行符),*
告诉正则表达式匹配0或更多直接在它之前的字符。
如果在查看字符串octetfarm
之前有任何字符中有0个或更多个字符,那么此正则表达式的完全效果将匹配,然后是0或更多任何字符。
如果正则表达式引擎尝试匹配整个字符串,那么将octetfarm
字符串包裹在.*
的任何一方实际上是非常重要的。您可能会发现只有正则表达式可能适用于您,因为根据正则表达式引擎的设置,它可能只查找提供的文本中找到匹配项的任何实例:
<string name="regexp">octetfarm</string>