什么是一些优秀的基于Ruby的Web爬虫?

时间:2011-02-12 23:41:38

标签: ruby web-crawler

我正在编写自己的文章,但我想知道是否有任何用Ruby编写的优秀网页抓取工具。

如果没有一个完整的网络抓取工具,任何可能有助于构建网络抓取工具的宝石都会很有用。我知道这个问题的这一部分在几个地方都有提及,但适用于构建网络爬虫的宝石列表也是一个很好的资源。

5 个答案:

答案 0 :(得分:68)

我曾经为我的工作编写蜘蛛,页面抓取工具和网站分析器,并且还会定期编写它们来解决我得到的一些问题。

Ruby拥有一些优秀的宝石,可以轻松实现:

  • Nokogiri是HTML解析器的第一选择。我曾经使用Hpricot,但发现一些网站让它在火焰中爆炸。之后我转向Nokogiri,并对此非常满意。我经常使用它来解析HTML,RDF / RSS / Atom和XML。 Ox看起来也很有趣,所以这可能是另一个候选者,尽管我发现搜索DOM比尝试遍历大哈希要容易得多,例如Ox返回的内容。
  • OpenURI作为一个简单的HTTP客户端很好,但是当你想要做更复杂的事情或者需要同时触发多个请求时,它可能会受到阻碍。我建议查看HTTPClientTyphoeus with Hydra以获得适度和重量级的工作。 Curb也很好,因为它使用了cURL库,但界面对我来说并不直观。值得关注一下。 HTTPclient也值得一看,但我倾向于前面提到的那些。

    注意:OpenURI有一些缺陷和漏洞可能会影响毫无戒心的程序员,所以它有点不受欢迎。 RestClient是一位非常有价值的继任者。

  • 您需要一个支持数据库,以及与之对话的某种方式。这不是Rails本身的任务,但是可以使用与Rails分离的ActiveRecord与数据库通信。我已经做了几次,它可以正常工作。相反,我真的很喜欢我的ORM Sequel。它非常灵活,可以让您与数据库交谈,从使用直接SQL到使用Sequel以编程方式构建查询,建模数据库和使用迁移的能力。一旦构建了数据库,就可以使用Rails充当数据的前端。
  • 如果您要以任何方式浏览网站,只需抓取网页和关注链接,您就会想看Mechanize。它可以轻松填写​​表单并提交页面。作为额外的奖励,您可以将页面内容作为Nokogiri HTML文档获取,并使用Nokogiri的众多技巧进行解析。
  • 对于按摩/修改网址,我非常喜欢Addressable::URI。它比内置的URI模块功能更全面。 URI做得很好的一件事就是它有URI#extract方法来扫描字符串中的URL。如果该字符串碰巧是网页的主体,那么它将是一种查找链接的替代方式,但它的缺点是你还会获得图像,视频,广告等的链接,你必须过滤那些out,可能导致比使用解析器并专门查找<a>标记更多的工作。就此而言,Mechanize还具有links方法,该方法返回页面中的所有链接,但您仍需要对其进行过滤以确定是要关注还是忽略它们。
  • 如果您认为您需要处理Javascript操作页面或从AJAX动态获取其内容的页面,您应该考虑使用其中一个WATIR变体。不同操作系统上的不同浏览器有各种风格,例如Firewatir,Safariwatir和Operawatir,所以你必须弄清楚什么对你有用。
  • NOT 希望依赖于在内存中保留要访问的URL列表或访问过的URL。设计数据库模式并在那里存储该信息。花一些时间设计模式,考虑在网站上收集链接时您想要了解的内容。 SQLite3,MySQL和Postgres都是很好的选择,取决于您认为数据库需求有多大。我的一个网站分析器是专门为帮助我们推荐财富50强企业的SEO变更而设计的。它运行了三个多星期,覆盖了大约20个不同的站点,然后我们才有足够的数据并停止了它。想象一下,如果我们停电并且所有数据都进入了这个位置,会发生什么。

毕竟,你还要让你的代码知道正确的蜘蛛礼仪:What are the key considerations when creating a web crawler?

答案 1 :(得分:19)

我正在构建wombat,一个Ruby DSL来抓取网页并提取内容。在github上查看https://github.com/felipecsl/wombat

它仍处于早期阶段,但已经具备基本功能。很快就会添加更多东西。

答案 2 :(得分:5)

所以你想要一个好的基于Ruby的web crawler

尝试spideranemone。根据RubyGems下载计数,两者都有可靠的用法。

到目前为止,其他答案是详细有用,但他们没有像激光一样关注这个问题,它要求为web提供ruby库的爬虫即可。看起来这种区别可能会变得混乱:见my answer to "Crawling vs. Web-Scraping?"

答案 3 :(得分:1)

Tin Man的全面list 很好,但对我来说已经过时了。

我的客户处理的大多数网站都依赖于AJAX / Javascript。 我也一直在使用Watir / watir-webdriver / selenium几年,但是在后端加载一个隐藏的Web浏览器来渲染DOM内容的开销是不可行的,更不用说所有这些了他们仍然没有实现一个可用的“浏览器会话重用”,让新代码执行重用内存中的旧浏览器来实现此目的,最终拍下可能最终在API层上运行的票证。 (参考https://code.google.com/p/selenium/issues/detail?id=18)**

https://rubygems.org/gems/phantomjs

是我们正在将新项目迁移到现在,以便在没有任何不可见的Xvfb内存和放大器的情况下渲染必要的数据。 CPU重型网络浏览器。

**替代方法也未能成功:

答案 4 :(得分:0)

如果您不想自己编写,请使用任何普通的网络爬虫。那里有几十个。

如果你想写自己的,那就写自己的。网络爬虫不是一个复杂的活动,它包括:

  1. 下载网站。
  2. 找到该网站中的网址,过滤后请妥协。
  3. 对于该网站中的每个网址,请重复步骤1.
  4. 哦,这似乎与“Web crawler in ruby”重复。