首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有哪些好的基于Ruby的网络爬虫?

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

Stack Overflow用户
提问于 2011-02-13 07:41:38
回答 5查看 21.5K关注 0票数 21

我正在考虑写我自己的,但我想知道是否有好的网络爬虫在那里是用Ruby编写的。

除了一个成熟的网络爬虫,任何可能有助于构建网络爬虫的gem都将是有用的。我知道这个问题的这一部分在几个地方被涉及到了,但是一个适用于构建网络爬虫的宝石列表也是一个很好的资源。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-06 16:08:30

我正在构建袋熊,一个用于抓取网页和提取内容的Ruby DSL。在github https://github.com/felipecsl/wombat上查看它

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

票数 19
EN

Stack Overflow用户

发布于 2011-02-13 08:25:54

我过去常常为我的工作编写爬虫,页面抓取器和站点分析器,并且仍然定期编写它们来满足我的一些需要。

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

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

  • OpenURI作为一个简单的超文本传输协议客户端是很好的,但是当你想要做更复杂的事情或者需要同时触发多个请求时,它可能会成为障碍。对于中等到重量级的工作,我推荐使用HTTPClientTyphoeus with HydraCurb也很好,因为它使用了cURL库,但是界面对我来说不是很直观。不过,它还是值得一看。HTTPclient也值得一看,但我倾向于前面提到的那些。

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

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

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

用于处理URL的

  • 我真的很喜欢Addressable::URI。它比内置的URI模块功能更全。URI做的一件很好的事情是它有URI#extract方法来扫描字符串中的URL。如果字符串恰好是网页的正文,这将是另一种定位链接的方法,但它的缺点是,您还将获得指向图像、视频、广告等的链接,并且您必须过滤掉这些链接,这可能会导致比使用解析器专门查找<a>标记的工作更多。就此而言,Mechanize也有返回页面中所有链接的links方法,但您仍然需要对它们进行过滤,以确定是要跟踪还是忽略它们。

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

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

在这之后,您还需要让您的代码意识到适当的爬行规范:What are the key considerations when creating a web crawler?

票数 74
EN

Stack Overflow用户

发布于 2012-06-22 01:12:10

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

尝试使用spideranemone。根据RubyGems下载量,这两款应用的使用率都很高。

到目前为止,其他答案都很详细,也很有帮助,但他们并没有像激光一样专注于这个问题,这个问题要求为web 爬虫提供ruby库。看起来这种区别可能会变得混乱:请参阅my answer to "Crawling vs. Web-Scraping?"

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4981379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档