AI Web Scraping: Estrazione LLM, Prompt-to-JSON e Costo

L'estrazione LLM trasforma qualsiasi pagina in JSON pulito da un prompt in inglese semplice — senza selettori da mantenere. Ma il modello non può recuperare la pagina e l'HTML grezzo consuma velocemente i token. Ecco come farlo correttamente.

L'AI web scraping significa puntare un modello linguistico su una pagina e chiedere, in inglese semplice, i campi che vuoi restituire come JSON — senza scrivere selettori CSS, senza parser da mantenere quando il layout cambia. È davvero trasformativo per estrazioni disordinate, varie o occasionali. È anche ampiamente frainteso, motivo per cui le persone finiscono per pagare per raschiare poche centinaia di pagine e ottenere dati allucinati. Due fatti risolvono la maggior parte di questa confusione: un modello linguistico non può recuperare una pagina web — ragiona solo sul testo che gli fornisci — e alimentarlo con HTML grezzo è il modo più veloce per bruciare il tuo budget di token. Questa guida copre il modello di estrazione che funziona, quando supera i selettori, e come tenere sotto controllo sia i costi che le allucinazioni.

La cosa che nessuno dice: il modello non può recuperare

La parte difficile dell'AI scraping non è l'AI. Un chatbot non può caricare in modo affidabile una pagina live — ha bisogno di un motore dedicato per recuperare prima l'HTML, poi ragiona su qualunque testo tu fornisca. Quindi una pipeline di estrazione LLM è in realtà una pipeline di scraping con un parser intelligente aggiunto alla fine, e la metà di scraping è dove le cose si rompono: gestione dei bot, rendering JavaScript, blocchi IP. Risolvi il recupero con proxy e un livello di rendering, e l'estrazione diventa la parte facile. Il modo pulito per ottenere pagine è un scraper API che gestisce la rotazione e il rendering e restituisce markdown, che — come mostra la sezione successiva — è anche l'input più economico possibile per un modello:

import requests

def fetch_markdown(url, api_key):
    r = requests.get(
        "https://api.quantumproxies.io/scrape",
        params={"url": url, "render": "auto", "output": "markdown"},
        headers={"Authorization": f"Bearer {api_key}"},
        timeout=(5, 40),
    )
    r.raise_for_status()
    return r.json()["markdown"]  # nav/ads stripped, ready for the model

Perché markdown, non HTML, è la vera leva di costo

Il singolo fattore più grande del costo dell'AI scraping è quanti token spingi attraverso il modello, e l'HTML grezzo è per lo più token che non vuoi: stili inline, tag script, attributi di tracciamento, navigazione, footer. Converti la pagina in markdown pulito — o estrai solo il contenuto principale — prima dell'estrazione e riduci regolarmente la dimensione dell'input di un ordine di grandezza, il che riduce i costi dello stesso fattore e, come bonus, riduce le allucinazioni perché il modello vede il contenuto invece del chrome. Questo è il motivo per cui markdown-first è lo standard per alimentare i modelli, lo stesso principio dietro alimentare gli LLM con dati web freschi. Se prendi solo una cosa da questo articolo: non inviare mai a un modello il sorgente grezzo della pagina.

Diagramma della pipeline di estrazione LLM: recupera la pagina con proxy o uno scraper API, puliscila in markdown, prompt con uno schema, quindi valida l'output JSON
Il modello non tocca mai il web live. Il recupero e la pulizia avvengono prima, il markdown riduce il conto dei token, e uno schema mantiene il JSON onesto.

Prompt-to-JSON con uno schema

Una volta che hai testo pulito, l'estrazione è una singola chiamata: descrivi i campi che vuoi, passa uno schema in modo che l'output sia strutturato e istruisci il modello a restituire null piuttosto che inventare quando un campo è assente. Un extraction API collassa recupero, pulizia ed estrazione in una sola richiesta così salti completamente l'impianto idraulico:

curl -X POST "https://api.quantumproxies.io/extract" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/product/xyz",
    "schema": {
      "title":  "string",
      "price":  "number",
      "in_stock": "boolean",
      "rating": "number|null"
    },
    "prompt": "Extract the product. Use null for anything not present."
  }'

Lo schema svolge un doppio compito: forza una forma prevedibile per il codice a valle e vincola il modello, che è la prima linea di difesa contro i campi allucinati. Valida la risposta contro lo stesso schema e rifiuta tutto ciò che non si adatta — un prezzo inventato è peggio di uno mancante.

def validate(record, schema):
    for field, kind in schema.items():
        v = record.get(field)
        if v is None and "null" not in kind:
            raise ValueError(f"missing required field: {field}")
    return record  # only trust records that satisfy the schema

Quando l'estrazione LLM supera i selettori CSS — e quando no

