Nutch正则表达式不会按照我想要的方式爬行

时间:2013-04-19 16:46:50

标签: regex search-engine nutch

好的,我已经问了这个,但我想我没有问过stackoverflow预期的方式。希望这次能得到更多的运气和答案。

我正在尝试运行nutch来抓取此网站:http://www.tigerdirect.com/

我希望它抓取该网站和所有子链接。

问题是它不起作用。在我的reg-ex文件中,我尝试了几个方面,但没有一个工作:

+^http://([a-z0-9]*\.)*tigerdirect.com/

+^http://tigerdirect.com/([a-z0-9]*\.)*

我的urls.txt是:

http://tigerdirect.com

基本上我想要完成的是抓取他们网站上的所有产品页面,这样我就可以创建一个搜索引擎(我使用solr)的电子产品。最终我想抓住bestbuy.com,newegg.com和其他网站。

顺便说一句,我从这里开始遵循教程:http://wiki.apache.org/nutch/NutchTutorial我正在使用会话3.3中提到的脚本(修复了它之后的错误)。

我有java和android和bash的背景,所以这对我来说有点新鲜。我曾经在5年前用perl做正则表达式,但这一切都被遗忘了。

谢谢!

2 个答案:

答案 0 :(得分:4)

根据您的评论,我发现您之前已抓过一些内容,这就是您的Nutch开始抓取维基百科的原因。

当您使用Nutch抓取内容时,它会在表中记录一些元数据(如果您使用Hbase,则它是一个名为网页的表)当您完成爬网并启动一个新表时,该表将被扫描并且是否有记录一个metada说“这个记录可以再次获取,因为接下来的获取时间已经过去了”Nutch开始获取那些网址以及你的新网址。

因此,如果您想在系统中抓取http://www.tigerdirect.com/,则必须先清理该表。如果你使用Hbase启动shell:

./bin/hbase shell

并禁用表格:

disable 'webpage'

最后放弃它:

drop 'webpage'

我可以截断该表但删除它。

接下来就是将它放入你的seed.txt:

http://www.tigerdirect.com/

打开位于以下位置的regex-urlfilter.txt:

nutch/runtime/local/conf

将该行写入其中:

+^http://([a-z0-9]*\.)*www.tigerdirect.com/([a-z0-9]*\.)*

您将放置该行而不是+.

我已经表示要抓取tigerdirect的子域名,这取决于你。

之后,您可以将其发送到solr索引并对其进行搜索。我已经尝试过并且可以正常工作,但是你可能会在Nutch方面遇到一些错误,但这是另一个需要讨论的话题。

答案 1 :(得分:1)

你的两个正则表达式都有一个/,但你的网址没有。

http://tigerdirect.com/将匹配,http://tigerdirect.com不会。

+^http://tigerdirect.com/([a-z0-9]*\.)* 尝试在parens内移动尾部斜线 +^http://tigerdirect.com(/[a-z0-9]*\.)*