【问题标题】:100,000 page renders using headless browser, max per cpu per second on aws使用无头浏览器渲染 100,000 个页面,在 aws 上每 cpu 每秒最大
【发布时间】:2017-11-17 15:36:29
【问题描述】:

我正在做一个抓取项目,需要使用浏览器在我访问的网站上加载 javascript。

如果只使用 http,我可以在 m4.large 上到达 150/second。其中有2 cpus。在使用 headless chrome 的初始测试中,它在 4 / second 附近的速度要慢得多,通常瓶颈是 CPU 而不是 RAM。对于许多网页来说,基本的 http 很好,但越来越多的它不适用于单页应用程序等。

有没有人做过类似的事情?你能实现什么?您使用的堆栈是什么,例如python, selenium, headless chrome and multiprocessing。您是否必须更改 chrome 的配置?

【问题讨论】:

  • 您的目标是下载还是执行 javascript?
  • 这是我的知识开始放弃的地方,我基本上只想要 DOM,但对于使用诸如 react 之类的东西的网站,我从基本 http 获得的内容与我使用浏览器加载页面时完全不同或者当我使用基本的 http。我猜下载?
  • 一个简单的 HTTP GET 不是一个“无头浏览器”它只是一个原始文件下载,你的 150/秒数字只是每秒下载 150 个文件,而一个网页实际上可能由很多文件。如果您想抓取实际呈现的网页,因为它会显示在网络浏览器中,那么您必须使用无头浏览器。 http get 几乎不需要服务器资源,并且将与您的网络连接可以处理的一样快。正如您所注意到的,在无头浏览器中渲染会使用大量服务器资源(CPU/RAM),而且会花费更多时间。
  • Mark B,如果我将问题标题更改为“页面呈现”,这是一个更好的问题吗?

标签: python amazon-web-services selenium web-scraping chromium


【解决方案1】:

根据 Chrome 开发工具中的“性能”选项卡,Stack Overflow 上的这个特定页面需要 1.2 秒才能加载到我的机器上:

您可以按 CPU 使用率或挂钟时间来细分它,但关键是它需要一段时间。

在这种情况下,我会在浏览器中加载页面一次以了解访问了哪些资源,然后使用浏览器以外的负载测试工具执行这些资源。

天真地执行这个 curl 命令——首先通过将; 替换为& 来并行化它——在我的机器上需要1.8 秒。但关键是您只想访问服务器,而不是解释任何 HTML、CSS、JavaScript 或图像。

但是,如果您想抓取网络并查看每个页面加载时实际发生的情况,以便您可以查看页面并决定下一步去哪里,那么没有什么可做的除了无头浏览器。真正的生产网络爬虫具有更大的机器预算,并且可能使用巧妙的技术来避免在解码图像和布置 CSS 时浪费 CPU。

【讨论】:

  • Josh 感谢您的回复,“并且可能使用聪明的技术来避免在解码图像和布置 CSS 时浪费 CPU”这就是我想知道的。公平地说“页面渲染”实际上是 91(在您的情况下)http 获取?如果是这样,我想知道是否可以只下载 91 个页面而不是实际执行 javascript 等?
  • “页面渲染”在该示例中将包括 91 个 http 请求。它还包括 javascript 执行、构建 DOM 和渲染所有内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 2011-09-24
相关资源
最近更新 更多