完全に自分向けの備忘録です。
ウェブサイトのデータ移行や調査などを行う際、よくお世話になるのがwget。
オプションが豊富で、たいがいなんでもできてしまうのですが、「これをやりたいときにどうオプションを指定すればよいか」という、目的から逆引きで考えると、迷うことが多い。
忘れないように、メモしておきます。
ウェブサイトのデータを丸ごと取得したい
wget -r http://example.com
よく使う
ウェブサイトのデータを上位3階層に限定して取得したい
wget -r -l 3 http://example.com
-l はlevelの略。-l の後に数字を付与して階層を限定する
wget実行中に取得状況を表示しない
wget -q -r http://example.com
-q はquietの略。
日本語ファイルを文字化けせずに取得したい
wget --restrict-file-names=nocontrol -r http://example.com
--restrict-file-names オプションは、エスケープ処理の方法を決めるオプション。nocontrolをつけると、何も手を加えずそのままwgetする。
"unix"を指定すると、"/(スラッシュ)" ほかコントロール文字列をエスケープ処理する。"windows"などの指定もできる。
詳しくはマニュアル参照。
ファイルに記述されたURLリストに従いwgetしたい。ただし階層構造はそのままで取得したい
wget -x -i list.txt
単純にリストに基づきファイル類をwgetするなら、-i ファイル名 でok。-x オプションをつけると、階層構造を保持するために、必要に応じてディレクトリを自動的に生成する。
-xオプションを付けない場合、wgetコマンドを実行したディレクトリ上にすべてのファイルを保存してしまう。
.htaccess で画像引用を制限しているサイトのデータをすべて取得する
wget -r http://example.com --referer="http://example.com"
外部のウェブサイトに画像を引用されないように.htaccessで制限をかけている場合があります。例えば以下の様な設定。
SetEnvIf Referer "^http://example\.com" ref_ok
order deny,allow
deny from all
allow from env=ref_ok
この場合、リファラを指定して、同一ドメイン内からのアクセスしているように見せることでファイルの取得ができる。
ユーザーエージェントを指定してデータをすべて取得する
wget -r http://example.com --user-agent="Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36"
--user-agent で指定する。例は Widnows + Chrome でwgetしている。
iOS や Android も指定可能
あるサイト内の jpg,png,gif といった画像ファイルのみ取得したい
wget -A jpg,gif,png -r http://example.com
-A はaccept の略。ダウンロードしたいファイルの拡張子を、-A の後にカンマ区切りで指定する。マニュアルを見ると、ワイルドカードなども使えるらしい。
あるサイト内のjpg,png,gif といった画像ファイルを除外してデータ取得したい
wget -R jpg,gif,png -r http://example.com
先ほどのパターンと逆。-Rはrejectの略。-Aオプション同様に、カンマ区切りで指定してダウンロードしたくない拡張子を記述する。
以後、随時追記予定
参考:
http://www.rationallyparanoid.com/articles/wget.html
https://www.gnu.org/software/wget/manual/wget.html