好吧,我已经问过这个问题了,但我想我没有按照 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我正在使用 session 3.3 中提到的脚本(修复了它的错误后)。
我有 java、android 和 bash 背景,所以这对我来说有点新鲜。 5 年前我曾经在 Perl 中做过正则表达式,但这一切都被遗忘了。
谢谢!
最佳答案
根据您的评论,我看到您之前抓取过一些内容,这就是您的 Nutch 开始抓取维基百科的原因。
当您使用 Nutch 抓取某些内容时,它会在表中记录一些元数据(如果您使用 Hbase,则它是一个名为网页的表)。当您完成抓取并开始新的抓取时,会扫描该表,如果有一条记录包含元数据显示“可以再次获取该记录,因为下一次获取时间已过”,Nutch 开始获取该 url 以及您的新 url。
所以如果你只想 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 方面可能会遇到一些错误,但这是另一个要讨论的话题。
关于regex - Nutch 正则表达式没有按照我想要的方式爬行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16109633/