2014-01-12 91 views
0

我一直在玩nodejs和zombiejs從網站獲取一些個人數據。不幸的是,我被卡在zombiejs只從第一個鏈接獲取數據然後掛斷的地步。Zombiejs - 同步獲取鏈接的內容

我遵循的步驟是 -

  1. 進入到基礎URL
  2. 獲取的頁面
  3. 使用異步庫的數量由每次打開一個新的瀏覽器窗口中的一系列獲取它們。注意我只創建一個瀏覽器窗口而不是全新的瀏覽器實例,因爲創建一個瀏覽器實例非常昂貴。

這是我的代碼

var Browser = require("zombie"); 
var async = require('async'); 

var so_base="http://stackoverflow.com"; 
var so_url="http://stackoverflow.com/questions/tagged/java?sort=newest&pagesize=15&page="; 

var browser = new Browser(); 
browser.visit(so_base, function() { 
    var arr=[]; 
    for(var i=1;i<=10;i++) { 
     arr.push(i); 
    } 
    async.eachSeries(
       arr, 
       function(k, callback) { 
         browser.open(); 
         browser.visit(so_url+k,function() { 
           console.log(browser.location.href); 
           console.log(browser.html());   
         }); 
       }, 
       function(e) { 
         console.log(e); 
       }); 
}); 

結果

>node main_zombie.js 
..... HTML DUMP 
http://stackoverflow.com/questions/tagged/java?sort=newest&pagesize=15&page=1 
> 

任何建議,將不勝感激

回答

0

找到

按照

錯誤 https://github.com/caolan/async#each

需要用空參​​數調用回調函數,如果沒有錯誤,則爲null。 所以正確的代碼是

var Browser = require("zombie"); 
var async = require('async'); 

var so_base="http://stackoverflow.com"; 
var so_url="http://stackoverflow.com/questions/tagged/java?sort=newest&pagesize=15&page="; 

var browser = new Browser(); 
browser.visit(so_base, function() { 
    var arr=[]; 
    for(var i=1;i<=10;i++) { 
     arr.push(i); 
    } 
    async.eachSeries(
       arr, 
       function(k, callback) { 
         browser.open(); 
         browser.visit(so_url+k,function() { 
           console.log(browser.location.href); 
           console.log(browser.html()); 
         // Add callback and check if we reached the last page 
           if (k == 10) { 
            browser.close(); 
           } 
           callback(); 
         }); 
       }, 
       function(e) { 
         console.log(e); 
       }); 
});