2016-09-05 11 views
0

配列に約10KのURLがあります。それ以外の時には、これは100Kかもしれません。私はプログラムでそれらを訪問し、応答を取得し、それを印刷したり、何かをする必要があります。すべてのURLが属するサーバーの窒息を防ぐために、私はそれらを順番に訪問したいと思います。私はこれを行う非同期モジュールがあることを知っています。私の質問です:非同期はこれを行う唯一の方法ですか?より多くのURLのために非同期で拡張できるのでしょうか?URLに順次アクセスする方法

+0

リクエストの配列を通じて単純な順次反復を行う必要はありません。あなたはそれを使うことができますが、それは必ずしも必要ではなく、逐次反復に次々と関係するスケールの問題はありません。 – jfriend00

+0

[APIリクエストのスタックを抑制する方法](http://stackoverflow.com/questions/35422377/how-can-i-throttle-stack-of-api-requests/35422593#35422593)と[Run 1000 requestsそのため、一度に10回しか実行できません](http://stackoverflow.com/questions/39141614/run-1000-requests-so-that-only-10-runs-at-a-time/39154813#39154813)と[ 20分しか処理できないAPIへのリクエストをいくつか作成する](http://stackoverflow.com/questions/33378923/make-several-requests-to-an-api-that-c​​an-only-handle-20-リクエスト/分/ 33379149#33379149)のようなものを実装しています。 – jfriend00

+0

非同期は良好です。連続して何かを実行している場合は、なぜスケーリングについて心配する必要がありますか?それはちょうど時間を取るつもりです。 – AllTheTime

答えて

0

crawlerのようなWebクローラー・モジュールを使用します(または、node-modules.comまたはnpmjs.comのクローラー・キーワードを検索してください)。

var Crawler = require("crawler"); 
var url = require('url'); 

var c = new Crawler({ 
    maxConnections : 10, 
    // This will be called for each crawled page 
    callback : function (error, result, $) { 
     // $ is Cheerio by default 
     //a lean implementation of core jQuery designed specifically for the server 
     $('a').each(function(index, a) { 
      var toQueueUrl = $(a).attr('href'); 
      c.queue(toQueueUrl); 
     }); 
    } 
}); 

// Queue a list of URLs 
c.queue(['http://jamendo.com/','http://tedxparis.com']); 
+0

質問に何も言わずに、HTMLのスクラップや解析については何も言及していません。 – AllTheTime

+0

彼は「それを使って何かをする」と言っているので、掻き集めることが非常にうまくいくかもしれません。また、クローラは同時にいくつのリクエストが出ていくかを制御する組み込みの設定をしています。 –

関連する問題