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();
}