【问题标题】:Nutch regex doesn't crawl the way I want it toNutch 正则表达式不会按照我想要的方式爬行
【发布时间】:2013-04-19 16:46:49
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: regex search-engine nutch


    【解决方案1】:

    根据您的 cmets,我看到您以前爬过某些东西,这就是您的 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 方面遇到了一些错误,但这是另一个要讨论的话题。

    【讨论】:

    • 谢谢,让我试试这个正则表达式。我删除了我所有的 solr 数据,所以我知道我没有任何记录。我现在遇到的问题是我找不到抓取tigerdirect 产品页面的方法。产品页面的链接是tigerdirect.com/applications/category/guidedSearch.asp?其次是 CatID 等。
    • Solr 的数据和 Nutch 的数据在不同的地方。 Solr 将数据存储在 solr 主文件夹的数据文件夹下。 Nutch 商店在不同的地方(即 Hbase 的网页表)另一方面,我看到产品的链接可能在不同的页面上。即tigerdirect.com/applications/SearchTools/… 是您想要索引的内容之一吗?
    • 好的,如果我第二次运行 nutch,它是否只是附加到它已经在内部存储的数据?因为当我清除 solr 数据并运行 nutch 时,我只收到上次抓取的数据,而不是之前的数据。至于我想做什么,基本上我想用tigerdirect的索引产品创建一个搜索引擎,所以我想每天爬一次或两次tigerdirect来获取他们所有的产品信息。现在我只是想为他们的页面创建一个索引。接下来我想从每个页面中提取数据(但这不是针对这个问题的),以便以有意义的方式显示它。
    • 当你给一个seed.txt时,Nutch会将它们放入它的表中(Nutch的注入过程)当你用Nutch抓取网站时,它会将所有内容记录在一个表中。当您再次运行 Nutch 时,Nutch 要做的第一件事就是检查该表。开始检查该表中的 URL。如果 URL 的下一个获取时间到了,Nutch 会抓取它。如果不是,我认为它会记录它将跳过该 URL。因此,当您将新的 seed.txt 指向 Nutch 时,您会将新的 URL 注入 Nutch。这就是为什么当 Nutch 开始抓取时您会看到一些其他 URL。
    • @JuanAcevedo 你能做到吗?
    【解决方案2】:

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

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

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

    【讨论】:

    • 嗨,谢谢。然而它没有用。 Nutch 仍然继续爬取维基百科。任何想法为什么?
    • 等等,它爬错了网址?我注意到的一件事是tigerdirect url 不只包含 a-z0-9 。 http://www.tigerdirect.com/applications/category/guidedSearch.asp?CatId=6838&cm_re=Homepage-_-Spot%2023-_-CatId_6838 您还必须考虑大写字母、?、=、&、%、- 和 _。您的正则表达式可能会更好+^http://tigerdirect.com(/[a-zA-Z0-9-_&\?=%]*\.)*(不确定 ? 是否需要使用此正则表达式引擎进行转义)
    • 好的,我想我需要添加其余部分才能抓取我想要的内容,但我什至无法做到这一点。它也仅使用正则表达式抓取了维基百科:+^tigerdirect.com(/[a-z0-9]*\.)*
    • 维基百科的 URL 远没有这么复杂的嵌套。我不明白的是它如何在正则表达式中说tigerdirect,但仍然可以爬取维基百科
    • 好吧,这是我的错误。我不小心留下了“+。”,当我现在删除它时它不会爬取维基百科,但 nutch 也不会爬取任何 tigerdirect.com/applications/category/guidedSearch.asp?关联。如果你能帮我解决这个问题,我可以将你的答案标记为正确。
    猜你喜欢
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多