0

私はnodejsと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
>

任意の提案をいただければ幸いです

4

1 に答える 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);
                });
});
于 2014-01-12T03:38:06.133 に答える