プログラマー向けモードで表示中ビジネスユーザー向けへ
Bright Data 学習ポータル
UC-CRAWL-001CrawlLv3Lv4

AI / LLM 学習データ収集

ドメイン横断クロールで Markdown / JSON 化し、RAG・学習データの前処理に投入する。

Crawl API

KPI 例

  • 対象 URL 数
  • 抽出成功率
  • トークン効率

AI / LLM 向けの学習データ収集では、HTML をただ保存するだけでは後工程が重くなります。Bright Data の Crawl API は、複数 URL をジョブとして投入し、Markdown や構造化フィールドで取り出せるため、RAG や学習データの前処理ラインに載せやすいのが利点です。

誰の課題か

  • ドキュメントサイト、ブログ、ヘルプセンターをまとめて収集したい AI エンジニア
  • 自前クローラでは URL 管理、再実行、出力整形の負荷が高いデータ基盤チーム
  • LLM にそのまま渡せる Markdown を優先しつつ、必要に応じて HTML や JSON 系の出力も残したいチーム

推奨製品セット

構成要素役割このユースケースでの使い方
Crawl APIクロール実行の中心URL 群を投入し、snapshot_id を受け取る
API Access認証方式Authorization: Bearer $BRIGHTDATA_API_KEY で呼び出す
Webhook または外部ストレージ結果配送大きいジョブをポーリングし続けずに受け取る
  • 公式 Overview では、Crawl API は AI training data collection を主用途の 1 つとして挙げています。
  • Quick Start では、API ベースの収集で snapshot_id を受け取り、後から結果を取得する流れが示されています。

最小実装イメージ

1. crawl ジョブを起動する

curl -X POST "https://api.brightdata.com/datasets/v3/trigger?dataset_id=$CRAWL_DATASET_ID&include_errors=true&custom_output_fields=markdown" \
  -H "Authorization: Bearer $BRIGHTDATA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {"url":"https://example.com/docs/getting-started"},
    {"url":"https://example.com/docs/authentication"}
  ]'
  • CRAWL_DATASET_ID には Crawl API 用 dataset ID を入れます。
  • custom_output_fields=markdown を使うと、後段の RAG 前処理に載せやすい出力を優先できます。

2. 完了を待って結果を取得する

import os
import time
import requests
 
api_key = os.environ["BRIGHTDATA_API_KEY"]
dataset_id = os.environ["CRAWL_DATASET_ID"]
headers = {"Authorization": f"Bearer {api_key}"}
 
trigger = requests.post(
    f"https://api.brightdata.com/datasets/v3/trigger?dataset_id={dataset_id}&include_errors=true&custom_output_fields=markdown",
    headers={**headers, "Content-Type": "application/json"},
    json=[
        {"url": "https://example.com/docs/getting-started"},
        {"url": "https://example.com/docs/authentication"},
    ],
    timeout=60,
)
trigger.raise_for_status()
snapshot_id = trigger.json()["snapshot_id"]
 
while True:
    progress = requests.get(
        f"https://api.brightdata.com/datasets/v3/progress/{snapshot_id}",
        headers=headers,
        timeout=60,
    )
    progress.raise_for_status()
    status = progress.json()["status"]
    if status == "ready":
        break
    if status == "failed":
        raise RuntimeError(f"snapshot failed: {snapshot_id}")
    time.sleep(10)
 
result = requests.get(
    f"https://api.brightdata.com/datasets/v3/snapshot/{snapshot_id}?format=json",
    headers=headers,
    timeout=120,
)
result.raise_for_status()
print(result.text[:1000])
  • Quick Start のとおり、Crawl API は snapshot_id を返し、あとで取得する非同期フローが基本です。
  • 大量件数では API 直ダウンロードより Webhook や外部ストレージ配送のほうが運用しやすくなります。

運用ポイント

  • 学習データ用途では、まず markdown を試し、原文検証や再抽出が必要なページだけ HTML 系出力を追加するほうが扱いやすいです。
  • snapshot_id、投入 URL、実行日時、出力形式を保存しておくと、学習データ更新時の差分追跡がしやすくなります。
  • Crawl API Overview では scheduler support と webhook delivery が案内されているため、定期更新や継続収集はジョブ前提で組むのが自然です。
  • 公開情報を対象にしても、取得範囲、保持期間、削除条件、利用規約確認の手順は先に決めておく必要があります。

関連リンク