extract_structured
Berikan pengekstrak satu JSON Schema dan gesaan bahasa semula jadi. LLM membaca halaman dan mengembalikan data yang sepadan dengan skema anda. Apabila tiada penyedia LLM dikonfigurasi, ia beralih ke pengekstrakan pemilih CSS menggunakan petunjuk anda.
Kes Penggunaan
Pengekstrakan Produk Skema-Dahulu
Takrifkan medan yang anda mahu sekali; LLM memetakan mana-mana tapak e-dagang ke skema anda.
Penghuraian Resume & Dokumen
Ekstrak nama calon, kemahiran dan sejarah kerja terus ke dalam objek bertaip.
Penyemaian Graf Pengetahuan
Ekstrak entiti dan perhubungan daripada artikel ke dalam JSON berstruktur untuk pemuat graf.
Endpoint
/api/v1/tools/extract_structuredParameters
llmConfig untuk menggunakan pengekstrakan dikuasakan LLM. Tanpanya, alat menggunakan selectorHints untuk pengekstrakan CSS berketentuan — lebih murah dan tiada kunci LLM diperlukan.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Required | - | URL untuk mengekstrak data Example: https://example.com/product/123 |
schema | object | Required | - | JSON Schema yang menerangkan data untuk diekstrak Example: {"type":"object","properties":{"title":{"type":"string"},"price":{"type":"number"}},"required":["title"]} |
prompt | string | Optional | - | Arahan bahasa semula jadi yang membimbing pengekstrakan LLM Example: Extract the product name, current price, and whether it is in stock |
llmConfig | object | Optional | - | Konfigurasi penyedia LLM pilihan (provider, apiKey). Tinggalkan untuk menggunakan sandaran pemilih CSS. Example: {"provider": "openai", "apiKey": "sk-..."} |
selectorHints | object | Optional | - | Petunjuk pemilih CSS untuk membimbing pengekstrakan (juga digunakan oleh sandaran pemilih) Example: {"title": "h1.product-title", "price": ".price"} |
fallbackToSelectors | boolean | Optional | true | Beralih ke pengekstrakan pemilih CSS apabila LLM tidak tersedia Example: true |
respect_robots | boolean | Optional | true | Hormati robots.txt tapak sasaran. Dibiarkan pada `true`, laluan yang dilarang untuk `CrawlForge` ditolak dengan 403 sebelum apa-apa diambil dan tiada credits dicaj. Tetapkan kepada `false` hanya untuk sasaran yang anda mempunyai perjanjian sendiri dengannya — respons kemudiannya membawa entri `warnings` dan tindakan mengatasi itu direkodkan pada API key anda. Example: true |
Contoh Permintaan
cURL — LLM extraction
curl -X POST https://crawlforge.dev/api/v1/tools/extract_structured \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/product/123",
"schema": {
"type": "object",
"properties": {
"title": { "type": "string" },
"price": { "type": "number" },
"in_stock": { "type": "boolean" }
},
"required": ["title", "price"]
},
"prompt": "Extract the product name, price in USD, and availability",
"llmConfig": { "provider": "openai", "apiKey": "sk-..." }
}'TypeScript — selector fallback
const response = await fetch('https://crawlforge.dev/api/v1/tools/extract_structured', {
method: 'POST',
headers: {
'X-API-Key': process.env.CRAWLFORGE_API_KEY!,
'Content-Type': 'application/json',
},
body: JSON.stringify({
url: 'https://example.com/product/123',
schema: {
type: 'object',
properties: {
title: { type: 'string' },
price: { type: 'number' },
},
required: ['title'],
},
selectorHints: {
title: 'h1.product-title',
price: '.price-value',
},
fallbackToSelectors: true,
}),
});
const data = await response.json();
if (data.success) {
console.log(data.data.extracted.title, data.data.extracted.price);
}Python
import requests, os
response = requests.post(
'https://crawlforge.dev/api/v1/tools/extract_structured',
headers={
'X-API-Key': os.environ['CRAWLFORGE_API_KEY'],
'Content-Type': 'application/json',
},
json={
'url': 'https://example.com/article/42',
'schema': {
'type': 'object',
'properties': {
'headline': {'type': 'string'},
'author': {'type': 'string'},
'published_at': {'type': 'string'},
'tags': {'type': 'array'},
},
'required': ['headline'],
},
'prompt': 'Extract headline, author, publish date (ISO 8601), and tags',
},
)
data = response.json()
if data['success']:
print(data['data']['extracted'])Contoh Respons
{ "success": true, "data": { "url": "https://example.com/product/123", "data": { "title": "Premium Wireless Headphones", "price": 299.99, "in_stock": true }, "extraction": { "method_by_field": { "title": "selector", "price": "json-ld", "in_stock": "meta" }, "llm_used": false, "note": "Selector/structured-data extraction; LLM-guided extraction is available via the CrawlForge MCP server" }, "extracted_at": "2026-08-26T14:30:00.000Z" }, "credits_used": 3, "credits_remaining": 997, "processing_time": 1240}data.dataSatu kunci bagi setiap sifat dalam skema anda, ditukar kepada jenis yang diisytiharkan. Medan yang tidak dijumpai ialah null.data.extraction.method_by_fieldBagaimana setiap medan diperoleh: `selector` daripada entri selectorHints, `json-ld` daripada data berstruktur, `meta` daripada tag meta, atau `none` apabila tiada yang sepadan.data.extraction.llm_usedSentiasa false pada API REST terhos — pengekstrakan berasaskan pemilih dan data berstruktur, tidak pernah generatif.data.extraction.noteMenyatakan semula di mana pengekstrakan berpandukan LLM tersedia.data.extracted_atCap masa ISO 8601 bagi pengekstrakan.Pengendalian Ralat
Disekat oleh robots.txt (403 Forbidden)
robots.txt tapak sasaran melarang laluan ini untuk CrawlForge. Tetapkan respect_robots: false untuk mengatasinya jika anda mempunyai perjanjian sendiri dengan sasaran — tindakan mengatasi itu direkodkan pada API key anda. Tindakan mengatasi itu tidak sampai kepada hos yang berada dalam senarai penarikan diri kekal CrawlForge, yang ditolak tanpa mengira nilai respect_robots.
Kos Credit
Tip: Gandingkan dengan scrape_structured (2 credits, CSS sahaja) apabila anda sudah mempunyai pemilih yang stabil dan tidak memerlukan fleksibiliti LLM.