Skip to main content
POST https://api.acedata.cloud/webextrator/extract L’API di estrazione intelligente WebExtrator converte un URL in risultati strutturati tipizzati — articoli, prodotti, ricette, video, discussioni, assunzioni, ecc., fornendo anche Markdown e testo semplice puliti. Quando desideri “dati strutturati puliti” invece di HTML grezzo, questo è l’interfaccia da utilizzare. Alla base c’è una pipeline a tre livelli:
  1. Mapper JSON-LD schema.org — deterministico, costo zero di LLM. Copre Wikipedia / BestBuy / AllRecipes / YouTube / la maggior parte delle notizie / la maggior parte delle pagine prodotto.
  2. Estrazione LLM tipizzata — attivata solo quando schema.org non è colpito. Seleziona Schema in base al tipo di pagina, verifica rigorosa Zod.
  3. Readability + Markdown come fallback — sempre in esecuzione, completa i campi di livello superiore non riempiti dalle prime due fasi.
Le richieste duplicate di URL verranno catturate dalla cache dei risultati Redis, <1 ms di ritorno.

Processo di richiesta

Per utilizzare la pagina del servizio WebExtrator, prima vai al Pannello di controllo di Ace Data Cloud per ottenere il tuo API Token, da conservare per uso futuro. Se non hai ancora effettuato il login o la registrazione, verrai automaticamente reindirizzato alla pagina di accesso che ti invita a registrarti e accedere; una volta completato, verrai riportato automaticamente alla pagina corrente. Un API Token è sufficiente per chiamare tutti i servizi della piattaforma, senza bisogno di richiederne uno separato per ogni servizio. La prima richiesta ti darà un credito gratuito, per un’esperienza gratuita; quando il credito è insufficiente, puoi ricaricare il saldo generale nel pannello di controllo.
📘 Documentazione completa: Pagina del servizio WebExtrator →

Autenticazione

Parametri di richiesta

Extract accetta tutti i parametri Render API (url, user_agent, timeout, wait_until, delay, wait_for_selector, block_resources, headers, cookies, callback_url, bypass_cache, cache_ttl_seconds, async), più due campi esclusivi di Extract:
Quando la pagina ha schema.org JSON-LD, enable_llm è inefficace — il mapper deterministico restituisce direttamente il risultato, non sprecherà mai una chiamata LLM. Ottieni gratuitamente risultati tipizzati.

Risposta sincrona

Campi di livello superiore

Sottocampi di data.structured

Copertura del mapper schema.org

Ordinato per priorità (il primo colpo è considerato structured.schemaOrg.primary): Elaborazione del mapper:
  • Contenitore @graph (espansione ricorsiva);
  • Array @type (come ["Recipe", "NewsArticle"] — entrambi riconosciuti, prevale il primo);
  • Varianti con prefisso http://schema.org/;
  • Offer e AggregateOffer annidati (quest’ultimo legge lowPrice);
  • URL delle immagini relative (risolte in assoluto secondo finalUrl).

Schema tipizzato LLM

Quando enable_llm: true e schema.org non ha primary, l’estrattore utilizza euristiche basate sull’URL (o suggerimenti expected_type) per selezionare uno dei modelli di output di Zod Schema: In caso di successo, LLM riempirà anche i campi di livello superiore come “ultima risorsa”:
  • articledescription / byline / publishedAt / language
  • productdescription
  • discussiondescription (primi 280 caratteri del body) / byline (uguale a author) / publishedAt (uguale a postedAt)
  • recipedescription / byline (uguale a author)
  • videodescription / byline (uguale a channel) / publishedAt (uguale a uploadDate)
  • jobdescription / byline (uguale a company) / publishedAt (uguale a datePosted)
Il riempimento si attiva solo quando le fonti di dati certe non hanno riempito i campi corrispondenti — LLM è sempre l’ultima risorsa.

Cache

Richieste identiche verranno hashate nello stesso Redis Key: webextrator:cache:extract:<sha256(canonical-json)>. La chiave di cache ignora async, bypass_cache, cache_ttl_seconds (questo è un interruttore operativo, non influisce sulla risposta). cookies / headers verranno memorizzati in cache separatamente. Le risposte che colpiscono la cache porteranno data.cached: true e data.cacheStoredAt: <unix-ms>.

Modalità asincrona e callback

Impostare async: true per entrare in modalità asincrona (fornire callback_url attiverà automaticamente). La piattaforma restituisce immediatamente (HTTP 200):
Al termine del compito, l’intero envelope verrà POST al tuo callback_url (se configurato). Puoi anche consultare attivamente tramite /webextrator/tasks.

Esempio

1. Articolo di Wikipedia (schema.org colpito, non è necessario LLM)

Campo chiave data.structured.schemaOrg.primary:

2. Pagina prodotto BestBuy (schema.org colpito)

schema.org estratto:

3. Pagina ricetta AllRecipes (con nutrizione e passaggi)

schema.org estratto:

4. Pagina di discussione HN (senza JSON-LD —— necessità di abilitare LLM)

data.structured.llm.data:
I campi di livello superiore sono stati anche riempiti: byline = "alice"publishedAt = "..."

5. Pagina prodotto Amazon (Amazon senza JSON-LD —— necessità di abilitare LLM)

data.structured.llm.data (tipizzato product):

Python (requests)

Node.js (fetch)

Suggerimenti e problemi

  • Se puoi passare expected_type, fallo. Suggerimento gratuito, salta il giudizio euristico, particolarmente utile per le pagine il cui modello URL non è nella lista incorporata.
  • enable_llm: true è gratuito sulle pagine colpite da schema.org. LLM viene chiamato solo quando non c’è un primario in schema.org, quindi è sicuro tenerlo attivato di default.
  • Durante il debug, controlla prima rawSignals.hasJsonLd. Se è true ma structured.schemaOrg.primary è null, significa che la pagina ha utilizzato un tipo @type che il nostro mapper non ha ancora coperto —— apri un issue, lo aggiungeremo.
  • structured.llmError è informativo. La richiesta ha comunque successo, il risultato euristico viene restituito. Controlla llmError.error per individuare la causa (timeout, errore di parsing JSON, errore di validazione Zod).
  • I links[] non articoli non saranno ordinati per rilevanza. Solo secondo “fino a 100 voci + filtraggio dei protocolli non validi” si cerca di pulire.
  • Le cache colpite vengono comunque addebitate. La cache serve per ritardi e per proteggere il pool del browser, non per risparmiare.