Wgetでホームページを丸ごとダウンロードする
Wgetコマンドを使って自分の気に入ったホームページをパソコンに丸ごとダウンロードしておけば、PCがインターネットにつながっていなくてもゆっくり見ることができます。
自分のPCに保存しておけば、たとえ将来そのホームページがネット上から消えてしまっても見ることができます。
Wgetを使いたいなーと思うことは数年に一度あるかないかです。なので、wgetコマンドの使い方なんてあっという間に忘れてしまっています。そのたびに時間をかけて調べていますので、今回はちゃんとメモっておくことにします。
Windows版Wgetのダウンロード
WgetはもともとUNIX用のプログラムですが、最近ではWindows版もあるようです。linuxでしたら最初から入っているプログラムなわけですが、そのためだけにわざわざlinuxマシンを用意するのも面倒なのでWindows版をインストールしてみることにします。
現在(2009/10)
http://gnuwin32.sourceforge.net/packages/wget.htm
でWindows版をダウンロードできるようです。ここからWindows用バイナリをダウンロードします。
Wgetのインストール
ダウンロードしたファイルを解凍して適当な場所にコピーします。
解凍するとbin、etc、man、などのフォルダができます。binの中の
wget.exe をダブルクリックして早速実行してみました。
するとLIBEAY32.dll が見つからないというエラーが出て動きませんでした。
http://gnuwin32.sourceforge.net/packages/openssl.htm
からlibeay32.dllがダウンロードできるようなのでもらってきます。
再度トライ。今度は libintl3.dll が無い と怒られます。http://gnuwin32.sourceforge.net/packages/diffutils.htm
からダウンロードします。
そして再々トライ。次は libiconv2.dll が無いそうです。
そろそろ嫌になってきました。Linuxマシンを用意した方が楽な気がしてきました。しかし、もう少しだけねばってみることにします。libiconv も 同じ場所で手に入りました。
で、その次には、libssl32.dll のエラーが出ましたがそれが最後のエラーでした。
結局以上の4つのdllを入手すればOKでした。
wgetをダブルクリックしても何もエラーが出ないことを確認。
ねばってよかったです。wgetはコマンドラインで使いますので、今度はMS-DOSコマンドプロンプトに移動してwgetを実行しました。
以下のように起動しました。
C:\>wget
'wget' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
C:\>cd "Program Files"
C:\Program Files>cd WGET
C:\Program Files\WGET>wget
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = c:/progra~1/wget/etc/wgetrc
wget: missing URL
Usage: wget [OPTION]... [URL]...
Try `wget --help' for more options.
パスが通し方がよくわかりませんが、まあとりあえず動いたのでいいでしょう。多分このフォルダにhtmlファイルがダウンロードされるので、ProgramFilesではなくどこか別のフォルダにしたほうがわかりやすいかもしれません。
wgetのコマンドオプション
wgetではコマンドのオプションが命です。
このオプションの部分をいつも忘れてしまうため、今回はちゃんとメモります。
-h :ヘルプ表示でどんなオプションがあるか確認できます。
このオプションさえ覚えていれば、なんとか確認できます。英語ですが。
-h で表示されるオプションは膨大です。ユーザ認証、クッキー、FTP、HTTPS、プロキシーなどなどいろいろな設定が可能のようです。そういうオプションは自分にはまったく必要ないので、最低限の自分が使いそうなものだけピックアップしてみました。
- -i, --input-file=FILE download URLs found in FILE.
あらかじめURLを記載した別ファイルを作っておき、そこに書かれているURLからダウンロードする。 - -t, --tries=NUMBER set number of retries to NUMBER (0 unlimits).
ダウンロードが失敗した場合のリトライ回数を指定。しつこくリトライしたくない場合に利用。通常は20回だそうですが、そんなに必要ない気がします。何が何でも完璧にダウンロードしたい人は100回とかにするんでしょうか。 - -c, --continue resume getting a partially-downloaded file.
レジューム機能だそうです。ダウンロードが途中で失敗した場合、続きからダウンロードします。 - -N, --timestamping don't re-retrieve files unless newer than
local.
タイムスタンプが新しいファイルだけ(更新されたファイルだけ)ダウンロードします。微妙です。何度も同じサイトをダウンロードするような人には絶対必要なオプションです。 - -w, --wait=SECONDS wait SECONDS between retrievals.
ダウンロード間隔を秒で指定。 - -Q, --quota=NUMBER set retrieval quota to NUMBER.
ダウンロードファイルサイズを制限。シングルファイル指定の場合は無効。-rや-iオプションで有効。-Q10k、-Q2mのように使用。
このオプションはどうなんでしょう?合計100MBくらいまでならダウンロードしてもいいかな、といった場合には有用ということですが・・・。巨大なファイルが予想外に含まれている場合もあるのでやはり指定しておいたほうがいいのでしょうか。あとは、-iオプションなど使ってたくさんのURLを指定した場合、HDDが一杯になる可能性もあるので、そういう使い方をする人には使えそうなオプションです。 - -P, --directory-prefix=PREFIX save files to PREFIX/...
ダウンロードしたファイルの保存先指定 - -r, --recursive specify recursive download.
指定したページ内に記載されているリンクもたどってファイルをダウンロード。重要なオプションでしょう。1ページだけをダウンロードするためだけにwgetを使う人はあまりいないのでは? - -l, --level=NUMBER maximum recursion depth (inf or 0 for infinite).
どの深さまでリンクをたどるか階層を指定します。ホップ数。小さなサイトではそんなに問題ないならないかもしれませんが、大きなサイトだと永遠(0 or inf)にたどっているときりがないですから。これも重要なオプションです。デフォルト設定値は5? - -A, --accept=LIST comma-separated list of accepted extensions.
ダウンロード許可するファイルの拡張子をカンマで区切って指定。指定したもののみダウンロードされる。 - -R, --reject=LIST comma-separated list of rejected extensions.
ダウンロード拒否するファイルの拡張子をカンマで区切って指定。 - -L, --relative follow relative links only.
相対リンクのみダウンロード。他のサイトへのリンクはダウンロードしない。これは使えそうです。 - -k, --convert-links make links in downloaded HTML point to local files.
ダウンロードしたhtml内のリンク先をローカルファイルに変更する。このオプションは使わないとどういうことになるんでしょうか? - -m, --mirror shortcut for -N -r -l inf --no-remove-listing.
ミラーリング。-l inf は -l 0 と同じで全階層をダウンロードするという意味です。このオプションは使いそうも無いです。 - -p, --page-requisites get all images, etc. needed to display HTML page.
ページを表示するために必要な画像ファイルなどもダウンロードする。 - -np, --no-parent don't ascend to the parent directory.
親ディレクトリはダウンロードしない。マニュアルをみると非常に有用と書いてあるのですが、どういうときに使用すればいいのか、いまいちわかりません。害はなさそうなのでとりあえず指定しておいてもいいでしょう。
使えそうなものだけでも随分と多くなってしまいましたがまだまだたくさんあります。 wgetコマンド にもっと詳しく出ています。 あとはやはりマニュアルテキスト(フォルダ /man/cat1/ にwget.1.txt として入ってました)が役立ちます。Wgetのマニュアルの日本語訳もあります。
wgetのコマンドオプション使い方の例
いよいよ実行です。
使えそうな、あるいは必要そうなコマンドオプションをつけていくつか試してみました。
- wget -r -t3 -c -N -Q20m -l4 -L -k -np サイトURL
それぞれのコマンドオプションの意味は、
-r :リンクをたどる
-t3 :リトライは3回
-c :レジューム有効
-N :新しく更新されたファイルのみ
-Q20m :ダウンロード容量が20MBに達したら中止
-l4 :リンクをたどる階層は4まで
-L :他のサイトはダウンロードしない
-k :ダウンロード後のリンク先をローカルフォルダに変更
-np :親ディレクトリはダウンロードしない。
このオプションでやってみた結果、ちゃんとURL名のついたフォルダが作成され、その中にきちんとhtmlファイルが保存されます。ただし、これらのオプションだけでは、htmlファイルのみしかダウンロードしませんでしたので、以下の2に修正 - wget -r -t3 -c -N -Q20m -l4 -L -k -np -p サイトURL
-p オプションをつけたおかげで、画像、javascript、cssなどがダウンロードされました。-pは必須のオプションですね。 - wget -r -t3 -c -N -Q20m -l4 -L -k -p サイトURL
オプション -np をつけずに実行してみましたら、同じ階層のディレクトリもダウンロードしました。(/AAA/を指定したら/BBB/も)やはり-npは必要でしょうか。場合によりますかね。 - wget -m -t3 -c -Q20m -L -k -p サイトURL
-m オプションを指定してみました。 -mを指定した場合は、-r、-N、-l はそれに含まれるので指定する必要はありません。階層は無限です。試したサイトの場合、3の結果と同じでした。-mオプションは自分には必要ないです。 - wget -r -t3 -c -N -Q20m -l4 -L -p サイトURL
-kオプションを削除して試してみました。ダウンロード結果を見てみましたがどこが違うかよくわかりませんでした。マニュアルにはローカルPCでの閲覧に適するよう相対リンクに変換するとあります。まあ指定しておく方が無難でしょうか。
Wgetでダウンロードしたファイルの保存ディレクトリー
以上でだいたいWgetが使えるようになりました。
最後に気になるのが、ダウンロードしたファイルの保存先です。
wgetのプログラムがあるフォルダには保存したくありません。
-P, --directory-prefix=PREFIX save files to PREFIX/...
この-Pオプションで保存先ディレクトリを指定できるはずなので
wget -r -t3 -c -N -Q20m -l4 -L -k -np -p -PD:\Wget サイトURL
実施してみたところ、無事指定した D:\Wget フォルダにダウンロードできました。
あるいは、Wgetプログラムフォルダ自体をProgramFilesの下ではなくMyDocumentなどに置いてもいいのかもしれません。そうすると-Pも必要ないですから。
wgetコマンドのオプションまとめ
ということでwgetオプションのまとめです。
wget -r -tリトライ回数 -c -N -Qダウンロード容量 -l階層数 -L -k -np -p -P保存先 サイトURL
おまけ:
-w オプションも害は無いと思うので-w1を追加してみました。失敗した場合1秒待ってリトライということ意味だと思っていましたが、全然意味が違いました。1秒待って次のファイルをダウンロードすると言う意味ですので気長にダウンロードする場合、あるいはサーバに負荷をかけたくない場合などに有効だと思います。
最後に本ページで使ったWindows版Wgetのバージョン情報です。他のバージョンではもしかしたらオプションが変更されているかもしれません。
C:\Program Files\WGET>wget -V
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = c:/progra~1/wget/etc/wgetrc
GNU Wget 1.11.4
Copyright (C) 2008 Free Software Foundation, Inc.
以上です。