/extract
エンドポイントは、任意の数のURLやドメイン全体から構造化データを収集する作業を簡略化します。URLのリストを、必要に応じてワイルドカード(例: example.com/*
)とともに用意し、取得したい情報を記述するプロンプトまたはスキーマを指定してください。Firecrawl がクロール、解析、統合の処理を担い、小規模から大規模までのデータセットに対応します。
ワイルドカードを含め、1つまたは複数のURLから構造化データを抽出できます:
- 単一ページ
例: https://firecrawl.dev/some-page
- 複数ページ/ドメイン全体
例: https://firecrawl.dev/*
/*
を使用すると、Firecrawl はそのドメイン内で検出可能なすべてのURLを自動的にクロールして解析し、指定のデータを抽出します。この機能は実験的です。問題が発生した場合は help@firecrawl.com までご連絡ください。
from firecrawl import Firecrawl
firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")
schema = {
"type": "object",
"properties": {"description": {"type": "string"}},
"required": ["description"],
}
res = firecrawl.extract(
urls=["https://docs.firecrawl.dev"],
prompt="ページの説明を抽出",
schema=schema,
)
print(res.data["description"])
主要パラメータ:
- urls: 1つ以上のURLを含む配列。広範なクロールのためにワイルドカード(
/*
)に対応。
- prompt(スキーマがない場合のみ任意): 取得したいデータ、またはそのデータの構造化方法を記述する自然言語のプロンプト。
- schema(プロンプトがない場合のみ任意): すでにJSONのレイアウトが分かっている場合に用いる、より厳密な構造定義。
- enableWebSearch(任意):
true
の場合、指定ドメイン外のリンクもたどって抽出を実行。
詳細は API Reference を参照してください。
{
"success": true,
"data": {
"company_mission": "Firecrawl は、ウェブからデータを抽出する最も簡単な方法です。開発者は、単一の API コールで URL を LLM 向けのMarkdownや構造化データに確実に変換するために Firecrawl を利用しています。",
"supports_sso": false,
"is_open_source": true,
"is_in_yc": true
}
}
抽出ジョブを送信すると(API またはスターター メソッド経由)、ジョブ ID が返されます。この ID で次のことができます:
- ジョブ ステータスの取得: /extract/ エンドポイントにリクエストを送り、ジョブが実行中か完了済みかを確認します。
- 結果を待つ: デフォルトの
extract
メソッド(Python/Node)を使う場合、SDK が完了まで待機して最終結果を返します。
- 開始してポーリング: スタート メソッド(
start_extract
(Python)または startExtract
(Node))を使う場合、SDK はすぐにジョブ ID を返します。進行状況の確認には get_extract_status
(Python)または getExtractStatus
(Node)を使用します。
このエンドポイントは、進行中または最近完了した(24 時間以内の)ジョブにのみ有効です。
以下は、Python、Node.js、cURL を使用して抽出ジョブのステータスを確認するコード例です:
from firecrawl import Firecrawl
firecrawl = Firecrawl(
api_key="fc-YOUR_API_KEY"
)
# まず抽出ジョブを開始する
extract_job = firecrawl.start_extract([
'https://docs.firecrawl.dev/*',
'https://firecrawl.dev/'
], prompt="これらのページから企業のミッションと機能を抽出してください。")
# 抽出ジョブのステータスを取得
job_status = firecrawl.get_extract_status(extract_job.id)
print(job_status)
# 出力例:
# id=None
# status='completed'
# expires_at=datetime.datetime(...)
# success=True
# data=[{ ... }]
# error=None
# warning=None
# sources=None
- completed: 抽出が正常に完了しました。
- processing: Firecrawl がリクエストを処理中です。
- failed: エラーが発生し、データを完全に抽出できませんでした。
- cancelled: ユーザーによってジョブがキャンセルされました。
{
"success": true,
"data": [],
"status": "processing",
"expiresAt": "2025-01-08T20:58:12.000Z"
}
{
"success": true,
"data": {
"company_mission": "Firecrawl は、ウェブからデータを抽出する最も簡単な方法です。開発者は、単一の API コールで URL を LLM 向けのMarkdownまたは構造化データに確実に変換するために Firecrawl を利用します。",
"supports_sso": false,
"is_open_source": true,
"is_in_yc": true
},
"status": "completed",
"expiresAt": "2025-01-08T20:58:12.000Z"
}
厳密な構造を定義したくない場合は、prompt
を渡すだけで構いません。基盤のモデルが適切な構造を自動で選択するため、探索的または柔軟なリクエストに適しています。
from firecrawl import Firecrawl
# APIキーを使って FirecrawlApp を初期化する
firecrawl = Firecrawl(api_key='your_api_key')
data = firecrawl.extract([
'https://docs.firecrawl.dev/',
'https://firecrawl.dev/'
], prompt="ページから Firecrawl のミッションを抽出する。")
print(data)
{
"success": true,
"data": {
"company_mission": "WebサイトをLLM対応のデータに変換。あらゆるサイトをクロールして得たクリーンなデータでAIアプリを強化。"
}
}
リクエストで enableWebSearch = true
を設定すると、指定したURLの範囲を超えてクロールが拡張されます。これにより、リンク先のページから補助的・関連情報を取得できます。
以下は、ドライブレコーダー(ダッシュカム)に関する情報を抽出し、関連ページのデータで結果を補強する例です:
from firecrawl import Firecrawl
# APIキーで FirecrawlApp を初期化します
firecrawl = Firecrawl(api_key='your_api_key')
data = firecrawl.extract([
'https://nextbase.com/dash-cams/622gw-dash-cam'
], prompt="価格、機能、長所・短所、レビューを含む、優れたドライブレコーダーの詳細を抽出してください。", enable_web_search=True)
print(data)
{
"success": true,
"data": {
"dash_cams": [
{
"name": "Nextbase 622GW",
"price": "$399.99",
"features": [
"4K動画録画",
"手ブレ補正",
"Alexa内蔵",
"What3Words対応"
],
/* 以下の情報は、enableWebSearch パラメータで見つかった
https://www.techradar.com/best/best-dash-cam などの他サイトをもとに補足されています
*/
"pros": [
"優れた映像品質",
"夜間撮影に強い",
"GPS内蔵"
],
"cons": ["価格が高い", "アプリが不安定な場合がある"]
}
],
}
この応答には、関連ページから収集した追加のコンテキストが含まれており、より網羅的で正確な情報を提供します。
/extract
エンドポイントは、特定の URL を指定せずに、プロンプトを使って構造化データを抽出できるようになりました。リサーチや正確な URL が分からない場合に便利です。現在はアルファ版です。
from pydantic import BaseModel
class ExtractSchema(BaseModel):
company_mission: str
# 抽出用のプロンプトを定義
prompt = 'Firecrawlのウェブサイトから企業ミッションを抽出してください。'
# 抽出を実行
scrape_result = firecrawl.extract(prompt=prompt, schema=ExtractSchema)
print(scrape_result)
-
大規模サイトのカバレッジ
巨大なサイト(例:「Amazonの全商品」)を単一のリクエストで完全にカバーすることは、まだサポートしていません。
-
複雑な論理クエリ
「2025年の投稿をすべて見つけて」のようなリクエストは、期待するデータを確実にすべて返せない場合があります。より高度なクエリ機能を開発中です。
-
稀に発生する不一致
特に非常に大規模または動的なサイトでは、実行ごとに結果が異なることがあります。通常は主要な情報を捉えますが、多少のばらつきが生じる可能性があります。
-
ベータ版の状態
/extract
はまだベータ版のため、機能やパフォーマンスは今後も進化します。改善のためのバグ報告やフィードバックをお待ちしています。
FIRE-1 は Firecrawl のスクレイピング機能を強化する AI エージェントです。ブラウザのアクションを制御し、複雑なウェブサイト構造を横断して、従来のスクレイピングを超える包括的なデータ抽出を実現します。
複数ページにまたがる遷移や要素とのインタラクションが必要な複雑な抽出タスクには、/extract
エンドポイントで FIRE-1 エージェントを活用できます。
例(cURL):
curl -X POST https://api.firecrawl.dev/v2/extract \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"urls": ["https://example-forum.com/topic/123"],
"prompt": "このフォーラムスレッドからすべてのユーザーコメントを抽出してください。",
"schema": {
"type": "object",
"properties": {
"comments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"author": {"type": "string"},
"comment_text": {"type": "string"}
},
"required": ["author", "comment_text"]
}
}
},
"required": ["comments"]
},
"agent": {
"model": "FIRE-1"
}
}'
FIRE-1 はすでに稼働しており、プレビュー版として利用可能です。
/Extract の料金は Extract の料金ページ で確認でき、利用状況は ダッシュボードの Extract ページ で確認できます。
フィードバックやサポートが必要な場合は、help@firecrawl.com までメールでご連絡ください。