将已呈现网页中的内容读入nodejs

时间:2018-06-10 10:21:14

标签: node.js phantomjs

我想将完全呈现的网页的全部内容读入nodejs,并对内容做一些事情。

目前我正在使用PhantomJS,但它太不稳定了。它每10-20页崩溃一次,就像疯了一样泄漏内存。 (仅15页后从300MB到2.8GB)

enter image description here

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

我可以看到很多其他人与PhantomJS存在完全相同的问题。

所以我想知道......有什么选择?

这里的任何人都知道如何修复PhamtomJS或者知道另一个简单的稳定组件,它可以读取渲染的网页并将其放入nodejs中的变量中?

任何帮助都会受到很多赞赏 - 我浪费了100多个小时试图让PhantomJS工作(每个页面的新实例,重新使用相同的实例,使用超时等降低速度等等......无论它是什么仍然泄漏,仍然崩溃)。

1 个答案:

答案 0 :(得分:1)

在过去抓取重型网站时,我取得了很好的效果,取消了对3D派对网站的一些要求,例如Google地图,Facebook和Twitter小工具,广告经销商等,请参阅here in more detail

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

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();
});