实时/并行HTTP爬虫的良好库/平台?

时间:2010-08-24 08:07:21

标签: ruby parallel-processing web-crawler node.js eventmachine

我正在构建一个爬虫,它可以实时从多个网站并行获取信息,以响应客户对此信息的请求。我需要从10-20个网站请求特定页面,解析其内容以获取特定的信息片段,并尽快将此信息返回给客户。我想以异步方式执行此操作,因此客户端会在准备好后立即显示第一个结果,而其他请求仍处于待处理状态。

我有Ruby背景,因此更愿意在Ruby中构建解决方案 - 但是,并行性和速度正是Ruby所熟知的并不擅长。我相信像EventMachineTyphoeus这样的库可以解决这个问题,但我也非常强烈地考虑node.js,因为我非常了解javascript并且似乎是为这种事情而构建的。

无论我选择什么,我还需要一种有效的方式将结果传达给客户。我正在考虑普通的AJAX(但这需要轮询服务器),Web套接字(但这需要旧版浏览器的后备)以及用于持久客户端/服务器通信的特定解决方案,例如CrampJuggernautPusher

有没有人有他们想分享的经验和/或建议?

2 个答案:

答案 0 :(得分:1)

节点肯定能够处理这种类型的任务 - 异步套接字和http通信已经完成并且非常适合使用。

我的大部分工作都是j / Ruby,我发现向服务器端JavaScript的过渡非常轻松 - 多年的web开发意味着我非常了解js,服务器开发概念在很大程度上与语言无关。

在通信方面Socket.io是一个优秀的客户端和服务器框架,用于处理节点中的套接字通信 - 它支持flash,ajax和websocket通道,这意味着它可以用于任何现代(和一些旧的)浏览器。

答案 1 :(得分:0)

如果您的抓取工具需要Javascript支持,我建议http://htmlunit.sourceforge.net/ 有一个JRuby包装器http://celerity.rubyforge.org/

功能(取自网站)包括:

  • 快速 - 没有耗时的GUI 渲染或不必要的下载
  • 易于使用 - 简单的API
  • JavaScript支持
  • 可扩展 - Java线程允许您并行运行测试
  • Portable - 感谢JVM的跨平台
  • Unintrusive - 没有浏览器窗口中断您的工作流程(运行于 背景)