ChatGPTでのWebスクレイピング:できること、失敗しやすいこと、そしてより良い方法

最終更新日 April 15, 2026

先週、営業チームの同僚から「約200件あるビジネスディレクトリのページから連絡先情報を抜き出したい」と相談されました。彼の考えは、1件ずつコピー&ペーストしてスプレッドシートにまとめるというもの。そこで私は、ChatGPTにPythonのスクレイパーを作らせてみたらどうかと提案しました。20分後にはスクリプトが完成。ところがその30分後、彼からDMが届きました。「最初の5ページでは動いたんだけど、その後……止まった」。

実は、こういう話はかなりよくあります。ChatGPTはスクレイピング用のコード生成が本当に得意です。少なくとも、うまくいかなくなるまでは。しかも、ネット上の多くの解説記事は「ほら、簡単なサンプルサイトなら動きました」で終わってしまい、JavaScriptやボット対策、ページネーションがある実際のサイトに当たった瞬間に放り出されます。このガイドでは、ChatGPTでWebスクレイピングを行うと実際にどうなるのかを、ワークフロー全体、すぐ使える5つのプロンプトテンプレート、壊れやすいポイントの正直な整理、そして壊れたときの対処法まで含めて解説します。コードを書かずに済む のようなノーコード代替手段も紹介します。

ChatGPT Web Scrapingとは?

「ChatGPT Web Scraping」とは、ChatGPTを使ってWebサイトからデータ抽出を手伝ってもらうことを指します。ただし、多くの人が見落としている重要な点があります。ChatGPT自体がサイトを巡回してスクレイピングするわけではありません。URLを開いたり、HTMLを取得したり、ページをクリックして回ったりはできません。ChatGPTができるのは、それらを行うコードを生成すること(通常はPython)か、会話欄に貼り付けた生のHTMLを解析して構造化データに変換することです。

主な方法は2つあります。

  1. コード生成ツールとして使う:ページ内容と欲しいデータを伝えると、ChatGPTがPythonスクリプトを書きます。通常はBeautifulSoup、Selenium、Playwrightなどを使い、そのスクリプトを自分のPCで実行します。
  2. データ解析ツールとして使う:生のHTMLをチャットに貼り付けるか、Code Interpreter経由でアップロードし、必要な項目をJSONやCSV形式で抜き出してもらいます。

どちらの場合も、取得して実行するのはあなた自身です。ChatGPTは“頭脳”であって、“手”ではありません。2025年10月に公開された新しい ChatGPT Atlas ブラウザでも、会話しながらWebを見られるとはいえ、返ってくるのは回答であって、500行の商品データをそのままCSV表で出してくれるわけではありません。あくまでブラウジング支援であり、データ抽出のパイプラインではないのです。

なぜChatGPTでWebスクレイピングするのか、誰に向いているのか

ChatGPTはWebスクレイピングのハードルを一気に下げてくれます。によると、開発者のがすでに業務フローでAIツールを使っている、または使う予定であり、その中でもChatGPTは82%のシェアで先頭を走っています。ただし、「ChatGPT web scraping」の利用者は開発者だけではありません。営業開拓リストを作るSDR、競合価格を追うEC担当者、物件情報を集める不動産アナリスト、コンテンツを集約するマーケティングチームにも広く使われています。

代表的な用途と、誰に役立つかを簡単に見てみましょう。

ユースケース恩恵を受ける人取得するデータ
営業リード抽出SDR、営業企画ディレクトリから氏名、メール、電話番号
競合価格モニタリングEC、価格戦略チーム商品名、価格、在庫状況、SKU
市場調査アナリスト、創業者企業情報、レビュー、評価、機能一覧
不動産データ収集仲介担当者、投資家物件価格、住所、間取り、担当者情報
コンテンツ集約マーケティング、SEOチーム記事タイトル、URL、公開日、著者

100ページ分のデータを手作業でコピーするのに3〜5時間かかることがあります。ChatGPTが生成したスクリプトなら、うまく動けば数分で同じ作業を終えられます。問題は、その「うまく動けば」です。本記事の核心はまさにそこにあります。

Gartnerの予測では、2026年までに、正式なIT部門以外の開発者がローコードツール利用者のを占めるようになるとされています。「ChatGPT web scraping」と検索する人は、エンジニアを雇わずにデータを得たい非開発者がどんどん増えているということです。そうした人にとって、ChatGPTが最初の選択肢であり、スクリプトが動かなかったときに頼るのがThunderbitのようなツールです。

ChatGPTでのWebスクレイピングの仕組み:ステップ・バイ・ステップ

ここでは、見本サイトではなく、実際のビジネスディレクトリ一覧ページを例に、最初から最後までの流れを説明します。

  • 難易度: 中級者向け(Pythonをある程度扱える前提)
  • 所要時間: 初回のスクレイプで約15〜30分
  • 必要なもの: Chromeブラウザ、Python環境(Python 3.10以上)、ChatGPT(無料版でも可)、対象URL

ステップ1:サイトを調べて、必要なデータを特定する

スクレイピングしたいページをChromeで開きます。取得したいデータ(たとえば企業名)を右クリックし、Inspect を選択します。Chrome DevToolsが開き、HTML要素がハイライトされます。

h2.business-namespan.phonea.website-link のようなCSSセレクタを探します。セレクタは具体的であるほど、ChatGPTの出力精度は上がります。ページの代表的なHTML断片(1件分の“カード”または“行”)をコピーし、プロンプトに貼り付ける準備をします。

この時点で、field名のリスト(例:business_name、phone、website_url)と、それぞれに対応するCSSセレクタが揃っているはずです。

ステップ2:詳細なChatGPTプロンプトを書く

多くのチュートリアルがここで失敗します。曖昧なプロンプトを投げて、うまくいくことを祈るだけだからです。良いスクレイピング用プロンプトには、次の6要素が必要です。

  1. 言語とライブラリ:「Python 3.11とBeautifulSoup 4を使ってスクリプトを書いてください」
  2. 対象URL:スクレイピングしたい正確なページ
  3. CSSセレクタ:ステップ1で見つけた各項目のセレクタ
  4. 出力形式:CSV、JSON、または両方
  5. 特別な指示:文字コード、エラー処理、待機時間など
  6. HTMLスニペット:実際のページHTMLを20〜40行貼り付け、構造を見せる

以下は注釈付きのサンプルプロンプトです。

1You are a senior Python engineer. Write a web scraper using Python 3.11 and BeautifulSoup 4.
2Target URL: https://example.com/businesses
3Goal: Extract every business card on the page and return one row per business.
4Fields needed (CSS selectors in parentheses):
5- business_name (h2.biz-name)
6- phone (span.phone-number)
7- website_url (a.biz-link, href)
8- rating (div.stars[data-rating])
9Output: save to businesses.csv with UTF-8 encoding and a header row.
10Requirements:
11- Use requests with a realistic User-Agent header
12- Handle missing fields gracefully (None, not crash)
13- Print the number of businesses extracted at the end
14- Add a 1-second delay between requests if you loop
15Here is a representative HTML snippet from the page (one business card):
16<PASTE 20-40 LINES OF THE ACTUAL HTML HERE>

ヒント:HTMLスニペットを入れることが、精度を上げる最大のポイントです。ChatGPTはURLを見に行けないので、ページ構造の唯一の“正解データ”はこの断片です。

ステップ3:生成されたコードを確認してテストする

ChatGPTのコードをそのまま盲目的に実行しないでください。まず内容を確認します。次の点をチェックしましょう。

  • でっち上げられたセレクタ:ページに存在しないCSSクラスをChatGPTが作ってしまうことがあります。
  • 不足しているライブラリpip install requests beautifulsoup4(またはplaywrightなど)が必要か確認します。
  • ハードコードされた値:URL、項目名、ファイルパスが正しいか見ます。

Pythonの仮想環境を作成し、依存関係を入れ、まずは少量(1〜2ページ)でスクリプトを動かします。出力CSVを確認し、列は埋まっているか、期待したデータが空欄になっていないかをチェックしましょう。

ステップ4:追加プロンプトで改善する

ChatGPTの強みは反復です。最初のスクリプトが1ページ目しか処理しないなら、次のように聞きます。

「このスクリプトは最初のページしか取得できません。全ページをクロールするページネーションを追加してください。サイトは ?page=1、?page=2 の形式です。1ページで結果が0件になったら、または50ページに達したら停止してください。」

項目が抜けるなら、メールアドレスや電話番号に対して正規表現のフォールバックを追加するよう依頼します。サイトがJavaScript中心なら、Playwright版をお願いしましょう。追加プロンプトごとに前のコードを土台に改善していくイメージです。かなり速いけれど、時々思い込みの強い相棒とペアプログラミングしているようなものです。

Webスクレイピング用のChatGPTプロンプトテンプレート5選

他のガイドでは、ここまでまとまっているものをあまり見たことがありません。私はシナリオ別に5つのテンプレートを作成し、テストし、磨き上げました。URLとHTMLスニペットを差し替えるだけで、ChatGPTがかなり高確率で動くコードを返してくれます。

テンプレート1:一覧ページ用スクレイパー(商品カタログ、ディレクトリ)

使う場面: 商品一覧、企業一覧、求人一覧など、1ページに多数の項目が並ぶページで、1件ずつ行として取りたいとき。

1You are a senior Python engineer. Write a web scraper using Python 3.11 and BeautifulSoup 4.
2Target URL: [YOUR URL]
3Goal: Extract every item card on the page and return one row per item.
4Fields needed (CSS selectors in parentheses — derived from Inspect):
5- [field_1] ([selector_1])
6- [field_2] ([selector_2])
7- [field_3] ([selector_3])
8- [field_4] ([selector_4, attribute if needed])
9Output: save to items.csv with UTF-8 encoding and a header row.
10Requirements:
11- Use requests with a realistic User-Agent header
12- Handle missing fields gracefully (None, not crash)
13- Print the number of items extracted at the end
14- Add a 1-second delay between requests if you loop
15Here is a representative HTML snippet from the page (one item card):
16[PASTE 20-40 LINES OF THE ACTUAL HTML HERE]

期待される出力: 項目ごとに1行のCSVファイル。列名は指定したfield名に一致します。

テンプレート2:詳細ページ/サブページ用スクレイパー(商品詳細、プロフィールページ)

使う場面: 商品ページ、人物プロフィール、物件詳細のように、1ページに豊富な情報があり、それを1件の構造化レコードとして取り出したいとき。

1Write a Python function `scrape_detail(url)` that takes a detail page URL and returns a dict with these keys:
2- [field_1]
3- [field_2]
4- [field_3]
5- [field_4]
6- [field_5]
7Use BeautifulSoup. Gracefully handle any missing field (return None for it).
8Include regex fallbacks for email and phone — not every page wraps them in consistent tags.
9Return the dict, and also append it as one row to details.csv (create the file with header on first call).
10Reference HTML snippet from a real detail page:
11[PASTE 40-60 LINES OF ONE DETAIL PAGE HTML]

期待される出力: 各ページごとのdictと、詳細ページごとの行が増えていくCSVファイル。

テンプレート3:動的/JS描画ページ用スクレイパー(Playwright)

使う場面: ReactやAngularなど、JavaScriptでコンテンツを読み込むページ。ソースを見ると <div id="root"> だけが空で入っているようなケース。

1Write a Python web scraper using Playwright (sync API) for a JavaScript-rendered page.
2Target URL: [YOUR URL]
3Goal: extract all result cards that appear after the page finishes loading dynamically.
4Requirements:
5- Use `page.wait_for_selector('[YOUR CARD SELECTOR]', timeout=15000)` to wait for content
6- Scroll to the bottom of the page twice with a 1-second pause between scrolls to trigger lazy-loaded results
7- For each card extract: [field_1], [field_2], [field_3], [field_4]
8- Save to results.json as a list of dicts, UTF-8
9- Run headless=False first (so I can watch it) and add a 2-second pause at the end before closing
10Do not use requests or BeautifulSoup — Playwright only.

期待される出力: すべての項目を含む、カードごとのJSONファイル。

テンプレート4:ページネーション対応(複数ページのスクレイピング)

使う場面: すでに1ページ用のスクレイパーが動いていて、それを全ページに広げたいとき。

1Take the existing BeautifulSoup scraper below and wrap it in a pagination loop that collects ALL pages, not just page 1.
2The site uses URL-param pagination: ?page=1, ?page=2, etc.
3Stop condition: when the current page yields zero items, OR when the response status is not 200, OR when you hit page 100 (safety cap).
4Add:
5- A 1.5-second polite delay between page requests
6- A try/except around each request that logs the error and continues
7- A progress print every 5 pages: "Page 15 → 300 items so far"
8- Final save to items_all.csv
9Existing scraper:
10[PASTE YOUR CURRENT SINGLE-PAGE SCRAPER HERE]

期待される出力: すべてのページのデータをまとめた1つのCSVと、進捗が表示されるコンソール出力。

テンプレート5:データ整形・構造化(HTMLを貼り付ける方法)

使う場面: すでに生のHTMLがあり、それをきれいな構造化データに変換したいだけのとき。コードは不要です。

1I will paste raw HTML from a product detail page. You do not need to write code — just return the extracted data as a JSON object matching this schema:
2{
3  "name": string,
4  "brand": string,
5  "price": number,
6  "currency": string (ISO 4217),
7  "availability": "in_stock" | "out_of_stock" | "preorder" | "unknown",
8  "rating": number (0-5) or null,
9  "review_count": integer or null,
10  "description": string (max 500 chars),
11  "key_specs": [{"name": string, "value": string}]
12}
13Use null for anything you genuinely cannot find — do NOT hallucinate.
14Return ONLY the JSON object, no prose, no markdown fence.
15HTML:
16[PASTE THE FULL PAGE HTML HERE]

期待される出力: スプレッドシートやデータベースにそのまま入れられる単一のJSONオブジェクト。

ChatGPTでのWebスクレイピングが壊れやすいポイント(正直な限界)

多くの解説ではこの部分がきれいに省かれます。私はChatGPTが生成したスクレイパーのデバッグに十分な時間を費やしてきたので、どこで壊れるかをよく知っています。でも、AI出力を「かなり信頼する」と答えた開発者はに過ぎません。その理由を見ていきましょう。

JavaScriptが多い動的サイト

Webサイトのがクライアントサイド機能にJavaScriptを使っています。Reactだけでも、全Webサイトの7.2%で動いており、これは1年でです。ChatGPTに「このページをスクレイプして」と頼むと、デフォルトではrequests + BeautifulSoupのスクリプトが出てきます。このスクリプトは生HTMLを取得するだけで、ReactやAngularのサイトでは、返ってくるHTMLは空の <div id="root"> しかないことがよくあります。実際のデータはJavaScript実行後に読み込まれますが、requestsはそれを実行できません。

もちろん、ChatGPTにSeleniumやPlaywrightのコードを求めれば生成は可能です。ただし、それらは遅く(Playwrightの平均ページ読み込み時間はで、静的なrequestsよりかなり遅い)、待機条件、スクロールトリガー、要素セレクタなどでデバッグが必要になることが多く、しかもChatGPTが見当違いのセレクタを出してしまうこともあります。

ボット対策とCAPTCHA

Cloudflareはおよそを保護しており、DataDomeのようなサービスはをうたっています。Pythonのユーザーエージェントを付けただけのrequests.get()は、率直に言えば典型的なボット挙動です。ChatGPTが生成するスクリプトには、プロキシのローテーション、TLSフィンガープリントの偽装、Cookie処理、CAPTCHA解決などは一切含まれません。基本的な保護がある商用サイトなら、最初のリクエストで止められることが多いです。

ページネーションと大規模スクレイピング

ChatGPTのデフォルトのページネーション処理は、?page=Nを回すか、.nextボタンをクリックする程度です。実際のサイトでは、カーソルベースのページネーション、IntersectionObserverを使った無限スクロール、GraphQL呼び出しなどが使われています。ChatGPTは正確なコードを出すために、実際のネットワークリクエストを見せてもらわない限り、うまく生成できません。しかも、その場合でもループは壊れやすいです。でも、ページネーションこそが例示スクレイパーに2回目、3回目のプロンプトが必要になる最大のポイントだと指摘しています。

継続的・定期的なスクレイピング

ChatGPTが出すのは一回限りのスクリプトです。スケジューラも、差分検知も、アラートもありません。「毎朝競合価格を確認したい」と思ったら、cron、Airflow、Lambdaなどを自分で学ぶ必要がありますが、初回のChatGPT回答にはそこまで含まれていません。繰り返しデータが必要なビジネスユーザーにとって、これは行き止まりです。

