【发布时间】:2012-04-15 05:13:23
【问题描述】:
我正在计划一个供我自己在内部使用的网络服务,它接受一个参数,一个 URL,并从该 URL 返回表示 已解析 DOM 的 html。通过已解决,我的意思是 web 服务将首先获取该 URL 处的页面,然后使用 PhantomJS 来“渲染”页面,然后在执行所有 DHTML、AJAX 调用等之后返回结果源。然而,基于每个请求(我现在正在这样做)启动幻象是方式太慢了。我宁愿拥有一个 PhantomJS 实例池,其中一个始终可以为我的 web 服务的最新调用提供服务。
以前有没有在这种事情上做过任何工作?我宁愿这个 web 服务建立在别人的工作之上,也不愿从头开始为自己编写一个池管理器/http 代理服务器。
更多上下文:我在下面列出了到目前为止我看到的 2 个类似项目以及为什么我避开了每个项目,从而导致了这个关于管理 PhantomJS 实例池的问题.
jsdom - 据我所见,它具有在页面上执行脚本的强大功能,但它不会尝试复制浏览器行为,所以如果我将它用作通用“DOM 解析器”最终需要大量额外的代码来处理各种边缘情况、事件调用等。我看到的第一个示例是必须为我使用 node.js 设置的测试应用程序手动调用 body 标签的 onload() 函数。这似乎是一个深兔子洞的开始。
Selenium - 它只是有更多的移动部件,因此设置一个池来管理长期存在的浏览器实例将比使用 PhantomJS 更复杂。我不需要它的任何宏录制/脚本优势。我只想要一个在获取网页和解析它的 DOM 方面同样高效的网络服务,就好像我正在使用浏览器浏览该 URL 一样(或者如果我可以让它忽略图像等甚至更快)
【问题讨论】:
标签: node.js web-scraping phantomjs jsdom