我正在尝试使用 phantomjs casperjs 和 spooky 来抓取使用无限滚动的页面。它应该继续单击“更多”按钮并从结果中获取新链接,直到手动停止为止。然而,该脚本开始使用越来越多的内存,直到崩溃。我编写了以下脚本,有没有办法优化它,这样它就不会使用太多内存:
function pressMore(previousLinksLength) {
this.click('#projects > div.container-flex.px2 > div > a');
this.wait(1000, function() {
links = this.evaluate(function() {
var projectPreview = document.querySelectorAll('.project-thumbnail a');
return Array.prototype.map.call(projectPreview, function(e) {
return e.getAttribute('href');
});
});
this.emit('sendScrapedLinks', links.slice(previousLinksLength));
// repeat scrape function
pressMore.call(this, links.length);
});
}
// spookyjs starts here
spooky.start(scrapingUrl);
//press the more button
spooky.then(pressMore);
spooky.run();
最佳答案
我在无限滚动网站上也遇到过这个问题。我永远无法解决内存泄漏问题。
简而言之,我最终所做的是使用滚动到。本质上,我会运行应用程序一段时间,记录最后滚动到的位置,然后使用记录的值重新启动应用程序,以防止内存过高。这很痛苦,因为许多网站您必须依次滚动到某个位置才能加载越来越多的内容。找到这些位置来划分您上次滚动到的位置可能具有挑战性。
关于node.js - 减少无限循环中 phantomjs/casperjs/spooky js 的内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25711634/