web-dev-qa-db-ja.com

多くの小さなウェブページをダウンロードするための高速道

できるだけ速くたくさんの小ページをダウンロードする必要があります。 1ページの平均サイズは3KBです。何百万ものページがあります。まず、curlを試してみましたが、それはサーバーが要求を応答するのを待ってから次のページに対して同じプロセスを実行していました。

curl -O "http://website.com/pages/[0000001-1000000].html"
 _

編集:いくつかのテストをした後、私はこれらの結果を観察しました。私はいつもより多くの提案に開かれています。もっとスピードを向上させたいのですが。

比較1 :( DNS対DNS)

遅い:

curl -O "http://website.com/pages/[1-1000].html" -s -S
 _

より速く:

curl -O "http://90.111.123.222/pages/[1-1000].html" -s -S
 _

たくさんの小ページをダウンロードするときは、DNS遅延が重要です。

比較2 :(カールシーケンス対「SEQ」を使用する)

遅い:

curl -O "http://90.111.123.222/pages/{1}.html" -s -S ::: $(seq 1 1000)
 _

より速く:

curl -O "http://90.111.123.222/pages/[1-1000].html" -s -S
 _

比較3 :(並列実行)

遅い:

time parallel -j 5 curl -O \'"http://90.111.123.222/pages/{1}.html"\'
-S -s ::: $(seq 1 1000)
 _

より速く:

( time curl -O "http://90.111.123.222/pages/[1-200].html" -s -S &
  time curl -O "http://90.111.123.222/pages/[201-400].html" -s -S &
  time curl -O "http://90.111.123.222/pages/[401-600].html" -s -S &
  time curl -O "http://90.111.123.222/pages/[601-800].html" -s -S &
  time curl -O "http://90.111.123.222/pages/[801-1000].html" -s -S & )
 _

BTW、より多くのインスタンスを実行すると、両方のメソッドのスピードがあるポイントに向上します。

2
dandidondi

あなたはあなたの操作をいくつかのより小さな操作に縮小することによってこれをスピードアップします。たとえば、10個のCURLプロセスと背景を作成することができます。

curl -O "http://website.com/pages/0[000000-999999].html" &
curl -O "http://website.com/pages/1[000000-999999].html" &
curl -O "http://website.com/pages/2[000000-999999].html" &
...
 _

等々。

ただし、よりスマートでより柔軟なソリューションを使用することをお勧めします GNU Parallel タスクディストリビューションを並列処理しながら、並行して複数のファイルをダウンロードできます。

選択したあなたのパッケージマネージャでそれをインストールしてください。

parallel -j 10 curl -O "http://website.com/pages/{1}" ::: $(seq -w 1000000)
 _

これはもっと優雅なものです

2
chui101