哪些是好的基于Ruby的网络爬虫?

哪些是好的基于Ruby的网络爬虫?,ruby,web-crawler,Ruby,Web Crawler,我想写我自己的,但我想知道是否有任何好的网络爬虫是用Ruby写的 如果没有一个成熟的网络爬虫,那么任何有助于构建网络爬虫的宝石都是有用的。我知道这个问题的这一部分在几个地方都有涉及,但是一个适用于构建网络爬虫的宝石列表也是一个很好的资源。如果你不想自己写,那么就使用任何普通的网络爬虫。外面有几十个 如果你真的想写你自己的,那就写你自己的。网络爬虫并不完全是一项复杂的活动,它包括: 下载网站 在那个网站上定位网址,不管你怎么想都可以 对于该网站中的每个URL,重复步骤1 哦,这似乎是“.”的翻版。

我想写我自己的,但我想知道是否有任何好的网络爬虫是用Ruby写的


如果没有一个成熟的网络爬虫,那么任何有助于构建网络爬虫的宝石都是有用的。我知道这个问题的这一部分在几个地方都有涉及,但是一个适用于构建网络爬虫的宝石列表也是一个很好的资源。

如果你不想自己写,那么就使用任何普通的网络爬虫。外面有几十个

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

  • 下载网站
  • 在那个网站上定位网址,不管你怎么想都可以
  • 对于该网站中的每个URL,重复步骤1

  • 哦,这似乎是“.”的翻版。

    我过去常常为我的工作编写爬行器、页面刮取器和站点分析器,但现在仍然定期编写它们来解决我的一些问题

    Ruby有一些很好的宝石可以让它变得简单:

    • 是HTML解析器的首选。我曾经使用Hpricot,但发现一些网站使它在火焰中爆炸。后来我转投了Nokogiri,对此我非常满意。我经常使用它来解析HTML、RDF/RSS/Atom和XML。看起来也很有趣,所以这可能是另一个候选者,尽管我发现搜索DOM要比遍历一个大的散列(比如Ox返回的内容)容易得多

    • 作为一个简单的HTTP客户端很好,但是当您想做更复杂的事情或者需要同时触发多个请求时,它可能会妨碍您。我建议找一些中等到重量级的工作。也很好,因为它使用了cURL库,但是界面对我来说不是那么直观。不过值得一看。也值得一看,但我倾向于前面提到的那些

      注意:OpenURI有一些缺陷和漏洞,可能会影响毫无戒心的程序员,所以它在某种程度上失宠了。他是一位非常有价值的继任者

    • 您将需要一个备份数据库,以及一些与之对话的方法。这不是Rails本身的任务,但您可以使用与Rails分离的ActiveRecord与数据库通信。我做过几次,效果不错。相反,我真的很喜欢我的ORM。它在让您与数据库对话的方式上非常灵活,从使用直接SQL到使用Sequel以编程方式构建查询的能力,再到对数据库建模和使用迁移。一旦构建了数据库,就可以使用Rails作为数据的前端

    • 如果你打算以任何方式浏览网站,而不仅仅是简单地抓取页面和跟随链接,你会想看看。它使填写表格和提交页面变得容易。作为额外的好处,您可以将页面内容作为Nokogiri HTML文档抓取,并使用Nokogiri的多种技巧进行解析

    • 我非常喜欢按摩/弄乱URL。它比内置的URI模块功能更全面。URI做的一件很好的事情是它有一个方法来扫描字符串中的URL。如果该字符串恰好是网页的主体,那么它将是定位链接的另一种方式,但它的缺点是,您还将获得指向图像、视频、广告等的链接,并且您必须过滤掉这些链接,这可能比使用解析器并查找返回页面中所有链接的
      方法需要更多的工作,但您仍然需要对它们进行过滤,以确定是否要遵循或忽略它们

    • 如果您认为需要处理Javascript操纵的页面,或者从AJAX动态获取内容的页面,那么应该考虑使用其中一种变体。在不同的操作系统上,不同的浏览器有不同的风格,比如Firewatir、Safariwatir和Operawatir,所以你必须弄清楚什么适合你

    • 您不希望依赖于将要访问的URL列表或已访问的URL保存在内存中。设计一个数据库模式并将该信息存储在那里。花些时间提前设计模式,考虑在网站上收集链接时需要了解哪些内容。SQLite3、MySQL和Postgres都是很好的选择,这取决于您认为您的数据库需要多大。我的一个站点分析器是定制的,旨在帮助我们为一家财富50强公司推荐SEO变更。它运行了三个多星期,覆盖了大约二十个不同的站点,直到我们有足够的数据并停止它。想象一下,如果我们停电,所有的数据都进入了比特桶,会发生什么


    毕竟,您还需要让代码了解正确的爬行礼仪:

    我正在构建wombat,一种用于抓取网页和提取内容的Ruby DSL。在github上查看它


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

    那么你想要一个好的基于Ruby的

    试试看。根据RubyGems下载数量,两者都有可靠的使用

    到目前为止,其他的答案都很详细,也很有帮助,但是他们没有像激光一样关注这个问题,这个问题要求为web爬虫提供ruby库。这种区别似乎会被混淆:看

    Tin Man的《综合》不错,但对我来说有些过时

    我的客户处理的大多数网站都严重依赖AJAX/Javascript。 我使用Watir/Watir webdriver/selenium也有几年了,但是在后端加载隐藏的web浏览器来呈现DOM内容的开销是不可行的,更不用说他们一直没有实现可用的“浏览器会话重用”为了让新的代码执行可以重用内存中的旧浏览器,最终可能会在API层上运行的代码会被删除。(参考