web-scraper について
web-scraper は、ウェブページを取得してローカルに保存するコマンドラインスキルで、ページのアーカイブやドキュメント収集に使えます。ブラウザー自動化なしで、HTML・Markdown 出力、画像保存、範囲を指定した再帰クロールに対応します。
主な機能
- 01単一ウェブページの取得
- 02HTML または Markdown への出力
- 03画像のローカル保存
- 04範囲を指定したリンク追跡
- 05robots.txt の順守とリクエスト速度の調整
活用シーン
- 01ウェブページのオフライン保存
- 02同一ドメイン内のドキュメントのアーカイブ
- 03ページ本文と関連画像の保存
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ agentbay-ai/ agentbay-skills --skill web-scraperインストール後、Claude Code で/web-scraperを入力して読み込まれたか確認します。
同梱ファイルrequirements.txtscripts/scrape.py
詳細
Web スクレイパー
Web ページのコンテンツ(テキスト+画像)を取得し、HTML または Markdown としてローカルに保存します。
最小限の依存関係:必要なのは requests と beautifulsoup4 のみです。ブラウザー自動化は不要です。
デフォルトの動作:画像は自動的にローカルの images/ ディレクトリにダウンロードされます。
クイックスタート
単一ページ
{baseDir}/scripts/scrape.py --url "https://example.com" --format html --output /tmp/page.html
{baseDir}/scripts/scrape.py --url "https://example.com" --format md --output /tmp/page.md
再帰(リンクをたどる)
{baseDir}/scripts/scrape.py --url "https://docs.example.com" --format md --recursive --max-depth 2 --output ~/Downloads/docs-archive
セットアップ
Python 3.8 以降と最小限の依存関係が必要です。
cd {baseDir}
pip install -r requirements.txt
または、手動でインストールします。
pip install requests beautifulsoup4
注:ブラウザーやドライバーは不要です。純粋な HTTP リクエストを使用します。
収集する入力情報
単一ページモード
- URL:スクレイピングする Web ページ(必須)
- 形式:
htmlまたはmd(デフォルト:html) - 出力パス:ファイルの保存先(デフォルト:自動生成された名前で現在のディレクトリに保存)
- 画像:デフォルトで画像をダウンロードします(無効にするには
--no-download-imagesを使用)
再帰モード(--recursive)
- URL:再帰スクレイピングの開始点
- 形式:
htmlまたはmd - 出力ディレクトリ:スクレイピングしたすべてのページの保存先
- 最大深度:リンクをたどる階層の上限(デフォルト:2)
- 最大ページ数:スクレイピングするページの合計上限(デフォルト:50)
- ドメインフィルター:同じドメイン内に限定するかどうか(デフォルト:はい)
- 画像:デフォルトで画像をダウンロードします
会話の流れ
- スクレイピングする URL をユーザーに尋ねます
- 希望する出力形式(HTML または Markdown)を尋ねます
- 注:どちらの形式も、デフォルトでテキストと画像を含みます
- HTML:ダウンロードした画像とともに元の構造を保持します
- Markdown:ダウンロードした画像を
images/フォルダーに保存した、すっきりとしたテキスト形式です
- 再帰モードの場合:最大深度と最大ページ数を尋ねます(任意。適切なデフォルト値があります)
- 保存先を尋ねます(または
/tmp/や~/Downloads/などのデフォルトパスを提案します) - スクリプトを実行し、成功したことを確認します
- 保存したファイルまたはディレクトリのパスを表示します
例
単一ページのスクレイピング
HTML として保存
{baseDir}/scripts/scrape.py --url "https://docs.openclaw.ai/start/quickstart" --format html --output ~/Downloads/openclaw-quickstart.html
Markdown として保存(画像を含む、デフォルト)
{baseDir}/scripts/scrape.py --url "https://en.wikipedia.org/wiki/Web_scraping" --format md --output ~/Documents/web-scraping.md
結果:web-scraping.md と、ダウンロードしたすべての画像を含む images/ フォルダーが作成されます(テキスト+画像)。
画像をダウンロードせずに保存(任意)
{baseDir}/scripts/scrape.py --url "https://example.com" --format md --no-download-images
結果:テキストと画像 URL のみが保存されます(ローカルにはダウンロードされません)。
ファイル名を自動生成
{baseDir}/scripts/scrape.py --url "https://example.com" --format html
# Saves to: example-com-{timestamp}.html
再帰スクレイピング
基本的な再帰クロール(深度 2、同じドメイン、画像を含む)
{baseDir}/scripts/scrape.py --url "https://docs.example.com" --format md --recursive --output ~/Downloads/docs-archive
出力構成(すべてのページのテキスト+画像):
docs-archive/
├── index.md
├── getting-started.md
├── api/
│ ├── authentication.md
│ └── endpoints.md
└── images/ # Shared images from all pages
├── logo.png
└── diagram.svg
カスタム制限での詳細なクロール
{baseDir}/scripts/scrape.py \
--url "https://blog.example.com" \
--format html \
--recursive \
--max-depth 3 \
--max-pages 100 \
--output ~/Archives/blog-backup
robots.txt を無視する(注意して使用してください)
{baseDir}/scripts/scrape.py \
--url "https://example.com" \
--format md \
--recursive \
--no-respect-robots \
--rate-limit 1.0
より高速なスクレイピング(レート制限を緩和)
{baseDir}/scripts/scrape.py \
--url "https://yoursite.com" \
--format md \
--recursive \
--rate-limit 0.2
機能
単一ページモード
- HTML 出力:元のページ構造を保持します
- ✅ すっきりとした読みやすい HTML ドキュメント
- ✅ すべての画像を
images/フォルダーにダウンロード - ✅ オフラインでの閲覧に適しています
- Markdown 出力:読みやすいテキストコンテンツを抽出します
- ✅ ローカルの
images/ディレクトリに画像を自動ダウンロード(デフォルト) - ✅ 画像 URL を相対パスに変換
- ✅ アーカイブに適した、すっきりとした読みやすい形式
- ✅ ダウンロードに失敗した場合は元の URL にフォールバック
- 元の URL のみを保持するには、
--no-download-imagesフラグを使用します
- ✅ ローカルの
- シンプルで高速:純粋な HTTP リクエストを使用するため、ブラウザーは不要です
- ファイル名の自動生成:指定がない場合、URL から安全なファイル名を生成します
再帰モード(--recursive)
- ✅ インテリジェントなリンク検出:クロールしたページ上のリンクをすべて自動的にたどります
- ✅ 深さの制御:
--max-depthでクロールする階層数を制限します(デフォルト:2) - ✅ ページ数の上限:
--max-pagesで、クロールが際限なく続くのを防ぐために合計ページ数を制限します(デフォルト:50) - ✅ ドメインのフィルタリング:
--same-domainで開始ドメイン内にクロールを制限します(デフォルト:オン) - ✅ robots.txt への準拠:デフォルトでサイトのクロールルールに従います
- ✅ レート制限:
--rate-limitでリクエスト間に遅延を設けます(デフォルト:0.5s) - ✅ スマート URL フィルタリング:画像、スクリプト、CSS、重複 URL をスキップします
- ✅ 進行状況の追跡:成功・失敗・スキップの件数をコンソールにリアルタイムで出力します
- ✅ 整理された出力:ディレクトリ階層で URL の構造を保持します
- ✅ 効率的なクロール:サーバーに配慮し、レート制限を設けながら順次クロールします
ガードレール
単一ページモード
- robots.txt とサイトの利用規約を遵守してください
- 自動アクセスをブロックするサイトもあります。このツールは標準的な HTTP リクエストを使用します
- 画像が多い大きなページは、ダウンロードに時間がかかることがあります
再帰モード
- 少ない設定から開始:まず
--max-depth 1 --max-pages 10でテストしてください - robots.txt を遵守:デフォルトではオンです。
--no-respect-robotsは自分が所有するサイトでのみ使用してください - レート制限:デフォルトの 0.5s は適切です。公開サイトでは 0.2s 未満にしないでください
- 同一ドメイン:
--same-domainを有効にしておくことを強く推奨します - 進行状況の監視:失敗率が高い場合は、ブロックされている可能性があります
- ストレージ:再帰クロールでは多数のファイルが生成されることがあります。十分なディスク容量を確保してください
- 法的事項:対象サイトをクロールしてアーカイブする許可を得ていることを確認してください
トラブルシューティング
- 接続エラー:インターネット接続と URL が有効かどうかを確認してください
- 403/ブロック:スクレイピングをブロックするサイトもあります。このツールは実際のブラウザーに近い User-Agent ヘッダーを使用します
- タイムアウト:読み込みの遅いページでは
--timeoutフラグを大きくしてください(値の単位は秒です) - 画像のダウンロード失敗:画像は元の URL にフォールバックします
- 画像の欠落:JavaScript で画像を動的に読み込むサイトもあります(非対応)
コメント
Markdown 対応