2

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

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

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

有没有人想分享任何经验和/或建议?

4

2 回答 2

1

node 绝对有能力处理这种类型的任务——异步套接字和 http 通信已经融入其中,使用起来非常愉快。

我的大部分工作都是 j/Ruby,而且我发现向服务器端 JavaScript 的过渡非常轻松——多年的 Web 开发意味着我对 js 非常了解,并且无论使用哪种语言,服务器开发概念都基本相同。

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

于 2010-08-24T11:34:34.387 回答
0

如果你的爬虫需要 Javascript 支持,我推荐http://htmlunit.sourceforge.net/
有一个可用的 JRuby 包装器http://celerity.rubyforge.org/

功能(取自网站)包括:

  • 快速 - 无需耗时的 GUI 渲染或不必要的下载
  • 易于使用 - 简单的 API
  • JavaScript 支持
  • 可扩展 - Java 线程让您可以并行运行测试
  • 可移植 - 得益于 JVM 的跨平台
  • Unintrusive - 没有浏览器窗口中断您的工作流程(在后台运行)
于 2010-08-26T17:16:20.310 回答