【问题标题】:Getting all URLs using anemone gem (very large site)使用 anemone gem 获取所有 URL(非常大的站点)
【发布时间】:2013-08-21 20:35:35
【问题描述】:

我要索引的网站相当大,有 1 万页。我真的只是想要一个包含所有 URL 的 json 文件,这样我就可以对它们运行一些操作(排序、分组等)。

基本的海葵循环运行良好:

require 'anemone'

Anemone.crawl("http://www.example.com/") do |anemone|
  anemone.on_every_page do |page|
      puts page.url
  end
end

但是(因为站点大小?)终端在一段时间后冻结了。因此,我安装了MongoDB并使用了以下

require 'rubygems'
require 'anemone'
require 'mongo'
require 'json'


$stdout = File.new('sitemap.json','w')


Anemone.crawl("http://www.mybigexamplesite.com/") do |anemone|
  anemone.storage = Anemone::Storage.MongoDB
  anemone.on_every_page do |page|
      puts page.url
  end
end

它现在正在运行,但是当我早上回来时,如果 json 文件中有输出,我会非常感到惊讶 - 我以前从未使用过 MongoDB 和 anemone 文档的部分关于使用存储还不清楚(至少对我来说)。之前做过这件事的人可以给我一些提示吗?

【问题讨论】:

  • 更新:我今天早上来了,我的输出文件中有大约 1500 个 url,远远少于我想要的 1.x 万个。命令行窗口也出现错误:Serialization Failed: failed to allocate memory in bson_buffer.c
  • 更新 2:使用 JRuby 获得的 URL 数量大约是两倍,3300
  • 更新 3:Spidr gem 做得更好,有 70,000 个 URL 并且还在增加

标签: ruby anemone


【解决方案1】:

如果有人需要 Ruby Gem Spidr 是一个不错的选择。

【讨论】:

    【解决方案2】:

    这可能不是您想要看到的答案,但我强烈建议您不要使用 Anemone 和 Ruby 来抓取一百万页。

    Anemone 不是一个维护的库,在许多边缘情况下都失败了。

    Ruby 是not the fastest language 并使用global interpreter lock,这意味着您不能拥有真正的线程功能。我认为您的爬行可能太慢了。有关线程的更多信息,我建议您可以查看以下链接。

    http://ablogaboutcode.com/2012/02/06/the-ruby-global-interpreter-lock/

    Does ruby have real multithreading?

    您可以尝试将 anemone 与 RubiniusJRuby 一起使用,它们的速度要快得多,但我不确定兼容性的程度。

    我从 Anemone 到 Nutch 取得了一些轻微的成功,但您的里程可能会有所不同。

    【讨论】:

    • 只是转动我的轮子试图让 Nutch 运行 - 必须安装 JDK,现在我被困在 'bin' is not recognized as an internal or external command 上。按照您的建议尝试了 JRuby,但它也因Anemone::Storage::GenericError: Java heap space 而超时(然而,JRuby 在冻结之前似乎确实获得了更多 URL)
    • 嘿 MustacheMcGee,什么触发了错误?您使用的是什么操作系统?
    • 我使用的是 Windows 7(64 位)。我已经关闭了那个命令行窗口,所以我找不到确切的工作...我认为错误消息的其余部分只是 Anemone.rb 文件中的特定行..
    • 如果 spidr 适合您,请将其添加为答案并将此问题标记为已回答!
    • 我会说 Spidr 的工作要好得多,但它在大约 100,000 个 URL 时已经慢了下来。所以这个问题还没有完全解决。如果有人需要
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    相关资源
    最近更新 更多