2

好的,我已经问过了,但我想我并没有按照 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中做正则表达式,但这一切都被遗忘了。

谢谢!

4

2 回答 2

4

根据您的评论,我看到您以前爬过某些东西,这就是您的 Nutch 开始爬取维基百科的原因。

当您使用 Nutch 抓取某些内容时,它会在表中记录一些元数据(如果您使用 Hbase,它是一个名为 pages 的表)当您完成爬网并开始一个新的爬网时,该表会被扫描,如果有一条记录包含元数据,则表示“这条记录可以再次获取,因为下一个获取时间已过” 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 方面可能会遇到一些错误,但这是另一个要讨论的话题。

于 2013-04-23T11:07:03.080 回答
1

您在两个正则表达式的末尾都有一个 / ,但您的 URL 没有。

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

+^http://tigerdirect.com/([a-z0-9]*\.)* 尝试在括号内移动那个拖尾斜线 +^http://tigerdirect.com(/[a-z0-9]*\.)*

于 2013-04-19T17:35:44.943 回答