2014-01-12 3 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); 
       }); 
}); 
Смежные вопросы