【问题标题】:Zombiejs - fetching contents of links synchronoulyZombie Js - 同步获取链接的内容
【发布时间】:2014-01-12 11:38:06
【问题描述】:

我一直在使用 nodejs 和zombiejs 从网站获取一些个人数据。不幸的是,我被困在一个地方,zombiejs 只能从第一个链接获取数据,然后挂断。

我遵循的步骤是-

  1. 转到基本网址
  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
>

任何建议将不胜感激

【问题讨论】:

    标签: node.js zombie.js node-async


    【解决方案1】:

    发现错误

    根据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);
                    });
    });
    

    【讨论】:

      猜你喜欢
      • 2011-04-23
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 2012-09-06
      • 1970-01-01
      • 2013-10-12
      相关资源
      最近更新 更多