wget コマンド

HTTPアクセスをしてコンテンツをファイルに保存するコマンド。 curlでも同じようなことができるが、 curlと違ってリンクをたどりながら再帰的にたくさんのファイルをダウンロードすることができる。

ローカルに保存するときのファイル名は、1ファイルだけのダウンロードの場合は、 URLからドメイン名やディレクトリ名を削ったものになる。再帰的にダウンロードする場合はドメイン名のディレクトリが作成される。

GNU Wget Manual
http://www.gnu.org/software/wget/manual/wget.html

GNU Wget 1.9 Manual 日本語 (1.9は結構古いバージョン)
http://www.bookshelf.jp/texi/wget/wget-ja.html

※wgetの最新バージョンは2015年3月リリースの1.16.3 (2015/10/23確認)

サーバに接続できなかったり、404などになってしまった場合は終了コード0以外が返される。

インストール

Ubuntu, CentOSではwgetというパッケージに入っている。(Ubuntu 13.10, 15.10, CentOS 7.2 で確認)

$ sudo yum install wget
## または
$ sudo apt-get install wget

オプション

-O ファイル名
ダウンロードしたファイルの保存先。ファイル名を - とすると、ファイルに保存せずに標準出力される
-q
進捗などの詳細表示をしない。このオプションを付けないと進捗などを標準エラー出力に出力する
-nv
進捗の表示をせず、最後に結果だけを標準エラー出力に出力する
-i ファイル名
ダウンロードするURLをコマンドパラメータではなく、ファイルから読み込む。 ファイルには、各行にURLを1つずつ書いておく。すると、そのURLを順番にダウンロードしてくれる
--spider
ダウンロードせずに、ファイルの存在だけをチェックする。再帰的に実行するオプション -r と併用するときには -nv も併用すると標準エラー出力に一覧が表示されて見やすい
-x
ドメイン名のディレクトリを作成してダウンロードする。再帰的なダウンロード -r を指定した場合と同様である
--version
wgetのバージョン番号を表示

再帰的なダウンロードに関するオプション

-r
再帰的なダウンロードを実行。ドメイン名のディレクトリを作成してダウンロードしたファイルを保存する
-l数字
リンクをたどる最大回数を指定。-l1 は指定したURLとそのリンク先をダウンロード。-r も合わせて必要
-linf
リンクをすべてたどる。リンクをたどる最大回数が無限大(infinity)の意味
-w数字
ダウンロードの間隔を秒数で指定
--wait 数字
-w と同じで、ダウンロードの間隔を秒数で指定。
--random-wait
ダウンロードの間隔を -w または --wait で指定した秒数の0.5倍から1.5倍の間のランダムにする
-A 拡張子
ダウンロードするファイルの拡張子を指定。コンマ区切りで複数指定できる。 再帰的にリンクをたどるためにHTMLにもアクセスをするがファイルで保存するのは指定の拡張子のみになる。 例: -A jpg,png,gif
-R 拡張子
-A とは反対にダウンロードしないファイルの拡張子を指定。コンマ区切りで複数指定できる
-H
他のドメインへもリンクをたどる。このオプションを付けないと、同じドメインの中しかリンクをたどらない

ローカルで閲覧するための便宜

とりあえず -pk を付けてみるとよい。

-p
そのHTMLページに含まれる画像やCSS、JavaScriptなどもダウンロードする。 その1ページだけでよければ、-r を付けなくてもよい
-k
リンクや画像への参照などを、ローカルでも開けるように絶対パスから相対パスに書き換える

HOWTO

BASIC認証のあるサイトをダウンロードするには

オプション --http-user, --http-passwd を使って指定する。

wget --http-user=user --http-passwd=password http://www.example.com/

-> curlコマンドでのBASIC認証

ウェブページ1ページ分のHTMLと依存している画像やCSSやJSなどをまとめてダウンロードするには

オプション -p を使うと参照されている画像やCSSやJSも合わせてまるごとダウンロードしてくれる。

さらに --convert-links を指定すれば、HTMLからこれらへの参照が絶対パスになっていたとしても、相対パスに自動で変換してくれるので、ダウンロードしたHTMLをローカルで開くことができるようになる。

$ wget -p http://www.example.com/

# HTMLはローカルで閲覧できるように、パスを相対パスに書き換える
$ wget -p --convert-links http://www.example.com/

CSSファイルの中で他のCSSファイルを @import している場合に、wgetのバージョンが1.12以上である必要がある。それより古いとCSSの解釈ができず、必要なファイルをダウンロードしてこれないために、ローカルでHTMLを開いたときにレイアウトが崩れる。

ウェブサイトを丸ごとダウンロードするには

-r オプションで再帰的なダウンロードを指示し、 -l オプションで再帰の深さを指定する。

# リンク3回までたどり、ダウンロードする。
# リンクを3回踏むということは第4階層のページまでということになる。
wget -r -l3 http://www.example.com/

さらに --convert-links を付けると、ダウンロードするHTMLの中に書かれているリンクや画像の参照などのパスをローカルでも閲覧できるように相対パスに書き換えてくれる。

# ウェブサイトを第6階層までリンクをたどりダウンロードする。
# かつローカルでサイトを閲覧できるように、パスを相対パスに書き換える。
wget -r -l5 --convert-links http://www.example.com/

標準出力に吐き出すには

$ wget -q -O - http://www.example.com/

-O - (大文字オー)で結果を標準出力に出す。-O- のように空白を省略してもよい。 -q は結果以外の進捗の表示などを無効にする。

curlであれば、デフォルトで標準出力になる。

レスポンスヘッダを確認するには

-S を付けると、レスポンスヘッダが表示される。

再帰的なダウンロードを途中から再開できるようにするには

再帰的なダウンロード -r とともに -nc を付けると、すでにダウンロード済みのファイルがあれば、それを利用し、改めてダウンロードすることはない。

再帰的なダウンロード中のダウンロードのインターバルを指定するには

--wait=10 とすると、10秒のインターバルを設ける。小数点も使用可能で、 --wait=0.5 で0.5秒の間がおかれる。

さらに --random-wait を付けると、指定したインターバルの0.5倍から1.5倍の間のランダムなインターバルになる。

再帰的なダウンロードの時にホスト名のディレクトリを作らずに済ますには

--no-host-directories を付ける。

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク