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

この記事は最終更新日から3年以上が経過しています。
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

関連

suin
Qiita 4位/TypeScript入門書執筆中/TypeScripterのための座談会「YYTypeScript」主催/『実践ドメイン駆動設計』書籍邦訳レビュア/分報Slack考案/YYPHP主催/CodeIQマガジン執筆/株式会社クラフトマンソフトウェア創設/Web自動テスト「ShouldBee」の開発/TypeScript/DDD/OOP
https://yyts.connpass.com/
craftsman_software
「インフラの心配は、もうおしまい」 インフラ運用を自動化し、手作業を限りなくゼロにする会社
ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
この記事は以下の記事からリンクされています
ntkgcjwgetコマンドからリンク
コメント
サービス利用規約に基づき、このコメントは削除されました。
(編集済み)

「たとえば、https://example.com/fooのようにすると、/foo以下がダウンロード対象。」との記述は間違いです。

単に/fooとすると、fooという名前の単一ファイルと見なされ、ディレクトリとは認識されません。
fooディレクトリ以下を指定したいのであれば、/foo/とする必要があります。

このことはWget公式ドキュメントの--no-parentの項に記載されています。

あなたもコメントしてみませんか :)
すでにアカウントを持っている方は
ユーザーは見つかりませんでした