速度とコストの問題

JS中心のサイトでは、SeleniumやPlaywrightを使った実運用のページ読み込み時間は、理想条件でも1ページあたり3〜10秒、再試行やボット対策の待機を入れると40〜60秒にもなることがあり、これはフォーラムやチュートリアルでも不満です。

HTML解析にChatGPT APIを使う場合(大量のHTMLを貼り付ける方式)、トークン費用はすぐに膨らみます。現在のGPT-4o価格(入力約$2.50/M tokens、出力$10/M tokens)では、1,000ページの製品ページを解析するだけで、トークン代が約95〜105ドルかかります。GPT-4o miniなら同量で約6.50ドルです。ここにプロキシ代($3〜10/GB)、ローカルクローラーの保守、開発工数が加わると、「とりあえずChatGPTを使えばいい」という発想は、かなり高くつくようになります。

規模GPT-4oのトークン費用(推定)GPT-4o miniのトークン費用(推定)
100ページ約$9.55約$0.65
1,000ページ約$95.50約$6.50
10,000ページ約$955約$65

推定は、1ページあたり約5万入力トークンと約2千出力トークンを想定しています。実際の費用はページサイズや出力の複雑さによって変動します。

ChatGPT Web Scraping vs. ノーコードAIスクレイパー vs. カスタムコード:判断フレームワーク

スクレイピングの仕事すべてに同じツールが最適とは限りません。Thunderbitで実案件を検証しながら、私はこの判断フレームワークを使っています。

シナリオChatGPT + PythonノーコードAIスクレイパー(例:Thunderbit)カスタムコード + プロキシ
静的なシンプルページ✅ とても向いている — すぐ生成できる✅ 動くが、やや過剰な場合もある⚠️ 作り込みすぎ
JS描画/動的コンテンツ⚠️ Selenium/Playwrightが必要 — 壊れやすい✅ ブラウザ/クラウドスクレイピングで対応✅ 完全な制御が可能
ボット対策/CAPTCHAサイト❌ ChatGPTはCAPTCHAを解けない✅ クラウド基盤で多くを処理✅ プロキシローテーションで対応
ページネーション(100ページ以上)⚠️ ループが不安定、デバッグが必要✅ 標準でページネーション対応✅ エンジニアリングで堅牢化可能
非開発者ユーザー❌ Pythonの知識が必要✅ 2クリック、コード不要❌ コーディング必須
継続的/定期的なスクレイピング❌ 手動再実行が必要✅ 定期実行機能あり✅ cron/オーケストレーションで対応
Sheets/Airtable/Notionへの出力⚠️ 追加コードが必要✅ ワンクリックでネイティブ出力⚠️ 追加の連携コードが必要

要するに、ChatGPTは「ちょっとした単発スクリプト」や学習用途に向いています。プロダクション品質、継続運用、非開発者向けなら、Thunderbitのようなノーコードツールのほうが速く、安定していて、メンテナンスも不要です。エンタープライズ規模で完全な制御が必要なら、カスタムコード+プロキシ基盤が適しています。

ノーコードの代替案:ThunderbitがコードなしでWebスクレイピングをどう処理するか

コードを書かない人、あるいはChatGPTのスクリプトのデバッグに何度も夜を費やした人には、まったく別の道があります。ChatGPTはコードを生成しますが、 はその必要をなくします。

私はThunderbitチームで働いているので、そこは正直にお伝えします。ただ、ビジネスユーザーの多くにとって、これが最速の手段だと本気で思っています。実際の流れはこんな感じです。

AIで項目を提案:どんなページでもデータ構造を自動検出

任意のWebページを開き、をクリックして「AI Suggest Fields」を押します。ThunderbitのAIがレンダリング済みページを読み取り、JavaScriptで読み込まれた内容も含めて、列名とデータ型を提案します。InspectもCSSセレクタも、プロンプトの試行錯誤も不要です。そのまま「Scrape」をクリックするだけ。

ChatGPT方式と比べてみてください。DevToolsを開き、セレクタを探し、プロンプトを書き、コードを確認し、依存関係を入れ、スクリプトを実行し、出力を見て、また修正する。Thunderbitなら、これを2クリックに圧縮できます。

