scrape_ structured
Ekstrak data berstruktur daripada mana-mana halaman web menggunakan pemilih CSS tersuai. Sesuai untuk scraping produk e-dagang, pengagregatan berita dan apa-apa keperluan pengekstrakan data tersuai.
Kes Penggunaan
Scraping Produk E-Dagang
Ekstrak tajuk produk, harga, penerangan dan imej daripada kedai dalam talian
Pengekstrakan Artikel Berita
Ekstrak tajuk utama, penulis, tarikh dan kandungan daripada tapak berita
Transformasi Data Tersuai
Petakan mana-mana struktur HTML kepada skema JSON yang anda kehendaki
Penyenaraian Hartanah
Ekstrak butiran hartanah, harga dan imej daripada tapak penyenaraian
Endpoint
/api/v1/tools/scrape_structuredParameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Optional | - | Halaman untuk diambil dan diekstrak. Sama ada `url` atau `html` diperlukan. Example: https://example.com/product |
html | string | Optional | - | HTML mentah untuk dihurai dan bukannya diambil. Gandingkan dengan `base_url` untuk menyelesaikan nilai atribut relatif. Example: <html>...</html> |
selectors | object | Required | - | Memetakan nama medan anda kepada pemilih CSS. Sekurang-kurangnya satu entri diperlukan — nama medan itu milik anda dan kembali tanpa berubah dalam keputusan. Example: {"title": "h1.product-title", "price": ".price", "description": ".product-desc"} |
base_url | string | Optional | - | Asas untuk menyelesaikan URL relatif yang ditemui dalam atribut yang diekstrak. Example: https://example.com |
multiple | boolean | Optional | false | Apabila true, ekstrak senarai item berulang dan bukannya satu rekod. Ia mengubah bentuk respons — lihat di bawah. Example: true |
clean_text | boolean | Optional | true | Runtuhkan ruang putih dan pangkas teks yang diekstrak. Example: true |
include_attributes | array | Optional | - | Turut tangkap atribut HTML ini daripada setiap elemen yang sepadan, bukan teksnya sahaja. Example: ["href", "src", "alt"] |
max_items | number | Optional | 100 | Bilangan maksimum item yang dipulangkan apabila `multiple` true, 1-1000. Example: 100 |
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 |
Pemilih CSS:
Gunakan mana-mana sintaks pemilih CSS yang sah. Corak biasa:
.className- Pilih mengikut kelas#id- Pilih mengikut IDtag.class- Gabungkan tag dan kelas.parent > .child- Anak langsung[data-id="value"]- Pemilih atribut
Contoh Permintaan
cURL - E-Commerce Product
curl -X POST https://crawlforge.dev/api/v1/tools/scrape_structured \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/product/123",
"selectors": {
"title": "h1.product-title",
"price": ".price-value",
"currency": ".price-currency",
"description": ".product-description",
"image": "img.main-image",
"rating": ".rating-value",
"availability": ".stock-status"
}
}'TypeScript - News Article
// npm install crawlforge-sdk
import { CrawlForge } from 'crawlforge-sdk';
const client = new CrawlForge({ apiKey: process.env.CRAWLFORGE_API_KEY });
const result = await client.scrapeStructured({
url: 'https://example.com/news/article-123',
selectors: {
headline: 'h1.article-title',
author: '.author-name',
publishDate: 'time.publish-date',
category: '.category-tag',
content: '.article-body',
image: '.article-image img'
}
});
// result.data is untyped in crawlforge-sdk 0.1 — its shape is the Response Example below.
const article = result.data as { headline: string; author: string; publishDate: string };
console.log('Article:', article.headline);
console.log('By:', article.author);
console.log('Published:', article.publishDate);Python - Real Estate Listing
# pip install crawlforge
from crawlforge import CrawlForge
client = CrawlForge() # reads CRAWLFORGE_API_KEY
result = client.scrape_structured(
url='https://example.com/property/456',
selectors={
'address': '.property-address',
'price': '.listing-price',
'bedrooms': '.bed-count',
'bathrooms': '.bath-count',
'sqft': '.square-feet',
'description': '.property-description',
'images': '.gallery img'
},
)
# result.data is a plain dict — its shape is the Response Example below.
property_data = result.data
print(f"Property: {property_data['address']}")
print(f"Price: {property_data['price']}")
print(f"Beds: {property_data['bedrooms']}")
print(f"Baths: {property_data['bathrooms']}")Contoh Respons
{ "success": true, "data": { "title": "Premium Wireless Headphones", "price": "299.99", "currency": "USD", "description": "High-quality wireless headphones with active noise cancellation and 30-hour battery life.", "image": "https://example.com/images/headphones.jpg", "rating": "4.7", "availability": "In Stock" }, "credits_used": 2, "credits_remaining": 998, "processing_time": 320}data.titleDiekstrak daripada pemilih h1.product-titledata.priceDiekstrak daripada pemilih .price-valuedata.descriptionDiekstrak daripada pemilih .product-descriptioncredits_usedCredits ditolak untuk permintaan ini (2 setiap scrape)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
Petua: Untuk scraping berbilang halaman dengan struktur yang sama, gunakan batch_scrape untuk kecekapan yang lebih baik.
Alat Berkaitan
Bersedia untuk mengekstrak data berstruktur? Daftar percuma dan dapatkan 1,000 credits.