从呈现的网页中读取内容到 nodejs

Read content from rendered webpage into nodejs

我想将一个完全渲染的网页的全部内容读入 nodejs 并用这些内容做一些事情。

目前我正在使用 PhantomJS,但它非常不稳定。它每 10-20 页崩溃一次,并且疯狂地泄漏内存。 (仅 15 页后从 300MB 到 2.8GB)

在我们的 Ubuntu 服务器上也是如此 - 它运行 10-20 页然后崩溃。

我可以看到很多其他人对 PhantomJS 有完全相同的问题。

所以我想知道...还有哪些选择?

这里有人知道如何修复 PhamtomJS 或知道另一个简单的稳定组件可以读取呈现的网页并将其放入 nodejs 中的变量吗?

任何帮助将不胜感激 - 我浪费了 100 多个小时试图让 PhantomJS 工作(每个页面的新实例,重新使用相同的实例,使用超时降低速度等等......无论它仍然泄漏并且仍然崩溃)。

过去,当抓取大量网站时,我取消了对 3d 方网站的一些请求,如 Google 地图、Facebook 和 Twitter 小部件、广告分销商等,取得了很好的效果,请参阅 .

但现在我只是建议puppeteer。它是一个本地节点模块,它使用最新的 Chromium 作为浏览器,并且由 Google 工程师不断开发。 API 意识形态基于 PhantomJS。 async/await 在节点 8+ 中的使用提供了最令人满意的抓取体验。

不过 Puppeteer 在硬件上有点重。

考虑获取页面内容的示例:

const puppeteer = require('puppeteer');

puppeteer.launch().then(async browser => {
  const page = await browser.newPage();
  await page.goto('https://angular.io/', {waitUntil : 'networkidle2'});
  const contents = await page.content();
  console.log(contents);
  await browser.close();
});