【问题标题】:reducing phantomjs/casperjs/spookyjs memory usage in infinte loop在无限循环中减少 phantomjs/casperjs/spooky js 内存使用
【发布时间】:2014-09-07 15:06:05
【问题描述】:

我正在尝试使用 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();

【问题讨论】:

  • sendScrapedLinks 事件处理程序有多复杂?除此之外,你不能做得更好。
  • 这只是一个简单的 mongoose.save() 函数。

标签: node.js web-scraping phantomjs casperjs spookyjs


【解决方案1】:

我在无限滚动网站上也遇到过这个问题。我永远无法绕过内存泄漏。

简而言之,我最终做的是使用滚动到。基本上我会运行应用程序一段时间记录最后滚动到的位置,然后使用记录的值重新启动应用程序以防止内存变高。这很痛苦,因为您必须按顺序滚动到某个位置才能加载越来越多的网站。找到这些位置来划分您最后滚动到的位置可能具有挑战性。

【讨论】:

  • 这有什么帮助?仅仅因为您知道崩溃前的最后滚动位置并不意味着您在第二次尝试时会走得更远。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
相关资源
最近更新 更多