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

Jor*_*son 21 ruby web-crawler

我正在寻找自己的写作,但我想知道是否有任何用Ruby编写的好的网络爬虫.

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

the*_*Man 68

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

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

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

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

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

毕竟,您还需要让您的代码了解正确的蜘蛛礼仪:创建网络爬虫时的关键考虑因素是什么?


Fel*_*ima 19

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

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


Dav*_* J. 5

所以你想要一个好的基于Ruby的网络爬虫

尝试蜘蛛海葵.根据RubyGems下载计数,两者都有可靠的用法.

到目前为止,其他答案都是详细有用的,但他们没有像激光一样专注于这个问题,它要求网页抓取工具使用ruby库.看起来这种区别可能会变得混乱:看看我对"爬网与网络刮痧?"的回答.