サブページスクレイピングで一覧を自動拡張

一覧ページを取得した後、「Scrape Subpages」をクリックします。Thunderbitが各行の詳細ページを訪問し、メール、電話番号、自己紹介などの追加項目を既存テーブルに追記します。ChatGPTの場合は、別スクリプト、ループ、各サブページごとのエラー処理、データ統合の仕組みが必要です。Thunderbitは1ステップで処理します。

どこへでもエクスポート:Google Sheets、Airtable、Notion、Excel

Thunderbitは、CSVだけでなくGoogle Sheets、Airtable、Notion、Excelへも、無料でワンクリック出力できます。ChatGPT生成のスクリプトは、通常ローカルのCSVかJSONを書き出すだけです。SheetsやAirtableに直接送るには、追加ライブラリや認証コードが必要になります。

クラウドスクレイピング vs. ブラウザスクレイピング

Thunderbitには2つのモードがあります。クラウドスクレイピングはThunderbitのサーバー上で実行され、1バッチあたり約50ページを処理でき、公的サイトに対して高速です。ブラウザスクレイピングは、ログイン済みセッションを使って、認証が必要なページやログイン保護されたページに対応します。ChatGPTなら、コード内でプロキシ、Cookie、セッション処理を自分で設定する必要があり、それぞれが別々のデバッグ案件になります。

内部では、ThunderbitはChatGPT、Gemini、Claudeなど複数のAIモデルを使い分け、ページを視覚的に読み取って何を抜き出すかを判断しています。つまり、ある意味ではThunderbitもすでにChatGPTを使っています。そのうえで、取得、レンダリング、ボット対策、ページネーション、エクスポートまで全部やってくれるのです。

実務での活用例:営業、EC、不動産

多くのChatGPTスクレイピング解説は、“Books to Scrape”のような教材サイトばかりを使います。ここでは、実際のビジネス現場でのスクレイピングがどうなるかを、ChatGPT方式とThunderbitの短縮ルートの両方で見てみましょう。

ビジネスディレクトリから営業リードを抽出

シナリオ: 新規営業用に、企業ディレクトリから氏名、メール、電話番号を集めたい。

ChatGPTの方法: テンプレート1(一覧ページ)でディレクトリをスクレイプし、テンプレート2(詳細ページ)で各プロフィールにアクセスして連絡先を取得します。メールと電話には正規表現のフォールバック、適度な待機時間、重複排除が必要です。初期設定とデバッグで30〜60分は見込んでください。

Thunderbitの方法: ディレクトリを開き、「AI Suggest Fields」をクリックして一覧を取得し、次に「Scrape Subpages」を押して各プロフィールから連絡先詳細を抽出します。CRM向けのスプレッドシートにエクスポートして完了。合計時間は約3分です。Thunderbitの標準搭載の が、解析を自動で処理します。

EC競合商品の価格モニタリング

シナリオ: 競合商品の価格、在庫、SKUを毎週追跡したい。

ChatGPTの方法: テンプレート1でスクレイパーを作成し、テンプレート4でページネーションを追加して、毎週手動で実行します。競合がページ構成を変えるとセレクタが壊れ、また最初からやり直しです。

Thunderbitの方法: 一度スクレイパーを作成し、Thunderbitの定期クラウドスクレイピングを日次または週次で設定して、Google Sheetsに出力します。AIが毎回ページ構造を読み直すので、レイアウト変更で壊れにくくなっています。このワークフローの詳細は、 をご覧ください。

不動産物件リストの収集

シナリオ: 物件価格、住所、間取り、担当者情報を掲載サイトから取得したい。

ChatGPTの方法: Zillow系の不動産サイトは、たいていReact製のSPAで、ボット対策も強力です。requests + BeautifulSoupでは空ページしか返ってきません。Playwright版でも、数分以内にレート制限されることがよくあります。

Thunderbitの方法: AIによる項目検出付きのクラウドスクレイピングが、JavaScript描画とレイアウト変更に対応します。不動産ポータルは頻繁にリニューアルしますが、ThunderbitのAIは毎回ページを新しく読み取るので、セレクタの更新が不要です。詳細は をご覧ください。

