web-dev-qa-db-ja.com

複数の同時接続を使用したwgetダウンロード

私はwgetを使用してWebサイトのコンテンツをダウンロードしていますが、wgetはファイルを1つずつダウンロードします。

4つの同時接続を使用してwgetをダウンロードするにはどうすればよいですか?

185
jubo

aria2を使用します。

aria2c -x 16 [url]
#          |
#          |
#          |
#          ----> the number of connections 

http://aria2.sourceforge.net

大好きです !!

191
gmarian

Wgetは、ファイルのダウンロードを高速化するための複数のソケット接続をサポートしていません。

私たちは、gmarianの答えよりも少し良くできると思います。

正しい方法は aria2 を使用することです。

aria2c -x 16 -s 16 [url]
#          |    |
#          |    |
#          |    |
#          ---------> the number of connections here
98
thomas.han

GNU parallelはまだ言及されていないため、別の方法を示します。

cat url.list | parallel -j 8 wget -O {#}.html {}
40
Nikolay Shmyrev

私は(おそらく) 解決策 を見つけました

あるサーバーから次のサーバーに数千のログファイルをダウンロードする過程で、私は突然、BSDで深刻なマルチスレッドダウンロードを行う必要がありました。できれば、Wgetを使用してこれを処理する最も簡単な方法でした。少し見て回ると、この小さなナゲットに導かれました。

wget -r -np -N [url] &
wget -r -np -N [url] &
wget -r -np -N [url] &
wget -r -np -N [url]

必要な数のスレッドに対してwget -r -np -N [url]を繰り返すだけです...これはきれいではなく、これを行うためのより良い方法は確かにありますが、迅速で汚れたものが必要な場合は、トリックを行う必要があります...

注:オプション-Nは、wgetが「新しい」ファイルのみをダウンロードするようにします。つまり、タイムスタンプが変更されない限り、ファイルは上書きまたは再ダウンロードされません。サーバ。

37
SMUsamaShah

これを行うことができる別のプログラムは、axelです。

axel -n <NUMBER_OF_CONNECTIONS> URL

buntu manページ

16
Lord Loh.

新しい(まだリリースされていない)ツールは Mget です。 Wgetで既に知られている多くのオプションがあり、独自のアプリケーションにダウンロード(ダウンロード)を簡単に組み込むことができるライブラリが付属しています。

質問に答えるには:

mget --num-threads=4 [url]

UPDATE

Mgetは Wget2 として開発され、多くのバグが修正され、より多くの機能が追加されました(たとえば、HTTP/2サポート)。

--num-threads--max-threadsになりました。

15
rockdaboot

Httrackを使用することを強くお勧めします。

例:httrack -v -w http://example.com/

デフォルトでは、8つの同時接続でミラーリングを行います。 Httrackには、プレイする場所がたくさんあります。ご覧ください。

13

他のポスターが言及したように、aria2をご覧になることをお勧めします。バージョン1.16.1のUbuntuマニュアルページから:

aria2はファイルをダウンロードするためのユーティリティです。サポートされるプロトコルは、HTTP(S)、FTP、BitTorrent、およびMetalinkです。 aria2は、複数のソース/プロトコルからファイルをダウンロードし、最大ダウンロード帯域幅を利用しようとします。 HTTP(S)/ FTPとBitTorrentからのファイルの同時ダウンロードをサポートし、HTTP(S)/ FTPからダウンロードしたデータはBitTorrent swarmにアップロードされます。 Metalinkのチャンクチェックサムを使用して、aria2はBitTorrentのようなファイルをダウンロードしながらデータのチャンクを自動的に検証します。

-xフラグを使用して、サーバーごとの最大接続数を指定できます(デフォルト:1):

aria2c -x 16 [url] 

同じファイルが複数の場所から利用できる場合、それらすべてからダウンロードすることを選択できます。 -jフラグを使用して、すべての静的URIの並列ダウンロードの最大数を指定します(デフォルト:5)。

aria2c -j 5 [url] [url2]

詳細については http://aria2.sourceforge.net/ をご覧ください。使用方法については、manページに実際の説明があり、下部に使用例のセクションがあります。オンラインバージョンは http://aria2.sourceforge.net/manual/en/html/README.html にあります。

9
runejuhl

wgetは複数の接続でダウンロードできないため、代わりにaria2のような他のプログラムを使用することができます。

7
user181677

pcurlを試してください

http://sourceforge.net/projects/pcurl/

wgetの代わりにcurlを使用して、10セグメントで並行してダウンロードします。

5
Rumble

makeは簡単に並列化できます(例:make -j 4)。たとえば、次はwgetを使用してファイルを並行してダウンロードするために使用している単純なMakefileです。

BASE=http://www.somewhere.com/path/to
FILES=$(Shell awk '{printf "%s.ext\n", $$1}' filelist.txt)
LOG=download.log

all: $(FILES)
    echo $(FILES)

%.ext:
    wget -N -a $(LOG) $(BASE)/$@

.PHONY: all
default: all
2
Paul Price

彼らはいつもそれは依存すると言いますが、それはウェブサイトをミラーリングすることになると、最高のものがあります httrack 。超高速で簡単に作業できます。唯一の欠点は、いわゆるサポートフォーラムですが、 公式ドキュメント を使用して方法を見つけることができます。 GUIとCLIの両方のインターフェイスがあり、ドキュメントを読むだけでCookieをサポートしますこれは最高です(このツールを使用すると、ウェブ全体をハードドライブにダウンロードできます)。

httrack -c8 [url]

デフォルトでは、同時接続の最大数はサーバーの過負荷を避けるために8に制限されています

2
pouya

つかいます

aria2c -x 10 -i websites.txt >/dev/null 2>/dev/null &

websites.txtでは、1行に1つのURLを入力します。例:

https://www.example.com/1.mp4
https://www.example.com/2.mp4
https://www.example.com/3.mp4
https://www.example.com/4.mp4
https://www.example.com/5.mp4
2
David Corp

xargsを使用して、wgetを複数のファイルで並行して動作させる

#!/bin/bash

mywget()
{
    wget "$1"
}

export -f mywget

# run wget in parallel using 8 thread/connection
xargs -P 8 -n 1 -I {} bash -c "mywget '{}'" < list_urls.txt

Aria2オプション、20 mb未満のファイルを扱う正しい方法

aria2c -k 2M -x 10 -s 10 [url]

-k 2Mファイルを2MBのチャンクに分割

-kまたは--min-split-sizeのデフォルト値は20mbです。このオプションとファイルを20mb未満に設定しない場合、-xまたは-sの値に関係なく、単一の接続でのみ実行されます。

0
ewwink