2

私はNode.jsに比較的慣れていないので、簡単なモジュールを作成して、Node.jsに慣れようとしています。このモジュールの目的は、IDを取得し、Webサイトをスクレイプし、データを含む一連の辞書を返すことです。

Webサイトのデータはページ全体に散在していますが、すべてのページはURIの異なるインデックス番号でアクセスされます。とを取得し、これを介してWebサイトをidスクレイプする関数を定義しました。イベントが発生すると、データは、構造化された方法でデータを取得するために正規表現を適用する別の関数に渡されます。page_numberhttp.request()page_numberend

モジュールが完全な機能を持つためにpage_numsは、Webサイトで利用可能なすべてのものをスクレイプする必要があります。

Node.jsスタイル/哲学では、すべてのページのスクレイピング関数を呼び出し、すべての戻りの結果を集約して、エクスポートされた関数からそれらをすべて一度に返す標準のfor()ループを作成しても大丈夫ですか?

編集

freenodeの#node.jsの助けを借りて解決策を見つけました。動作するコードはhttp://github.com/attheodo/katina_nodeにあります。

コメントありがとうございます。

4

3 に答える 3

1

@ControlAltDelで言及されているライブラリのいずれかを気にしたくない場合の一般的な方法は、ページ数に等しいカウンタを設定することです。各ページが処理されると(非同期であるため、順序がわからず、気にもなりません)、カウンターをデクリメントします。カウンターがゼロの場合、すべてのページを処理したことがわかり、プロセスの次の部分に進むことができます。

于 2012-07-05T15:07:28.887 に答える
0

おそらく発生する問題は、集約されたすべての結果を再結合することです。AsyncやStepなど、役立つライブラリがいくつかあります。または、Fibers.Promiseのようなpromiseライブラリを使用することもできます。しかし、後者は実際にはノードの哲学ではなく、ノードの実行可能ファイルに直接コードを変更/追加する必要があります。

于 2012-07-05T15:00:32.697 に答える
0

Freenodeの#node.jsからの有益なコメントで、Node.jsの哲学が要求するように、スクレイピング関数を順番に呼び出してコールバックをアタッチすることで解決策を見つけることができました。

ここでコードを見つけることができます:https ://github.com/attheodo/katina_node/blob/master/lib/katina.js

対象のコードブロックは、87行目と114行目の間にあります。

皆さん、ありがとうございました

于 2012-07-06T14:53:55.827 に答える