node.js - 减少无限循环中 phantomjs/casperjs/spooky js 的内存使用

标签 node.js web-scraping phantomjs casperjs spookyjs

我正在尝试使用 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/

相关文章:

javascript - 使用 promises 编写可读代码的最佳方法是什么?

html - 用父元素的 beautifulsoup4 : does it affect the . 字符串解包元素?

javascript - 如何暂停 NodeJS 脚本?

c# - 设置 PhantomJSOptions.AddAdditionalCapability 以引用 ghostdriver 的本地副本

node.js - npm 启动后 Github 操作不起作用

javascript - MMO WebSocket 服务器 : Node. js 或 C++?

python - 间隔输出 beautifulsoup

python - 如何使用 Selenium 和 phantomjs webdriver 正确传递基本身份验证(每次点击)

javascript - 我可以用 python + selenium Hook phantomjs 跳转到新网站的事件吗?

node.js - 我无法让 mongoose/node.js 正确检索数据。我究竟做错了什么?