Tony Wang10 分で読めますAIによるWebスクレイピング — 2026年エージェントのデータ取得法
2026年にAIエージェントがWebをスクレイピングする方法 — LLM抽出、MCPツール呼び出し、n8nワークフロー。動く設定例つきで、なぜアンチボットのアクセスがボトルネックなのかも解説します。
AI エージェントのデモはいつも同じ結末を迎えます。モデルは見事に推論し、タスクを計画し、そして実際の Web サイトからデータが必要になった瞬間に壁にぶつかるのです。AI による Web スクレイピングは 3 つの異なるパターンで機能します。LLM が取得済みページからフィールドを抽出するか、エージェントが Function Calling や MCP 経由で構造化データツールを呼び出すか、あるいは LLM がスクレイパーのコードを代わりに書くか — それぞれコスト、失敗モード、輝く場面が異なります。このガイドでは 3 つすべてを動く例つきで解説し、その後、多くのチュートリアルが避けて通る不都合な部分に踏み込みます。2026 年のボトルネックは知能ではありません。アクセスです。エージェントは他のあらゆるボットをブロックするのと同じアンチボットシステムにブロックされ、どれだけ推論を重ねても 403 は直りません。
まだ DIY の土台を作っている段階なら、まずは柱となるガイド web scraping with Python から始めてください — ここでの内容はすべてその基礎の上に成り立っています。
2026 年、AI が Web スクレイピングを行う 3 つの方法
「AI Web スクレイピング」という言葉は 3 つの異なるアーキテクチャに対して使われており、それらを混同することが、プロジェクトが誤ったトレードオフに行き着く原因です。(ツールを直接比較したランキングが見たい場合は別記事があります: the best AI web scraping tools in 2026。セレクタベースのスクレイピングとの原理的な比較は AI vs traditional web scraping をご覧ください。)
パターン 1: 抽出器としての LLM
自前の HTTP クライアントやフェッチサービスでページを取得し、Markdown に変換して、「商品名・価格・在庫状況を JSON で抽出して」といったプロンプトとともにモデルに渡します。この形を切り拓いたのは Firecrawl と Jina で、その功績は正当に評価されるべきです。両者の LLM 対応 Markdown エンドポイントが、「ページをそのままモデルに食わせる」をハックではなく実用的なデフォルトにしました。
強みは本物です。書くべきセレクタも、保守すべきパーサーもなく、CSS セレクタを壊すようなレイアウト変更でもモデルはたいてい混乱しません。Firecrawl が引用するベンチマークでは、入力が整形されていれば、構造化 Web 抽出において LLM 抽出は 0.95 を超える F1 スコアに達するとされています。
限界も同じくらい本物です。
- トークンコスト。 生の EC サイトやドキュメントページは 30,000〜100,000 トークンに達することがあります。1 日 1,000 ページの公開されたコスト試算では、生の HTML でおよそ 1 日 200 ドル、Markdown 変換後は約 20 ドル — 約 90% の削減です。DOM プルーニングの研究はさらに進んでおり、抽出品質を損なわずに入力トークンを 97.9% 削減しています。
- 幻覚(ハルシネーション)。 価格を尋ねられたモデルは、ページに存在しない価格を生成することがあります — もっともらしく、型も正しく、そして間違っている。スキーマ検証が捕まえるのは形の誤りであって、捏造された値ではありません。正解データとの抜き取り検査が必要です。
- ページそのものは手に入らない。 LLM 抽出が始まるのはフェッチが成功した後です。Cloudflare のチャレンジやデータセンター IP のブロックを前にしては、世界一賢い抽出器にも抽出するものがありません。
パターン 2: ツールを持つエージェント(Function Calling と MCP)
モデルにページを食わせる代わりに、構造化データを返す呼び出し可能なツールを与えます。google_search 関数、amazon_product ルックアップ、web_scrape エンドポイントなどです。モデルはいつ呼び出すかを自分で決め、正規化された JSON を受け取ります。配線方法は 2 つが主流です。ネイティブの Function Calling(OpenAI の tools、Anthropic の tool use、LangChain)と、MCP — エージェントがサーバーに接続し、そのツールを発見して、専用の統合コードなしに呼び出せるオープン標準の Model Context Protocol です。
これがエージェントを実用にしたパターンであり、理由は単純です。構造化 JSON の検索結果が 2,000 トークン程度なのに対し、同じ結果をレンダリングされた SERP ページとして受け取ると 50,000 トークンになります。エージェントはコンテキストをパースではなく推論に使え、どのレスポンスも同じフィールドが同じ場所にあります — ページごとの不意打ちはなく、自由テキストの抽出ステップがないので幻覚の入り込む余地もありません。
正直な限界もあります。呼び出せるのは存在するツールだけなので、カバー範囲はサーバーの背後にあるカタログ次第です。また、生のマークアップを見る代わりに、プロバイダーの正規化を信頼することになります。どのツールもカバーしないロングテールのページについては、汎用の scrape-to-markdown ツールでパターン 1 にフォールバックします。
パターン 3: AI がスクレイパーを書く
3 つ目のパターンは、LLM を実行時ではなく開発時に使います。サンプル HTML を Claude や ChatGPT に貼り付け、BeautifulSoup のセレクタ、Playwright スクリプト、リトライロジックを書いてもらうのです。現代のモデルはこれが本当に得意で、経済性も逆転します — コード生成に一度だけトークンを払えば、あとはそのコードをどんなボリュームでも無料で回せます。
落とし穴は、それが「執筆が速くなった伝統的スクレイピング」の再発明だということです。生成されたセレクタはサイトが変わると腐ります。手書きのものとまったく同じで、デバッグの代わりに再生成するだけです。そして生成されたコードはあらゆるアクセス問題を受け継ぎます。デフォルトのユーザーエージェント、むき出しのデータセンター IP、フィンガープリント管理の欠如。AI が書いたスクレイパーは、人間が書いたものと同じ割合でブロックされます。
ハンズオン: MCP 経由でエージェントをライブ Web データに接続する
「エージェントが Web を見られない」状態から動くツール呼び出しまでの最速ルートは、ホスト型MCPエンドポイントです。Crawlora は https://mcp.crawlora.net/mcp で Streamable HTTP のエンドポイントを運用しています — インストールも運用も不要で、現在およそ 50 のプラットフォーム(検索エンジン、Google マップ、Amazon、YouTube、TikTok、Reddit、金融データ、汎用の Web スクレイプ)にわたる 600 以上のドキュメント化されたツールを公開しています。まず 無料の API キーを取得 してください — 無料プランはカード登録不要で月 2,000 クレジットです。
Claude Desktop、Claude Code、Cursor、Windsurf など、リモート MCP サーバーをサポートするクライアントなら、MCP 設定にブロックを 1 つ追加するだけです。
{
"mcpServers": {
"crawlora": {
"url": "https://mcp.crawlora.net/mcp",
"headers": { "x-api-key": "YOUR_API_KEY" }
}
}
}
Bearer 認証を好むクライアントは、代わりに Authorization: Bearer YOUR_API_KEY を送れます — エンドポイントは両方を受け付けます。
クライアントを再起動すると、ツール一覧にツールが現れます。そこから先のループは目に見えませんが、理解しておく価値があります。Claude に「MCP サーバーについて Google の上位結果は何と言っている?」と尋ねると、google_search ツールを選び、キーワードや国コードといった引数を送り、ランク付けされた結果の JSON 配列 — タイトル、リンク、スニペット、順位 — を受け取ります。その JSON をツール出力として直接読むため、HTML がコンテキストウィンドウに入ることは一切ありません。追加の質問はすでにコンテキストにあるデータを再利用するので、コストはかかりません。
完全なツールカタログとツールごとのスキーマは MCP ページ と ドキュメント にあります。AI エージェント向け概要 は、エージェントネイティブな側面をより広く扱っています。
ハンズオン: LLM が呼び出せる Python ツール
クライアントを設定するのではなく自分でエージェントを構築するなら、同じアイデアは 20 行ほどで実現できます。REST エンドポイントを関数としてラップし、スキーマで記述し、その両方を任意の Function Calling 対応モデルに渡すだけです。以下は Crawlora の Google Search エンドポイント(ベース https://api.crawlora.net/api/v1 に対する POST /google/search、x-api-key ヘッダーで認証)を包んだ動くツールです。
import os
import requests
def google_search(keyword: str, country: str = "us",
language: str = "en", limit: int = 10) -> dict:
"""Search Google and return structured organic results."""
resp = requests.post(
"https://api.crawlora.net/api/v1/google/search",
headers={"x-api-key": os.environ["CRAWLORA_API_KEY"]},
json={
"keyword": keyword,
"country": country,
"language": language,
"limit": limit, # 10 to 100
},
timeout=30,
)
resp.raise_for_status()
return resp.json()
TOOL_SCHEMA = {
"name": "google_search",
"description": "Search Google and return ranked organic results as JSON "
"(title, link, snippet, position).",
"input_schema": {
"type": "object",
"properties": {
"keyword": {"type": "string", "description": "The search query."},
"country": {"type": "string", "description": "Country code, e.g. us."},
"language": {"type": "string", "description": "Language code, e.g. en."},
"limit": {"type": "integer", "description": "Results to return, 10-100."},
},
"required": ["keyword"],
},
}
TOOL_SCHEMA をモデルプロバイダーの tools パラメータに登録し、モデルがツール呼び出しを出力したら google_search() にディスパッチして、JSON をツール結果として返します。同じ形は LangChain、OpenAI Agents SDK、任意の自作ループで機能します — AI エージェント統合ガイド にフレームワーク別のバージョンがあります。
知っておくべき運用上の詳細が 2 つあります。このエンドポイントは毎秒 1 リクエストの制限を課しており(429 が返ったらバックオフの合図です)、Google がチャレンジページを返した場合はゴミデータではなく 503 を返します — pay-on-success の課金では、これは「課金される悪い結果」ではなく「無料の失敗」です。喜んでリトライするエージェントの下で欲しいのは、まさにこの挙動です。
n8n での AI Web スクレイピング — ノーコード
ワークフロー自動化で生きているチームなら、n8n が Python なしでこれをカバーします。ルートは 2 つあります。
- コミュニティノード。 Crawlora は
n8n-nodes-crawloraを npm で公開しています — Settings → Community Nodes からインストールし、API キーをクレデンシャルとして追加すると、その操作(Web スクレイプ、検索、マップ、EC など)がドラッグで置けるノードになります。n8n の AI Agent ノードから利用可能なノードとしてもフラグ付けされているため、n8n 内のエージェントは Crawlora の操作をツールとして呼び出せます。 - HTTP Request ノード。 n8n 内蔵の HTTP ノードは任意の REST エンドポイントを直接呼び出せます。URL を設定し、
x-api-keyヘッダーを追加し、JSON ボディを POST するだけです。統合ページ には、そのままインポートできるワークフローテンプレートがあります。
典型的な AI スクレイピングワークフローは、トリガー、構造化データを取得する Crawlora ノード、そして JSON について推論する n8n の AI Agent ノードまたは LLM ノードを連結します — 競合価格モニタリングを Slack へ、SERP トラッキングをスプレッドシートへ、レビューダイジェストをメールへ。トークン効率の議論は n8n の中では二重に効きます。生の HTML を AI Agent ノードに流し込むコミュニティ公開パイプラインは、構造化フィールドを渡すパイプラインの 10 倍のトークンを日常的に燃やしています。
本当のボトルネックは知能ではなくアクセス
ここが「AI がスクレイピングを解決した」という物語の間違っている部分です。モデルはページを読むのが劇的に上手くなりました。同時に Web サイトは、ボットにページを渡さないことが劇的に上手くなりました。Cloudflare、DataDome、Akamai、Kasada は TLS ハンドシェイク、ブラウザフィンガープリント、IP レピュテーション、行動シグナルを検査します — そして HTTP リクエストを送る AI エージェントは、2019 年の Python スクリプトとまったく同じシグナルを提示します。エージェントのフェッチが失敗したとき、失敗したのは推論ではなく、Web へのアクセスなのです。
実際のところ、エージェントは 3 つの点で事態を悪化させます。
- ボリュームの増幅: 1 つの質問を受けたエージェントが 5 回の検索と十数回のページ取得を発行し、失敗をリトライする — 人間のリサーチャーなら決して触れないレート制限に引っかかる。
- ブロックへの無自覚: チャレンジページを受け取ったモデルは、ブロックされたことに気づけないことが多く、「checking your browser」と書かれた中間ページから自信満々にフィールドを抽出してしまう。
- リトライループ: 素朴なエージェントループは 403 に対して同じフィンガープリントから即座に再試行し、1 回のブロックをレピュテーションフラグへ変えてしまう。
だからこそ、本番環境では構造化ツールのパターンが勝ち続けています。スクレイピング API はアクセス問題を 1 か所に集約します — プロキシローテーション、フィンガープリント管理、JavaScript レンダリング、リトライ、レート制限 への対処はエンドポイントの裏側にあり、エージェントが見るのはクリーンな JSON かクリーンな失敗だけです。Web スクレイピング API のアプローチは枠組みの誠実さも保ちます。公開データに対するドキュメント化されたエンドポイントであり、何を収集するかをエンドポイントごとのドキュメントが明記します。そして目的がライブのエージェントクエリではなくコーパス構築なら、計算はまた変わります — web scraping for AI training data をご覧ください。
どのパターンを使うべきか?
| 抽出器としての LLM | ツールを持つエージェント | AI が書いたスクレイパー | |
|---|---|---|---|
| 向いている用途 | ロングテールで雑多な単発ページ | エージェントワークフロー内のライブデータ | 大量・固定のサイト群 |
| コストプロファイル | 最も高い — 全ページにトークン | 低い — 答えの分だけトークン | 大規模では最安 — コードは無料で動く |
| サイト変更 | 強い(セレクタなし) | プロバイダーがパーサーを保守 | 壊れる。コードを再生成 |
| 失敗モード | 幻覚または欠落フィールド | ツールカタログのカバレッジ不足 | セレクタの腐敗、静かなズレ |
| アンチボット | 未解決 — フェッチ層が必要 | エンドポイントの裏で解決済み | 未解決 — DIY プロキシ |
| セットアップの手間 | 低い | 最小(設定ブロック 1 つ) | 中程度、加えて保守 |
実践ではパターンは組み合わさります。エージェントはカバー済みプラットフォームには構造化ツールを頼り、それ以外はスクレイプ + 抽出に落とし、コード生成はアーキテクチャではなく開発者の生産性向上のテクニックにとどまります。
ブロック抜きで、エージェントに Web を渡そう
ホスト型MCPエンドポイント、ドキュメント化された REST ツール、正規化された JSON、成功時のみの課金 — 課金されるのは成功した 2xx レスポンスだけ。無料プランは月 2,000 クレジット、カード不要。
関連記事
- Web scraping with Python — the complete 2026 guide — これらのパターンの土台となる DIY の基礎
- The best AI web scraping tools in 2026 — ツールをランク付けし、テストした記事
- AI vs traditional web scraping — セレクタが今も勝つ場面
- Web scraping for AI training data — 大規模なコーパス構築
よくある質問
ChatGPTやClaudeはWebサイトをスクレイピングできますか?
単体ではできません。言語モデルには任意のページへのネットワークアクセスがないためです。ツールを与えましょう。MCPやFunction Calling経由なら、ClaudeやChatGPTはスクレイピングエンドポイントを呼び出し、構造化されたJSONを受け取り、その結果について推論できます。推論はモデルが、スクレイピングはフェッチ層が担います。
WebスクレイピングにおけるMCPとは何ですか?
MCP(Model Context Protocol)は、AIエージェントが単一のインターフェースを通じて外部ツールを発見・呼び出しできるオープン標準です。スクレイピングMCPサーバーは google_search や web_scrape のようなツールを公開するため、Claude、Cursor、Windsurf といった任意のMCPクライアントが、独自の統合コードなしにライブWebデータを取得できます。Crawloraのホスト型MCPエンドポイントは https://mcp.crawlora.net/mcp です。
AI抽出はCSSセレクタより正確ですか?
ベンチマークでは、入力が整形されていれば、LLM抽出は構造化Webデータで0.95を超えるF1スコアに達し、セレクタを壊すレイアウト変更にも耐えるとされています。ただしモデルは、ページに存在しないもっともらしい値を時折生成するため、本番パイプラインでは出力を検証します。セレクタは決定的ですが壊れやすいものです。
LLMによるWeb抽出は1ページあたりいくらかかりますか?
生のHTMLは高くつく経路です。1ページで30,000〜100,000トークンに達することがあります。Markdownへの変換でトークン使用量は約90%減り、DOMプルーニングの研究では品質を損なわずに97.9%の削減が報告されています。スクレイピングAPIからの構造化JSONはさらに安く、モデルは必要なフィールドだけを読みます。
AIエージェントはなぜスクレイピング時にブロックされるのですか?
Cloudflare、DataDome、Akamai、KasadaといったアンチボットシステムはTLSハンドシェイク、ブラウザフィンガープリント、IPレピュテーション、リクエスト挙動をスコアリングします。エージェントのHTTPリクエストは他のボットと同じに見えるのです。さらにエージェントはリトライや多段フェッチでボリュームを増幅し、レート制限に早く達します。これを解決するのはマネージドなアクセス層であり、より良いプロンプトではありません。
ClaudeをWebスクレイピングAPIに接続するには?
ClaudeのMCP設定にホスト型MCPサーバーを追加します。APIキーを x-api-key ヘッダーに入れて https://mcp.crawlora.net/mcp を指定し、再起動すると、スクレイピングツールがClaudeのツール一覧に表示されます。無料プランはカード登録不要で月2,000クレジットです。
n8nでコードなしのAI Webスクレイピングはできますか?
できます。Settings → Community Nodes から n8n-nodes-crawlora コミュニティノードをインストールしてAPIキーをクレデンシャルとして追加するか、n8n内蔵のHTTP RequestノードからREST APIを呼び出します。どちらも構造化JSONをn8nのAI Agentノードに渡せるため、生のHTMLを渡すよりトークンコストをはるかに低く抑えられます。