私はpuf(Parallel URL fetcher)しか見つかりませんでしたが、ファイルからURLを読み取ることができませんでした。何かのようなもの
puf < urls.txt
どちらも機能しません。
サーバーにインストールされているオペレーティングシステムはUbuntuです。
GNU Parallel を使用して、
$並列-j $ {jobs} wget <urls.txt
またはxargs
from GNU Findutils 、
$ xargs -n 1 -P $ {jobs} wget <urls.txt
ここで、${jobs}
は、同時に実行できるwget
の最大数です(-n
を1
に設定して、1行あたり1つのwget
呼び出しを取得しますurls.txt
)。 -j
/-P
がない場合、parallel
はCPUコアと同じ数のジョブを同時に実行します(ネットワークIOによってバインドされたwget
には必ずしも意味がありません)。 、およびxargs
は一度に1つずつ実行されます。
parallel
がxargs
を超える優れた機能の1つは、同時に実行されているジョブの出力を分離することですが、それを気にしない場合は、xargs
が可能性が高くなりますプリインストールされている。
Pythonとpycurlライブラリを使用して実装できます。pycurlライブラリには、複数の同時接続を可能にする独自の偶数ループを実装する「マルチ」インターフェイスがあります。
ただし、インターフェイスはかなりCに似ているため、他のより「Python的」なコードと比較すると少し面倒です。
その上に、より完全なブラウザのようなクライアントを構築するためのラッパーを作成しました。これを例として使用できます。 pycopia.WWW.client モジュールを参照してください。 HTTPConnectionManagerはマルチインターフェイスをラップします。
これは機能し、ローカルまたはリモートのDoSではなく、適切に調整されます。
(bandwidth=5000 jobs=8; \
parallel \
--round \
-P $jobs \
--Nice +5 \
--delay 2 \
--pipepart \
--cat \
-a urls.txt \
wget \
--limit-rate=$((bandwidth/jobs))k \
-w 1 \
-nv \
-i {} \
)
GNU Parallelのmanページの一部には、並列再帰wgetの例が含まれています。
https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Breadth-first-parallel-web-crawler-mirrorer
HTMLは2回ダウンロードされます。1回はリンクの抽出用、もう1回はディスクへのダウンロード用です。他のコンテンツは一度だけダウンロードされます。
あなたが再帰性を必要としない場合、エフェミエントの答えは明白です。
並列ダウンロードの犠牲者は面倒ではありません。1つの接続が各クライアントにサービスを提供することを期待しています。複数の接続を設定すると、クライアント全体が少なくなります。 (つまり、これは失礼な行動と見なされます)。