2014-01-12 6 views
6

PhantomJSはヘッドなしのWebKitブラウザです。私はこれでURLを開き、毎秒更新するページの内容を取得することができます。実在のブラウザのようなファントムが開いたタブ

しかし、私は多くの(100)ページの内容を同時に取得する必要があります。

すべてのページを同時に開いて1秒ごとに更新する必要があります。

1ページでも可能ですが、複数のページから一度に取得する方法はわかりません。

これはexample code from the PhantomJS websiteです:

console.log('Loading a web page'); 
var page = require('webpage').create(); 
var url = 'http://www.phantomjs.org/'; 
page.open(url, function (status) { 
    //Page is loaded! 
    phantom.exit(); 
}); 

私は、一度に多くのPhantomJSインスタンスを使用できますか?私は最善の方法ではないようです。どんな体でも1つのPhantomJSインスタンスを開き、いくつかのページからコンテンツを取得する方法を知っていますか?ここで

+0

の正確numbeのためにあなたがより多くの 'page'インスタンスを作成することができます「のために」私は設定されていますか?おそらく配列ですか? – Unsigned

+0

私は確信していません... beacuseページは長い時間開いておく必要があります...また、私はjavascriptの初心者..私explaneできますか? – MOB

+0

@Unsignedは私にいくつかの例を示すことができますか? – MOB

答えて

4

はコードで、私はそれはあなたを助けることを願っていますE-ショップのためのアイテムを解析する前に使用し、これらの項目の各ページ

のためのHTMLコードを入れて!あなたの質問FOR

var RenderUrlsToFile, system, url_string_for_array; 
var arrayOfUrls = new Array(); 

system = require("system"); 

RenderUrlsToFile = function(urls, callbackPerUrl, callbackFinal) { 
var getFilename, next, page, retrieve, urlIndex, webpage, link_name, sex; 

var fs = {}; 
fs = require('fs'); 

urlIndex = 0; 
webpage = require("webpage"); 
page = null; 
// getFilename = function() { 
//  return "parsed/" + urlIndex + ".png"; 
// }; 
next = function(status, url, file) { 
    page.close(); 
    callbackPerUrl(status, url, file); 
    return retrieve(); 
}; 
retrieve = function() { 
    var url; 
    if (urls.length > 0) { 
     url = urls.shift(); 
     urlIndex++; 
     page = webpage.create(); 
     page.viewportSize = { 
      width: 800, 
      height: 600 
     }; 
     page.settings.userAgent = "Phantom.js bot"; 
     return page.open("http://" + url, function(status) { 
      var file; 
      // file = getFilename(); 
      if (status === "success") { 
       return window.setTimeout((function() { 
        // page.render(file); 

        var js = page.evaluate(function() { 
          return document; 
         }); 

        fs.write('your_file_path'.html', js.all[0].outerHTML, 'w'); 

        return next(status, url, file); 
       }), 100); 
      } else { 
       return next(status, url, file); 
      } 
     }); 

    } else { 
     return callbackFinal(); 
    } 
}; 
return retrieve(); 
}; 

if (system.args.length > 1) { 
arrayOfUrls = Array.prototype.slice.call(system.args, 1); 
} else { 

------------ CODEの主要部分------

例えば:私はE-ショップでアイテムを解析する必要がありますので、私は最初のページを取り、ページ

url_string_for_array = "www.lamoda.ru/c/559/accs-muzhskieaksessuary/?genders=men&page=1"; 

for(var k=2; k<20; k++) 
    { 
     url_string_for_array += ",www.lamoda.ru/c/559/accs-muzhskieaksessuary/?genders=men&page="+k; 
    } 

arrayOfUrls = url_string_for_array.split(','); 
} 

RenderUrlsToFile(arrayOfUrls, (function(status, url, file) { 
if (status !== "success") { 
    return console.log("Unable to render '" + url + "'"); 
} else { 
    return console.log("Rendered '" + url + "'"); 
} 
}), function() { 
return phantom.exit(); 
}); 
関連する問題