wgetでBasic認証をかけたサイトをクロールしてURL一覧を取得する方法

Basic認証で保護されたサイトの構造を把握したいとき、ブラウザで1ページずつ確認するのは非効率です。wget--spiderモードを使えば、実際にファイルをダウンロードすることなく、サイト内のURL一覧だけを効率的に取得できます。

基本コマンド

wget --user=USERNAME --password=PASSWORD \
     --spider -r -np -nv \
     -o wget_crawl.log \
     https://example.com/blog3/

このコマンドを実行すると、wget_crawl.logにクロール結果が記録されます。実ファイルの保存は行われないため、ディスク容量を気にせず大規模なサイトでも安全に試せます。

オプションの意味

オプション意味
--user / --passwordBasic認証の資格情報を指定
--spiderダウンロードせず、存在確認のみ行う(クロール専用モード)
-rリンクを再帰的にたどる
-np指定したディレクトリより上の階層には登らない(no-parent)
-nvno-verboseモード。1行1URLの簡潔な形式でログ出力される
-oログの出力先ファイルを指定

-nvのログは次のような形式で出力されます。

2026-07-04 12:00:00 URL:https://example.com/blog3/page1.html 200 OK
2026-07-04 12:00:01 URL:https://example.com/blog3/page2.html 200 OK

URLだけを抽出する

日時やステータスコードを除き、URLだけを一覧化したい場合はgrepsedを組み合わせます。

grep -o 'URL:[^ ]*' wget_crawl.log | sed 's/URL://' > site_urls.txt

ステータスコード(200・401など)も一緒に確認したい場合は、以下のようにします。

grep -o 'URL:[^ ]* [0-9]* .*' wget_crawl.log | sed 's/URL://' > site_urls_with_status.txt

アクセス制御の検証(どのURLが認証を通過できているか、どのUser-Agentでブロックされるかなど)を行う際は、こちらの形式のほうが役立ちます。

実務でよく使う追加オプション

再帰の深さを制限する

-l 5   # 5階層までに制限。無制限にする場合は -l inf

robots.txtを無視する(検証目的)

-e robots=off

WordPressなど、物理的なrobots.txtファイルが存在しなくても動的に仮想robots.txtを生成するCMSもあるため、クロール結果の解釈がぶれないよう明示的に無効化しておくと安定します。

User-Agentを偽装して挙動を比較する

-U "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

特定のクローラー(Googlebotや他の自動巡回ボットなど)がBasic認証環境でどう扱われるかを検証したい場合、User-Agentを差し替えて複数回クロールし、サーバー側のアクセスログでレスポンスコード(200/401)を突き合わせることで、.htaccess側の許可設定が意図通りに機能しているかを確認できます。

自己署名証明書のSSLエラーを回避する

--no-check-certificate

まとめのコマンド例

これまでの内容をまとめると、実務ではこのような形が使いやすくなります。

wget --user=USERNAME --password=PASSWORD \
     --spider -r -np -nv -e robots=off \
     --no-check-certificate \
     -o crawl.log \
     https://example.com/target-dir/

grep -o 'URL:[^ ]* [0-9]* .*' crawl.log | sed 's/URL://' > urls_with_status.txt

まとめ

  • --spiderモードならファイルを保存せずにサイト構造を確認できる
  • -nvログをgrep/sedで加工すれば、URL一覧やステータスコード一覧を簡単に作れる
  • User-Agentを切り替えたクロールとアクセスログの突き合わせは、Basic認証環境でのアクセス制御検証に有効な手法
  • 動的に生成されるrobots.txtの影響を受けないよう、検証目的では-e robots=offを明示するのが安全

コメント