我想将完全渲染的网页的全部内容读入nodejs,并对内容进行一些处理。
目前,我正在使用PhantomJS,但它是如此不稳定。它每10-20页崩溃一次,并且疯狂地泄漏内存。 (仅15页后,从300MB到2.8GB)
在我们的Ubuntu服务器上也是如此-它运行10-20页,然后崩溃。
我可以看到很多其他人对PhantomJS也有完全相同的问题。
所以我想知道...还有哪些选择?
这里的任何人都知道如何修复PhamtomJS或知道另一个简单的稳定组件,该组件可以读取渲染的网页并将其放入nodejs中的变量中?
任何帮助将不胜感激-我浪费了100多个小时试图使PhantomJS正常工作(每个页面的新实例,重用同一实例,使用超时降低速度等),无论它仍然泄漏了什么,仍然崩溃)。
最佳答案
过去,在抓取繁重的网站时,我取得了不错的成绩,取消了对3d派对网站的某些请求,例如Google Maps,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();
});
关于node.js - 将呈现的网页中的内容读入nodejs,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50782701/