1

私にはかなりトリッキーなタスクがありますが、NodeJSの初心者です。

したがって、URLの配列をループし、配列から各ページをフェッチし、jsdom + jqueryを介して渡し、配列の最後に新しく見つかったURLを追加する必要があります。

一見したところ、タスクは非常に単純ですが、NodeJSの非同期のため、悪夢になります。

今、私は次のようなコードを持っています(理解を深めるために簡略化されています)

var jsdom = require("jsdom");
var fs = require("fs");
var jquery = fs.readFileSync("./jquery.js").toString();

var fields = ['http://some.url/page.html']

for(var b=0, len = fields.length;b<len;b++){

jsdom.env({
      html: fields[b],
      src: [jquery],
      done: function (errors, window) {
            var $ = window.$;
            $("div.pager a").each(function() {
                //Push new finded hyperlinks in array
              fields.push($(this).attr('href'));
            });

        }
    });
    //recalculate actual length of array to make more loop
    len=fields.length;
}

そして確かに、NodeJSの概念のために、その構築は機能しません。誰かがそれを実際のライブにする方法をアドバイスできますか?

4

2 に答える 2

0

時間をかけて非同期動作を学習することをお勧めします。これは、node.js が無意味な力です。貼り付けたコードは、いくつかの理由で間違っています。

Plz、私がやっているペットプロジェクトのために、リンククローラーの私の実装を見てください。それは役に立ちます。

https://github.com/alexanderbeletsky/freeze/blob/master/src/crawler.js

于 2012-12-09T19:50:44.093 に答える
0

これには async.eachSeries() を使用する必要があります。ループで実行する必要がある非同期コードがある場合は、常に非同期ライブラリを使用する必要があります。

于 2014-01-26T00:11:27.097 に答える