単発スクレイプを超えて:ChatGPT APIパイプライン vs. Thunderbit Extract API

スクレイピングを製品やパイプラインに組み込むなら、論点は「ChatGPT APIでHTMLを解析するか、それとも専用のスクレイピングAPIを使うか」に移ります。

ChatGPT APIでHTMLを解析する方法

やり方は、ローカルのクローラー(requests、Playwrightなど)でHTMLを取得し、それをOpenAIのAPIに送り、構造化JSONを取り出すというものです。要するに、大規模版の“HTML貼り付け”です。

動きます。ただし、コストと保守は現実的です。GPT-4oの価格では、1,000ページで約95ドルのトークン費用がかかります。クローラー、プロキシ、プロンプト設計、出力スキーマをすべて自分で管理する必要があります。サイトが変わればプロンプトも壊れ、調整し直しになります。

Thunderbit Extract API:構造化Webデータ向けに設計

Thunderbitの は別のモデルを提供します。JSON Schemaを定義し、URLをPOSTすると、構造化データが返ってきます。JavaScriptの描画処理とボット対策は組み込み済みです。バッチ処理は1リクエストあたり最大100URLまで対応します。

機能ChatGPT API + カスタムコードThunderbit Extract API
構造化出力プロンプト内で手動スキーマ指定JSON Schemaで定義
JS描画対応自分で対応(Playwrightなど)組み込み済み(複数のレンダーモード)
ボット対策 / CAPTCHA自分で対応(プロキシなど)自動処理
バッチ処理自分でループを実装バッチエンドポイント(最大100URL)
保守プロンプトが壊れ、コードが劣化する管理されたAIエンジン

保守なしで構造化Webデータをサービスとして使いたいチームにとって、ThunderbitのAPIは本番導入までの近道です。抽出ごとのクレジット料金は を確認してください。

ChatGPT Web Scrapingの精度を上げるコツ

私が試行錯誤の末に学んだことをいくつか紹介します。

プロンプトは具体的にする。 必ず入れるべきなのは、プログラミング言語、ライブラリ、対象URL、CSSセレクタ、出力形式、例外処理の方針です。曖昧な指示からは、曖昧なコードしか出てきません。

URLだけでなくHTMLスニペットを貼る。 ChatGPTはURLを開けません。ページ構造の唯一の正解はHTMLスニペットです。たった20〜40行のデータカードのHTMLを貼るだけでも、精度は大きく上がります。

生成後にレビューと最適化を依頼する。 スクリプトを作らせたら、次のように頼みます。「このコードのエラーを確認し、例外処理を追加し、性能を最適化してください。」二回目の見直しで、自分のミスを驚くほどよく拾います。

必ず少量でテストする。 1〜2ページで動作確認してから本番規模に広げましょう。1ページ目で壊れたセレクタを見つければ、500件失敗した後で気づくよりずっとましです。

最初からやり直さず、反復する。 最初のスクリプトが80%正しいなら、出力を貼り返して、残り20%を修正させましょう。ChatGPTが最も強いのは、この反復対話です。

ChatGPTでのWebスクレイピングに関する倫理と法的注意点

法的な側面も重要です。簡潔にまとめます。

現在の米国の判例では、一般公開されているデータのスクレイピングは連邦コンピュータ犯罪には当たりません。 判決がその流れを作り、(2024年1月)の判断でもそれが後押しされました。裁判官は、FacebookやInstagramの公開・ログアウト状態のデータをスクレイピングしても、アカウントを持たない訪問者はその利用規約に縛られる「ユーザー」ではないとして、Metaの利用規約違反には当たらないと判断しました。

とはいえ、ログインが必要なデータや認証付きデータのスクレイピング、あるいは同意した利用規約に違反する行為は、依然として法的リスクを生みます。また、メールアドレスや電話番号などの個人データを扱う場合は、データの出所に関係なく、EUやカリフォルニアの個人情報保護法(GDPR、CCPA)が適用されます。

スクレイピング前には必ず robots.txt と利用規約を確認してください。アクセス頻度は適切に抑え、個人データは責任を持って扱いましょう。Thunderbitのように、組み込みのコンプライアンス機能を持つツールを使うのも有効です。Thunderbitは robots.txt を尊重し、責任あるデータ運用を標準で備えています。さらに詳しくは、 をご覧ください。

