我正在使用基于 webkit 的工具来构建用于抓取网页的无头浏览器(我需要这个,因为我想评估在页面上找到的 javascript 并获取最终呈现的页面)。但是,到目前为止,我实施的两个不同的系统表现出非常差的性能。我已经实现了两个不同的系统,它们都使用 webkit 作为后端:
- 使用 Google Chrome:我将启动 Google Chrome 并使用 Chrome 公开的 webSockets 与每个选项卡进行通信以进行远程调试(通过有线调试)。这样我可以控制每个选项卡,加载一个新页面,一旦页面加载,我就可以获取加载网页的 DOM。
- 使用phantomjs:phantomjs 使用 webkit 加载页面并提供无头浏览选项。正如 phantomjs 示例中所解释的,我使用 page.open 打开一个新 URL,然后在页面加载后通过评估页面上的 javascript 来获取 dom。
我的目标是尽可能快地抓取页面,如果页面在前 10 秒内没有加载,则声明它失败并继续前进。我知道每个页面都需要一段时间才能加载,因此为了增加每秒加载的页面数,我在 Chrome 中打开了许多选项卡或使用 phantomjs 启动多个并行进程。以下是我观察到的表现:
- 如果我在 Chrome / 20 个 phantomjs 实例中打开超过 20 个选项卡,CPU 使用率就会飙升。
- 由于 CPU 使用率很高,很多页面的加载时间超过 10 秒,因此我的失败率更高(大约 80% 的页面加载请求失败)
- 如果我打算将失败保持在总请求数的 5% 以下,我每秒加载的 URL 不能超过 1 个。
在尝试了这两个基于 webkit 的系统之后,感觉性能瓶颈是 webkit 渲染引擎,因此想从这里的其他用户那里了解我每秒可以抓取的 URL 数量。我的硬件配置是:
- 处理器:Intel® Core™ i7-2635QM(1 个处理器,4 个内核)
- 显卡:AMD Radeon HD 6490M (256MB)
- 内存:4GB
- 网络带宽足以加载页面超过我观察到的性能
我想问这个邮件列表的问题是,有没有人有使用 webkit 为一组随机 URL 抓取网页的经验(比如从 twitter 流中选择 10k 个 URL),我可以合理地期望每秒抓取多少个 URL ?
谢谢