Scrape-LE について
Scrape-LEはヘッドレスChromiumでURLを確認し、スクレイパーを作る前に取得条件を評価する開発者向けツールです。ページ情報に加え、robots.txtの規則、レート制限、ボット対策の兆候、認証障壁を検出します。
主な機能
- 01ヘッドレスChromiumでURLを読み込み
- 02パスに対するrobots.txt規則を評価
- 03レート制限とボット対策の兆候を検出
- 04認証障壁とページエラーを報告
- 05ページ全体のスクリーンショットを保存
活用シーン
- 01スクレイパー実装前に対象ページを確認
- 02クローラーの許可範囲とクロール遅延を確認
- 03ブロックや認証が必要なページを診断
MCP 対応
MCPサーバーはstdio経由で `analyze_robots_txt` ツールを提供します。渡されたrobots.txtの内容とパスを評価し、URL取得やネットワークリクエストは行いません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 今日に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | はい | 確認するパス。例:"/admin"。完全な URL も受け付け、パス部分に変換します。 |
| agent | string | いいえ | 評価対象のクローラー。例:"Googlebot"、"MyBot/1.0"。製品トークンで大文字と小文字を区別せずに照合します。省略すると、汎用ルールの結果を返します。 |
| content | string | はい | robots.txt ファイルの内容。 |
| maxResults | integer | いいえ | 返される拒否パスの上限(デフォルトは 500)。meta.truncated は、破棄された結果があるかどうかを示します。 |
詳細
Scrape-LE:手間いらずのスクレイピング可否チェック
ヘッドレス Chromium で URL を読み込み、スクレイパーを書く前に妨げになる要因を確認できます
アンチボットベンダー、レート制限、robots.txt のルール、ログイン画面、コンソールエラー、スクリーンショット
便利だと思いましたか? スターや評価を付けると、ほかの開発者にも見つけてもらいやすくなります — ★ GitHub · ★ Open VSX · ★ Marketplace
できること
Scrape-LE: Check URL Scrapeability を実行して URL を入力すると、実際のヘッドレス Chromium でページが読み込まれます。レポートは出力チャンネルに表示され、HTTP ステータス、ページタイトル、読み込み時間、コンソールエラー、ページ全体のスクリーンショット、4 種類の検出結果を確認できます。VS Code に加え、Cursor や VSCodium などの VS Code ベースのエディターでも動作します(Open VSX からインストールできます)。
初回のみ、Scrape-LE: Setup Browser を実行して Chromium をインストールします(約 130MB、Playwright のブラウザーキャッシュ内)。
インストール
| 場所 | 利用できるもの | インストール |
|---|---|---|
| VS Code | エディター内で、キー操作ひとつで同じチェックを実行 | Marketplace |
| Cursor、VSCodium、Windsurf | 同じ拡張機能 | Open VSX |
| ターミナルまたは CI のステップ | 単一 URL または複数 URL のチェックを実行し、終了コードを取得 | npx scrape-le · npm または cargo install scrape-le · crates.io |
| Node 経由で利用する任意の MCP エージェント | stdio 経由の analyze_robots_txt | npx scrape-le-mcp · npm |
AI エージェントから使用する
同じエンジンがMCPサーバーとして動作するため、コマンドを実行する代わりにエージェントから直接呼び出せます。
| エディター | 方法 |
|---|---|
| VS Code 1.101+ | インストール不要です。拡張機能がエージェントモードに analyze_robots_txt を登録します |
| Claude Code | claude mcp add scrape-le -- npx -y scrape-le-mcp |
| Cursor、Windsurf、その他すべて | npx scrape-le-mcp を指定します |
analyze_robots_txt(content, path, agent?, maxResults?)
robots.txt の内容とパスを指定すると、ルールでそのパスのクロールが許可されているかを報告します。許可される場合は agent を指定するグループのルールを、そうでない場合は汎用の(User-agent: *)ルールを適用し、回答内の agent でどちらのルールを使ったかを示します。さらに、クロール遅延、クロールを許可しないパターン、サイトマップも返します。
サーバーはコンテンツを受け取ってデータを返すもので、ファイルを読み取ったり、独自にネットワークリクエストを送信したりすることはありません。npm では scrape-le-mcp として、MCP レジストリでは io.github.nolindnaidoo/scrape-le として公開されています。
手動で設定する — MCP 設定ファイルを使う任意のホスト
ほとんどのホストは JSON 設定ファイルを読み込みます。エントリーを 1 つ追加します。
{
"mcpServers": {
"scrape-le": {
"command": "npx",
"args": ["-y", "scrape-le-mcp"]
}
}
}
初回実行時に -y を指定すると、インストール確認を省略できます。リリースを追跡せず特定のバージョンに固定したい場合は、[email protected] のように指定します。
起動のたびに npx を実行したくない場合は、1 回だけインストールして、代わりにバイナリを指定してください。
npm install -g scrape-le-mcp
{
"mcpServers": {
"scrape-le": { "command": "scrape-le-mcp" }
}
}
stdio 経由で MCP を通信し、環境変数、API キー、独自の設定は必要ありません。何かに組み込む前に動作を確認するには、次を実行します。
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx -y scrape-le-mcp
ツールの一覧を出力して終了します。analyze_robots_txt が表示されれば、サーバーは動作しています。
CLI
同じチェックをターミナルまたはエージェントのループから実行できます。このリポジトリの crate/ にある Rust CLI は、拡張機能と同じ署名コーパス(crate/signatures/ と crate/fixtures/)を共有しているため、URL の判定が両者で食い違うと CI が失敗します。
scrape-le https://example.com/search # summary on stderr, JSON on stdout when piped
scrape-le --input urls.txt # a batch, streamed as it completes
scrape-le mcp # the same check over MCP on stdio
npm(scrape-le)または crates.io(scrape-le)からインストールできます。 どちらも同じ scrape-le コマンドをインストールします。
npm install -g scrape-le # or run it once: npx scrape-le
cargo install scrape-le
終了コードが回答を示します。0 は問題なし · 1 は明確な否定 · 2 は質問の形式が不正です。
検出項目
| 検出項目 | 動作 |
|---|---|
| ボット対策ベンダー | レスポンスヘッダー、スクリプトのソース、DOM 要素、window グローバルを調べ、Cloudflare(Turnstile チャレンジを含む)、reCAPTCHA、hCaptcha、DataDome、PerimeterX のフィンガープリントを検出します |
| レート制限 | X-RateLimit-* / RateLimit-* / Retry-After レスポンスヘッダー、および HTTP 429 を検出します |
| robots.txt | <origin>/robots.txt を取得し、RFC 9309 の仕様に従って URL に対するルールを評価します。scrape-le.robotsTxt.agent が設定され、グループ名と一致する場合はそのグループを使用し、それ以外は User-agent: * を使用します。レポートにはどのグループが適用されたかが表示されます。グループ化されたエージェント、Allow / Disallow の最長一致、* ワイルドカード、$ アンカー、クロール遅延、サイトマップに対応します |
| 認証 | HTTP 401/403、ログインフォーム(パスワードフィールドとユーザー名フィールド)、ページテキスト内の認証関連キーワード、最終 URL の認証関連パスセグメントを検出します |
制限について:シグネチャは、公開されている統合パターンを基にしたベストエフォートのフィンガープリントです。ウィジェットが検出されても、そのページでチャレンジが表示される可能性があることを示すだけで、実際に表示されるとは限りません。また、問題が検出されなくても、そのサイトがスクレイピングを許可している証拠にはなりません。scrape-le.robotsTxt.agent が空の場合、評価されるのは User-agent: * のグループのみです。ページの検出では、読み込み後にネットワークがアイドル状態になるまで最大 5 秒待機します。そのため、それより後にレンダリングされるコンテンツは検出できない場合があります。
コマンド
| コマンド | 説明 |
|---|---|
Scrape-LE: Check URL Scrapeability | URL の入力を求め、すべてのチェックを実行します |
Scrape-LE: Check Selected URL | 現在選択されている URL をチェックします(右クリックメニューからも実行できます) |
Scrape-LE: Setup Browser | Chromium ブラウザーをインストールまたは確認します |
Scrape-LE: Open Settings | Scrape-LE の設定を開きます |
Scrape-LE: Help & Troubleshooting | 組み込みドキュメントを開きます |
デフォルトでは、どのコマンドにもキーは割り当てられていません。エディターの Keyboard Shortcuts で、任意のキーを割り当ててください。
設定
| 設定 | デフォルト値 | 説明 |
|---|---|---|
scrape-le.browser.timeout | 30000 | ページ読み込みのタイムアウト(ミリ秒、5000~120000) |
scrape-le.browser.viewport.width | 1280 | ビューポートの幅 |
scrape-le.browser.viewport.height | 720 | ビューポートの高さ |
scrape-le.browser.userAgent | "" | カスタム User-Agent(空の場合は Chromium のデフォルト) |
scrape-le.retry.userAgents | false | チェックがブロックされた場合、または失敗した場合に、一般的な User-Agent で再試行し、成功したものを報告します |
scrape-le.screenshot.enabled | true | チェックごとにページ全体のスクリーンショットを保存します |
scrape-le.screenshot.path | .vscode/scrape-le | スクリーンショットのディレクトリ(ワークスペース相対パスまたは絶対パス) |
scrape-le.screenshot.format | png | png または jpeg |
scrape-le.screenshot.quality | 90 | JPEG の品質(0~100、png の場合は無視されます) |
scrape-le.checkConsoleErrors | true | 読み込み中にコンソールエラーとページエラーを記録します |
scrape-le.detections.antiBot | true | ボット対策ベンダーを検出します |
scrape-le.detections.rateLimit | true | レート制限を検出します |
scrape-le.detections.robotsTxt | true | robots.txt を取得して評価します |
scrape-le.robotsTxt.agent | "" | クローラーが robots.txt で使用するエージェント(例:Googlebot、MyBot/1.0)。空の場合、またはいずれのグループ名とも一致しない場合は、User-agent: * のルールが使用されます |
scrape-le.detections.authentication | true | 認証ウォールを検出します |
scrape-le.notificationsLevel | important | all = すべての通知、important = 警告とエラー、silent = エラーのみ |
scrape-le.statusBar.enabled | true | ステータスバー項目を表示します |
言語
英語以外に 12 言語に対応しています。
ドイツ語 · スペイン語 · フランス語 · インドネシア語 · イタリア語 · 日本語 · 韓国語 · ポルトガル語(ブラジル) · ロシア語 · ウクライナ語 · ベトナム語 · 中国語(簡体字)
両方の部分が対象です。マニフェスト(コマンドタイトル、設定名と説明)と、拡張機能の実行中に表示されるすべての内容(通知、ステータスバー、クイックピック、プロンプト)が翻訳されています。拡張機能は VS Code の表示言語に従うため、エディターの現在の設定と自動的に一致します。独自の設定はありません。
プライバシーとセキュリティ
- ネットワークアクセスは機能の一部であり、範囲が限定されています。 チェックで接続するのは、入力した URL(ヘッドレス Chromium で読み込み、ブラウザーと同様にそのページのリソースを取得します)と、そのオリジンの
/robots.txtの 2 つだけです。それ以外にデータが送信されることはありません。テレメトリーや分析もありません。 - スクリーンショットはローカルに保存され、ワークスペース内の設定済みパスに書き込まれます。
- MCP サーバーはネットワークリクエストを一切行いません。拡張機能とは異なり、意図的にそうしています。
fetchRobotsTxtは任意のオリジンから URL を組み立てますが、エージェントのループ内では SSRF の脆弱性につながり得ます。URL を指定する呼び出し元はユーザーではなくモデルだからです。サーバーは、すでに取得済みの robots.txt の内容を分析します。また、どのツールもurl引数を受け取らないことをテストで検証しています。 - エラー通知では、ホームディレクトリと認証情報に見える文字列を伏せます。
- チェック対象のサイトを尊重してください。スクレイピング可能かどうかのレポートは情報であり、許可ではありません。
- 評価を促すプロンプトは 1 回、最大 2 回までです。 3 回目の正常な使用時に、拡張機能は評価するかどうかを一度だけ尋ねます。Later を選択するか、通知を閉じた場合は、20 回目にもう一度尋ねます。Don't Ask Again を選択すると、以後は表示されません。
notificationsLevelをimportantまたはsilentに自分で設定すると、この機能は無効になります。回数は VS Code の拡張機能ストレージに保存され、外部に送信されることはありません。Rate を選択すると、ブラウザーでインストール元の一覧(VS Code Marketplace または Open VSX)が開きます。
ドキュメント
| 内容 | 場所 |
|---|---|
| ツールが扱える内容 — 範囲、出力の契約、拒否、対象外事項 | crate/SPEC.md |
| 拡張機能の構築と内部構成 — アーキテクチャ、不変条件、ツールチェーン、リリース | AGENTS.md |
| CLI の構築と内部構成 | crate/AGENTS.md |
| 変更内容 | CHANGELOG.md · crate/CHANGELOG.md |
| このツールのページと、ほかの 15 個のツール | letools.dev/tools/scrape-le |
パフォーマンス
| 入力 | サイズ | 検出数 | 時間 | レート | スキャン速度 |
|---|---|---|---|---|---|
| ヘッダー署名スキャン | 2.83 MB | 20,000 | 7.24 ms | 2,762,876/sec | 390.5 MB/s |
| robots.txt パスマッチ | 3.32 MB | 60,000 | 14.41 ms | 4,164,654/sec | 230.4 MB/s |
Apple M5 Pro、24 GB RAM、Node 24.3.0 で、ウォームアップ後に 7 回実行した中央値です。入力はチェックインせず、scripts/benchmark.ts で生成するため、上記のサイズは実測値そのものです。bun run benchmark で再現できます。
これらの数値はマシン固有であり、CI では検証されません。ビルドを左右するベンチマークでわかるのは、実行環境の負荷状況だけです。
テスト
| 指標 | カバレッジ |
|---|---|
| ステートメント | 76.08% |
| 分岐 | 68.02% |
| 関数 | 82.75% |
| 行 | 78.97% |
40 ファイルにわたる 527 件のテストケースに加え、実際の VS Code 拡張機能ホストで実行する統合テストスイートと、ビルドした .vsix をクリーンなプロファイルにインストールするエンドツーエンドテストがあります。
実行結果(coverage/coverage-summary.json と coverage/test-results.json)から scripts/coverage-readme.js で生成しています。このセクションにずれがあると CI は失敗します。bun run test:coverage で再現でき、ケース数は vitest の出力値です。
LE ファミリーのその他のツール
あらゆるモデルが直面する作業に対応する、単機能ツールが16個あります。それぞれに Rust CLI と MCP サーバーが付属します。詳細はこちら:letools.dev
取り出す
- String-LE — コードベース内のすべての文字列を抽出し、人が読めるようにします
- Numbers-LE — コードベース内のすべてのハードコードされた数値を抽出し、人が確認できるようにします
- Units-LE — 単位付きの数量をすべて抽出して正規化し、曖昧なものは名前を示して対象外にします
- Dates-LE — すべての日付とタイムスタンプ、およびそれぞれが解決される正確な時点を抽出します
- IDs-LE — UUID、ULID、NanoID、ObjectId、Snowflakeをすべて抽出し、内部に含まれる時刻をデコードします
- IPs-LE — IPアドレス、CIDRブロック、MACアドレスをすべて抽出し、正規化してスコープ別に分類します
- URLs-LE — コードベース内のすべてのURLを、プロトコルと正確な位置情報とともに抽出します
- Paths-LE — コードベース内のすべてのファイルパスを抽出し、現在も何かを指しているかどうかを示します
- Colors-LE — コードベース内のすべての色を抽出し、パレットにない色を示します
チェックする
- Regex-LE — コードベース内のすべての正規表現を検出し、壊滅的なバックトラッキングを引き起こす可能性があるものを報告します
- Versions-LE — リポジトリ内のマニフェスト間で、同じ依存関係のバージョン制約が異なる箇所を検出します
- i18n-LE — プロジェクトで使用している i18n ライブラリを特定し、そのライブラリのルールに基づいてカタログを監査します
- Scrape-LE — スクレイパーを書く前にページをスクレイピングできるか確認し、判定できない場合はその旨を示します
保護する
- Secrets-LE — コードベース内のハードコードされた認証情報を検出し、レポートに表示することはありません
- EnvSync-LE — ディレクトリツリー内の dotenv ファイルを比較し、どのファイルにどのキーがないかを示します
- Unicode-LE — 意味を隠す Unicode を検出します。双方向制御文字、不可視文字、ホモグリフ、混在スクリプトが対象です
それぞれが独立しています。共有クレートも、公開されたコアもありません。2つのツールが同じ答えにたどり着くとすれば、それはその答えが2度正しかったからです。
お問い合わせ — nolindnaidoo.com · GitHub · LinkedIn
nolindnaidoo によるその他のプロジェクト
Rust — pixelcoords と pixelactions は一連のループを構成します。pixelcoords が 場所 に答え、pixelactions がそこで 操作 します。それぞれ独自のツールと独自の方針を持ち、LE ファミリーには属しません。
- pixelcoords — 画面を固定し、領域を指定して、ピクセル単位で正確な座標と切り抜きを取得します pixelcoords.dev · crates.io · docs.rs
- pixelactions — 人が検証した座標を受け取り、操作を実行して、反映されたことを確認します pixelactions.dev · crates.io · docs.rs
ライセンス
MIT © nolindnaidoo
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。