L'estrazione AI non è un aggiornamento universale; è uno strumento diverso con una curva di costo diversa. Usalo quando il lavoro è vario o instabile — raschiare mille siti con mille layout, un sito che si ridisegna costantemente, contenuti non strutturati come recensioni o elenchi dove non esiste un selettore pulito, o un lavoro occasionale dove scrivere selettori non vale il tempo. Rimani con i selettori CSS o XPath quando stai martellando un sito stabile ad alto volume: i selettori sono deterministici, praticamente gratuiti per pagina, e non allucinano mai. Il modello maturo è ibrido — selettori per i tuoi obiettivi principali ad alto volume, estrazione LLM per la coda lunga e i siti che continuano a cambiare.

La disciplina dei costi trasforma questo da un esperimento a una produzione. Oltre al markdown-first, cache aggressivamente in modo da non dover mai ri-estrarre una pagina invariata, abbina la dimensione del modello alla difficoltà del compito — un modello piccolo gestisce bene l'estrazione di campi semplici — e batch dove l'API lo consente. Il rendering è una voce di costo a sé stante; rendi solo le pagine che hanno veramente bisogno di JavaScript, una decisione che quantifichiamo in render only when you must. Ottieni una pagina vuota invece del contenuto e la soluzione è solitamente il rendering, trattato in empty page, missing data.

Una parola sulla strada gratuita e open-source, poiché è ciò che la maggior parte delle persone cerca per primo. Le librerie di estrazione open-source sono eccellenti per apprendere il modello e per lavori piccoli, ma ti restituiscono i due problemi difficili con cui questo articolo ha aperto: devi ancora recuperare le pagine oltre la gestione dei bot, e paghi ancora per qualunque modello faccia l'estrazione. 'Gratuito' di solito significa codice gratuito più i tuoi costi di proxy e token. È un buon compromesso per un progetto hobbistico o una prova di concetto; a volume di produzione la manutenzione del livello di recupero è esattamente ciò che i team finiscono per esternalizzare, una decisione build-versus-buy che illustriamo in DIY scraper stack vs a scraper API.

Confronto tra estrazione LLM e selettori CSS, mostrando l'approccio flessibile per token contro l'approccio deterministico economico per siti stabili ad alto volume
L'estrazione LLM vince su siti vari e in cambiamento; i selettori vincono su un obiettivo stabile ad alto volume. La maggior parte delle pipeline reali utilizza entrambi.

Domande frequenti

ChatGPT può raschiare un sito web?

Non da solo. Un modello linguistico non può recuperare e rendere in modo affidabile una pagina live — ragiona sul testo che fornisci. Per usare l'AI per lo scraping abbini un motore di scraping dedicato, che recupera e pulisce la pagina, con il modello, che estrae dati strutturati dal risultato. Il motore di scraping gestisce proxy, rendering e blocchi; il modello si occupa di trasformare il contenuto in JSON.

Come riduco il costo dell'AI web scraping?

Converti le pagine in markdown o estrai il contenuto principale prima di inviare qualsiasi cosa a un modello — l'HTML grezzo può essere dieci volte i token per la stessa informazione. Poi cache le pagine invariate, usa un modello più piccolo per l'estrazione di campi semplici, rendi JavaScript solo quando una pagina lo richiede, e batch le richieste. Il volume dei token è il costo dominante, quindi ridurre la dimensione dell'input è l'ottimizzazione con il massimo effetto leva.

L'AI web scraping allucina dati errati?

Può, specialmente quando alimentato con HTML grezzo rumoroso o richiesto di campi che non sono sulla pagina. Proteggiti pulendo l'input, passando uno schema esplicito, istruendo il modello a restituire null quando un valore è assente, e validando ogni risposta contro quello schema prima di fidarti. Un campo mancante puoi riprovare; uno inventato con sicurezza corrompe silenziosamente il tuo dataset.

L'estrazione LLM è migliore dei selettori CSS?

Dipende dal lavoro. L'estrazione LLM vince quando i layout variano o cambiano spesso e quando scrivere selettori non vale la pena, perché non ha bisogno di selettori e sopravvive ai redesign. I selettori CSS vincono su un singolo sito stabile ad alto volume: sono deterministici e molto più economici per pagina. La maggior parte delle pipeline di produzione utilizza selettori per obiettivi principali e estrazione LLM per la coda lunga.

L'AI web scraping è potente una volta che smetti di trattare il modello come uno scraper. Recupera pulito con proxy, alimenta markdown non HTML, vincola l'output con uno schema, e riserva l'estrazione LLM per i lavori dove la sua flessibilità giustifica il costo dei token. Questa è la differenza tra una demo elegante e una pipeline che puoi eseguire ogni giorno.

Trasforma qualsiasi pagina in JSON con l'Extract API