2

page.open() への呼び出しを再帰的にチェーンすることで、複数の URL をスクレイピングする PhantomJs スクリプトを作成しました。(以下のコード スニペット。) これは最大 3 つまたは 4 つの URL で機能しますが、URL の数が多くなると空白のページが表示されます。空白とは、document.URL に「about: blank」が含まれていることを意味し、スクリーンショットには空白の白い背景が表示されます。また、多数の URL を処理し続けると、phantomJ のメモリ使用量が増加し続けることにも気付きました。前のページのレンダリングに使用されたメモリの割り当てを解除するために必要な特定のことはありますか?

他の人はこの問題を見ましたか? PhantomJs をスケーリングして、より多くの URL (たとえば 100) をスクレイピングすることは可能ですか?

ありがとうロヒット

複数の URL を取得するための再帰的なコード スニペット:

srcProducts = [{'url':'http://...' }, { 'url': 'http://...' },...];
destProducts = [];
gRetries = 0;
process();

function process() {
  if (srcProducts.length == 0) {
    // Output to file
    phantom.exit();
  } else {
     product = srcProducts.pop();

     page = require('webpage').create();
     page.open(product['url'], onOpen);
  }
}

function onOpen(status) {
  // check status
  // scrape info into product

  destProducts.push(product);
  process();
}
4

2 に答える 2

3

Google グループでこの質問に親切に答えてくれた人がいました。解決策は、ページ オブジェクトを使い終わった後に page.release() を呼び出すことです。

https://groups.google.com/forum/?fromgroups#!topic/phantomjs/lquzLFvZtrA

于 2012-07-07T08:04:29.170 に答える