Edited at

wgetでサイト全体をまるごとダウンロードする(認証後ページも)

More than 1 year has passed since last update.

wget --mirror \

--page-requisites \
--span-hosts \
--quiet --show-progress \
--no-parent \
--convert-links \
--no-host-directories \
--adjust-extension \
--execute robots=off \
https://example.com


パラメータの説明



  • --mirror: リンクを辿って再帰的にダウンロードする。タイムスタンプをチェックして新しいものだけダウンロードする。


  • --page-requisites: ページが使っている画像・CSS・JSをダウンロードします。


  • --span-hosts: ホストをまたがってダウンロードします。


  • --quiet --show-progress: 進捗を1ダウンロードあたり1行で表示する設定です。コンソールがうるさくなくなって良い。


  • --no-parent: 親ディレクトリは辿らない。ダウンロードしない。


  • --convert-links: CSS・JSへの参照がURLになっている部分を相対パスに変換します。


  • --no-host-directories: ホスト名でディレクトリを作らない設定です。


  • --adjust-extension: 拡張子がついていないファイルに拡張子をつける。例えば、/usersというHTMLはusers.htmlとして保存されます。


  • --execute robots=off: robots.txtを無視する。


  • https://example.com: ダウンロードを開始する起点です。起点をサブディレクトリにするとサブディレクトリ以下がダウンロードされます。たとえば、https://example.com/fooのようにすると、/foo以下がダウンロード対象。


ケースバイケースの設定


認証しないと閲覧できないコンテンツがある場合

認証しないと閲覧できないページがある場合、セッションIDが含まれているCookieヘッダを追加する。Cookieヘッダはブラウザの開発ツールで調べると良い。--headerオプションを追加する。

wget --mirror \

--header='Cookie: _session_id=xxxxxxxxxxxxxxxxxxxxxxxxx' \
... \
https://example.com


保存先のディレクトリを指定したい場合

2つ方法がある。


  1. 保存先にcdしてwgetする。


  2. --directory-prefixを指定する。

wget --mirror \

--directory-prefix=mywebsite \
... \
https://example.com

この場合、カレントディレクトリにmywebsiteディレクトリが作られ、その中にダウンロードしたファイルが集まる。


保存対象のディレクトリを指定したい場合

保存する対象をしぼるときは、--include-directoriesを使う。複数指定できる。

wget --mirror \

--include-directories=/foo,/bar,/buz \
... \
https://example.com

関連