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
ファイル名--spider
-r
と併用するときには-nv
も併用すると標準エラー出力に一覧が表示されて見やすい-x
-r
を指定した場合と同様である--version
-r
-l
数字-l1
は指定したURLとそのリンク先をダウンロード。-r
も合わせて必要-linf
-w
数字--wait
数字-w
と同じで、ダウンロードの間隔を秒数で指定。--random-wait
-w
または--wait
で指定した秒数の0.5倍から1.5倍の間のランダムにする-A
拡張子-A jpg,png,gif
-R
拡張子-A
とは反対にダウンロードしないファイルの拡張子を指定。コンマ区切りで複数指定できる-H
とりあえず-pk
を付けてみるとよい。
-p
-r
を付けなくてもよい-k
オプション--http-user
,--http-passwd
を使って指定する。
wget --http-user=user --http-passwd=password http://www.example.com/
オプション-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
を付ける。