ChatGPTでWebスクレイピングを使うべき場面、そしてより良い選択肢に切り替えるべき場面

ChatGPTはWebスクレイピングにおいて本当に強力なツールです。手早く試作品を作れますし、仕組みを学ぶのにも役立ちます。簡単な静的ページの単発スクリプトなら、かなり優秀です。

ただし、本番品質、継続運用、大規模処理、とくに開発者でない場合には、Thunderbitのような専用ツールのほうが速く、信頼性が高く、保守も不要です。エンタープライズ規模の開発では、プロキシ基盤付きのカスタムコードが最も自由度があります。

私の判断基準は次のとおりです。

  • 単発の試行、学習、プロトタイピング: ChatGPT + Python
  • ビジネスユーザー、ノーコード、定期スクレイプ:
  • 開発者向けパイプライン、構造化APIアクセス:
  • エンタープライズ規模、完全な制御: カスタムコード + プロキシ + オーケストレーション

ノーコードの道を試したいなら、Thunderbitには無料プランがあるので、小さく始めて結果を確認できます。実際の動きを見たい方は、 にユースケース別の解説動画があります。

AI WebスクレイピングにThunderbitを試す

よくある質問

ChatGPTは自力でWebサイトをスクレイピングできますか?

いいえ。ChatGPTはスクレイピング用コードを生成したり、あなたが渡したHTMLを解析したりはできますが、URLを開いたり、ページを取得したり、スクリプトを実行したりはできません。2025年10月に公開された内蔵ブラウザの ChatGPT Atlas でさえ、会話型のブラウジング支援であり、ページを要約することはできても、500行の構造化CSVをそのまま渡してくれるわけではありません。

ChatGPTでのWebスクレイピングは無料ですか?

ChatGPTの無料プランでも、スクレイピングコードを生成することはできます。ただし、そのコードを動かすにはPythonと各種ライブラリが必要です(これらは無料です)。さらに、OpenAI APIで大量のHTMLを解析する場合はトークン費用がかかります。GPT-4o miniなら1,000ページあたり約6.50ドル、GPT-4oなら約95ドルです。プロキシやインフラ費用は別です。

ChatGPTが生成したWebスクレイパーに最適なPythonライブラリは何ですか?

静的HTMLページなら、requestsBeautifulSoup の組み合わせが最もシンプルで高速です。JavaScriptで描画されるページには、Playwrightが現代的な選択肢です。Seleniumより高速で(ページ読み込み平均約2.9秒 vs. 4.8秒)、APIもすっきりしています。Seleniumは主にレガシー案件向けです。

コーディングなしでChatGPTを使ってデータをスクレイプできますか?

直接はできません。ChatGPTはコードを生成しますが、その実行はまだ必要です。本当の意味でノーコードを求めるなら、 のようなツールを使えば、2クリックでスクレイピングできます。Pythonもターミナルもデバッグも不要です。AIが項目を提案し、Google SheetsやAirtableへワンクリックで出力でき、JavaScript描画やボット対策も標準対応です。

ChatGPTが生成したコードでWebサイトをスクレイプするのは合法ですか?

公開されていてログアウト状態で見られるデータのスクレイピングは、現在の米国判例では一般に合法です(hiQ v. LinkedIn、Meta v. Bright Data)。ただし、ログインが必要なコンテンツのスクレイピング、サイトの利用規約違反、個人データ(メール、電話番号)の扱いを誤ることは、契約法やGDPR、CCPAのようなプライバシー規制の観点で法的リスクになりえます。スクレイピング前には必ず robots.txt とサイトの利用規約を確認してください。

こちらもおすすめ

Shuai Guan
Shuai Guan
Co-founder/CEO @ Thunderbit. Passionate about cross section of AI and Automation. He's a big advocate of automation and loves making it more accessible to everyone. Beyond tech, he channels his creativity through a passion for photography, capturing stories one picture at a time.
目次

Thunderbitを試す

リードや各種データをたった2クリックで取得。AI搭載。

Thunderbitを入手 無料です
AIでデータを抽出
Google Sheets、Airtable、Notionへ簡単にデータを転送
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week