Gemini Web Scraping che Funziona Davvero (Con e Senza Codice)

Ultimo aggiornamento il April 15, 2026

Molti tutorial su "gemini web scraping" sembrano scritti per la stessa persona: uno sviluppatore Python che ha già un ambiente virtuale, uno schema Pydantic e idee molto precise sulle librerie async. Se sei tu, perfetto — arriveremo anche al codice. Ma se lavori in sales, marketing o ecommerce ops e vuoi solo dati strutturati da una serie di pagine web senza imparare cosa fa markdownify, sappi che non sei affatto solo.

Gemini è la famiglia di modelli AI multimodali di Google e sta rapidamente diventando uno dei motori di riferimento per l’estrazione di dati dal web. Il Developer Survey 2025 di Stack Overflow ha rilevato che sta già usando o prevede di usare strumenti AI — e lo scraping con LLM è una parte importante di questa tendenza. Ma c’è una differenza enorme tra una "demo carina su un singolo URL" e una pipeline capace di gestire paginazione, sottopagine, barriere anti-bot e HTML disordinato su larga scala. Questa guida copre sia il percorso Python (con codice) sia quello no-code, ti accompagna nella scelta del modello con numeri di token reali, affronta lo scraping multi-pagina (il passaggio che quasi tutti gli altri tutorial saltano) ed è onesta su dove lo scraping con Gemini si inceppa. Alla fine saprai quale strada si adatta meglio al tuo flusso di lavoro — e come evitare gli errori che vedo bloccare sia gli sviluppatori sia gli utenti business.

Cos’è il Gemini Web Scraping?

Per Gemini web scraping si intende l’invio del contenuto di una pagina web — HTML, Markdown o persino uno screenshot — a uno dei modelli AI di Google Gemini, che interpreta la pagina e restituisce dati strutturati. Niente selettori CSS. Niente XPath. Niente regole fragili che saltano appena il sito cambia layout.

Il flusso di lavoro di base è questo:

  1. Recuperare la pagina (con requests, un browser headless o un’estensione Chrome)
  2. Pulire e convertire il contenuto (di solito da HTML a Markdown, per ridurre i costi in token)
  3. Inviare il tutto a Gemini con uno schema che descriva i campi desiderati
  4. Ricevere indietro JSON strutturato — pronto per fogli di calcolo, CRM o database

Confrontalo con lo scraping tradizionale con BeautifulSoup o Selenium, dove scrivi a mano selettori come div.product-title > span.price e speri che il sito non si ridisegni martedì prossimo. Gemini legge la pagina come farebbe una persona: capisce il contesto, si adatta ai cambiamenti di layout e gestisce formattazioni caotiche senza regole personalizzate.

Un’altra cosa importante: Gemini è nativamente multimodale. Elabora testo, immagini, video, audio, PDF e codice in un’unica richiesta. Questo apre approcci di scraping — come inviare uno screenshot al posto dell’HTML — che la maggior parte degli altri LLM non riesce semplicemente a eguagliare. Ci torneremo più avanti.

Perché il Gemini Web Scraping Conta per i Team Business

Se ti stai chiedendo perché un marketing manager o un ecommerce analyst dovrebbe interessarsi a LLM e web scraping, ecco la versione breve: fa risparmiare un’enorme quantità di tempo e non si rompe ogni volta che un sito si aggiorna.

Il da circa 1 miliardo di dollari nel 2025 a oltre 2 miliardi entro il 2030 — e l’estrazione guidata dall’AI è il segmento che cresce più rapidamente. Non è hype: riflette un cambiamento reale nel modo in cui i team raccolgono dati.

Ecco dove lo scraping con Gemini si inserisce nei flussi di lavoro aziendali di tutti i giorni:

Caso d’usoCosa estraiChi ne beneficia
Generazione leadContatti da directory, LinkedIn (pubblico), siti aziendaliSales, BDR
Monitoraggio prezzi dei competitorPrezzi prodotto, disponibilità, promozioniEcommerce, team pricing
Estrazione cataloghi prodottoNomi, specifiche, immagini, recensioniMerchandising, marketplace ops
Annunci immobiliariDettagli proprietà, prezzi, info agenteAgenti, investitori
Aggregazione contenutiNews, articoli blog, menzioni socialMarketing, PR
Ricerca sul mercato del lavoroRuoli, stipendi, localitàHR, recruiting

Il vantaggio pratico è doppio. Primo, salti il ciclo di scrittura, test e debug degli script di parsing — il modello rilegge la pagina ogni volta da zero. Secondo, non serve chiamare uno sviluppatore ogni volta che un sito sposta un <div>. Il tier gratuito di Gemini rende l’esperimento quasi a costo zero per lavori su piccola scala: , senza carta di credito.

Quale modello Gemini conviene scegliere? (Flash Lite vs Flash vs Pro)

Non tutti i modelli Gemini sono uguali per lo scraping. Questa è la comparazione pratica che vorrei vedere in ogni tutorial, perché scegliere il tier sbagliato significa o buttare soldi o ottenere dati inutilizzabili.

Tutti e tre i modelli attuali Gemini 2.5 condividono una finestra di contesto da 1.048.576 token e sono multimodali. Le differenze stanno in costo, velocità e capacità di gestire estrazioni complesse.

ModelloCosto input (per 1M token)Costo output (per 1M token)Ideale perPrecisione su schemi complessiVelocità
Gemini 2.5 Flash Lite~$0,025~$0,10Dati semplici e piatti, grandi volumi⚠️ Fatica con campi annidati/opzionaliIl più veloce
Gemini 2.5 Flash~$0,075~$0,625La maggior parte dei task di scraping✅ Ottimo per estrazione strutturataVeloce
Gemini 2.5 Pro~$0,3125~$2,50Schemi annidati complessi, casi limite✅ Massima accuratezzaIl più lento

(Prezzi da . La Batch API costa il 50% in meno.)

Gemini 2.5 Flash Lite: Veloce ed economico, ma occhio ai buchi

Flash Lite è l’opzione economica. È perfetto per dati semplici e piatti — nomi prodotto, prezzi, liste a un solo livello — ad alto volume. Ma presenta problemi documentati con campi opzionali, timestamp e dati annidati. Un developer sul forum di Google che Flash Lite "impazzisce" quando lo schema include proprietà non obbligatorie, producendo testo ripetitivo fino al raggiungimento del limite di token. Se il tuo schema ha più di due livelli di annidamento, o campi che in alcune pagine possono mancare, Flash Lite ti consumerà token e pazienza.

Gemini 2.5 Flash: Il punto giusto per la maggior parte dei lavori

Flash è il modello che sceglierei per quasi ogni task reale di scraping. Gestisce bene l’estrazione strutturata, sa amministrare la logica di paginazione e costa circa 3 volte più di Flash Lite in input — ma il salto di accuratezza vale la spesa. Nei benchmark di ragionamento , Flash resta a pochi punti da Pro, il che significa che se la cava bene con inferenza, normalizzazione e flattening, cioè proprio ciò che richiede lo scraping.

Gemini 2.5 Pro: Massima accuratezza per dati complessi

Pro è lo strumento di precisione. Usalo quando devi estrarre schemi molto annidati (per esempio: specifiche prodotto con più gruppi di varianti, ognuno con taglie, colori e prezzi), oppure quando i campi inventati sono inaccettabili (dati legali, finanziari, medici). Il costo input è circa 12 volte quello di Flash Lite, quindi riservalo ai casi in cui l’accuratezza conta più del prezzo.

Esempio di costo reale: 10.000 pagine prodotto

Supponendo di preprocessare l’HTML in Markdown (cosa che dovresti fare — più sotto spiego perché), una tipica pagina prodotto passa da ~20.000 token di HTML grezzo a ~4.000 token di Markdown. Il JSON in output vale circa 500 token per pagina.

ModelloCosto input (40M token)Costo output (5M token)Totale per 10K pagine
Flash Lite$1,00$0,50~$1,50
Flash$3,00$3,13~$6,13
Pro$12,50$12,50~$25,00

Senza il preprocessing in Markdown (HTML grezzo a ~200M token input), questi numeri salgono di 4-5 volte. Il preprocessing è l’ottimizzazione con il maggiore impatto nell’intera pipeline.

Codice o No-Code: Due strade per Gemini Web Scraping

Ecco il bivio. Se sei uno sviluppatore e stai costruendo una pipeline personalizzata, il percorso Python + Gemini API ti offre il massimo controllo. Se sei un utente business e vuoi i dati subito, senza toccare un terminale, un AI scraper no-code ti porta al risultato molto più velocemente.

CriterioGemini API (Python)Thunderbit (No-Code)
Tempo di setup15–30 min (ambiente, chiavi, librerie)< 1 min (installazione estensione Chrome)
Richiesta di codiceSì (Python, Pydantic)Nessuna
Gestione paginazioneScript manualeIntegrata (click o infinite scroll)
Arricchimento sottopagineCodice personalizzato per sito"Scrape Subpages" con 1 clic
Gestione costi tokenManuale (pulizia HTML, scelta modello)Gestita dal motore AI
Opzioni di exportJSON/CSV via scriptExcel, Google Sheets, Airtable, Notion
Ideale perSviluppatori che costruiscono pipeline customUtenti business che vogliono dati subito

è l’opzione no-code che abbiamo sviluppato in Thunderbit — un’estensione Chrome che usa l’AI (tra cui Gemini, ChatGPT, Claude e altri dietro le quinte) per suggerire i campi, fare scraping in due clic ed esportare nel tool che preferisci. Più sotto vedrai entrambi i percorsi.

Per chi lavora soprattutto con fogli di calcolo, Quadratic è un’altra opzione da tenere presente: è uno spreadsheet AI che può eseguire scraping web alimentato da Gemini direttamente nel foglio. Ma per flussi di lavoro che partono da una pagina web già nota (listing prodotto, directory, database lead), Thunderbit riflette molto meglio il modello mentale dell’utente.

Passo dopo passo: Gemini Web Scraping con Python

Questa sezione è per gli sviluppatori. Se preferisci il percorso no-code, puoi saltare avanti.

Prima di iniziare:

  • Difficoltà: Intermedia (serve familiarità con Python)
  • Tempo richiesto: ~20–30 minuti per il primo scraping
  • Cosa ti serve: Python 3.10+, un account Google AI Studio (gratis), un URL di destinazione

Passo 1: Configura l’ambiente Python e la chiave API Gemini

Crea una cartella progetto e un ambiente virtuale, poi installa le librerie necessarie:

1mkdir gemini-scraper && cd gemini-scraper
2python -m venv venv && source venv/bin/activate
3pip install -U google-genai requests beautifulsoup4 markdownify pydantic

Importante: l’unico SDK corretto nel 2026 è google-genai. Il vecchio pacchetto google-generativeai è arrivato a fine vita il 2025-11-30 ed è ora deprecato. Se in un tutorial vedi import google.generativeai as genai, quel codice è obsoleto.

Poi recupera la tua API key da . Clicca su "Get API Key", crea una nuova chiave e salvala come variabile d’ambiente:

1export GEMINI_API_KEY="your-key-here"

A questo punto dovresti avere un ambiente Python funzionante, con tutte le dipendenze installate e la chiave API pronta.

Passo 2: Recupera l’HTML della pagina di destinazione

Usa requests per scaricare la pagina. Per questo esempio, estraiamo una pagina prodotto:

1import requests
2url = "https://example.com/product/widget-pro"
3response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, timeout=30)
4html = response.text

Se il sito usa rendering JavaScript pesante o protezioni anti-bot, requests.get() può restituire una shell vuota o un 403. Nella sezione sulle limitazioni vedremo come aggirare il problema — ma per molti siti pubblici questa soluzione funziona benissimo.

Passo 3: Pulisci l’HTML e converti in Markdown

Questo è il passaggio che quasi tutti i tutorial citano ma non quantificano. L’HTML grezzo di una tipica pagina prodotto pesa circa 20.000 token. Dopo il pruning con BeautifulSoup e la conversione in Markdown, si scende a circa 765–4.000 token — una che fa risparmiare soldi veri e riduce le allucinazioni.

1from bs4 import BeautifulSoup
2from markdownify import markdownify
3soup = BeautifulSoup(html, "html.parser")
4main = soup.select_one("main") or soup  # prendi solo l’area contenuti
5markdown_content = markdownify(str(main))

La chiamata select_one("main") elimina header, footer, barra di navigazione e script — tutto rumore che spreca token e confonde il modello. Se il sito non usa un tag <main>, prova con .product-detail, #content o qualunque contenitore racchiuda i dati reali.

Dopo questo passaggio dovresti avere una stringa Markdown pulita con solo il contenuto significativo della pagina.

Passo 4: Definisci lo schema dati e invia tutto a Gemini

Usa Pydantic per definire cosa vuoi ricevere. Lo SDK google-genai accetta direttamente un BaseModel Pydantic come response_schema:

1from google import genai
2from google.genai import types
3from pydantic import BaseModel
4class Product(BaseModel):
5    name: str
6    price: str
7    sku: str | None = None
8    description: str
9    sizes: list[str] = []
10    colors: list[str] = []
11client = genai.Client()  # legge GEMINI_API_KEY dall’ambiente
12response = client.models.generate_content(
13    model="gemini-2.5-flash",
14    contents=f"Estrai i dettagli del prodotto da questa pagina:\n\n{markdown_content}",
15    config=types.GenerateContentConfig(
16        response_mime_type="application/json",
17        response_schema=Product,
18    ),
19)
20product = response.parsed
21print(product)

Alcuni problemi noti dal :

  • Non usare Field(default=...) negli schemi inviati a Gemini — l’API genera un ValueError. Usa invece sku: str | None = None a livello di tipo.
  • Mantieni poco profondo l’annidamento (massimo 3 livelli). Schemi troppo annidati fanno sì che Flash e Flash Lite producano output ricorsivi o parentesi non chiuse.
  • Marca i campi come obbligatori quando usi Flash Lite e, invece di ometterli, usa stringhe vuote sentinella — la gestione dei campi opzionali da parte di Flash Lite è .

A questo punto dovresti avere un oggetto Product parsato con dati strutturati estratti dalla pagina.

Passo 5: Esporta e salva i dati estratti

Salva il risultato in JSON o CSV:

1import json
2with open("products.json", "w") as f:
3    json.dump(product.model_dump(), f, indent=2)

Per inviare i dati in Google Sheets, puoi usare la libreria gspread. Per i database, serializza nel tuo ORM preferito. L’output strutturato di Gemini è sufficientemente pulito da poter passare direttamente alla maggior parte degli strumenti downstream.

Passo dopo passo: Gemini Web Scraping senza codice (con Thunderbit)

Questo è il percorso per gli utenti business — o per gli sviluppatori che preferiscono non scrivere script di scraping usa-e-getta.

Prima di iniziare:

  • Difficoltà: Principiante
  • Tempo richiesto: ~5 minuti per il primo scraping
  • Cosa ti serve: Browser Chrome, (il tier gratuito basta)

Passo 1: Installa l’estensione Chrome di Thunderbit

Vai sul e clicca su "Aggiungi a Chrome". Registrati con la tua email — l’intero processo richiede meno di un minuto. Confrontalo con il setup Python da 15–30 minuti visto sopra.

Passo 2: Apri la pagina di destinazione e clicca "AI Suggest Fields"

Vai sul sito che vuoi estrarre — una lista prodotti, una directory immobiliare, un database lead, qualsiasi cosa. Clicca l’icona di Thunderbit nella barra del browser, poi premi "AI Suggest Fields."

L’AI di Thunderbit legge la pagina e consiglia automaticamente nomi colonna e tipi di dato — cose come "Product Name", "Price", "Rating", "Image URL". Puoi modificare i nomi delle colonne, rimuovere i campi inutili o aggiungere prompt AI personalizzati per ogni colonna (per esempio: "classifica come High/Medium/Low" oppure "traduci in inglese").

Prima di estrarre anche una sola riga, vedrai un’anteprima della tabella con le colonne configurate.

Passo 3: Clicca "Scrape" e controlla i risultati

Un clic. Thunderbit gestisce la paginazione — sia i pulsanti "Next" sia lo scrolling infinito — e trasforma i dati in una tabella strutturata. Puoi scegliere tra:

  • Cloud Scraping: più veloce, elabora fino a 50 pagine simultaneamente. Funziona sui siti pubblici.
  • Browser Scraping: gira nella scheda Chrome in cui hai effettuato l’accesso. Usalo per siti che richiedono autenticazione (CRM, directory protette, strumenti interni).

I risultati compaiono in una tabella direttamente nella sidebar dell’estensione. Controlla eventuali errori evidenti prima di esportare.

Passo 4: Esporta in Excel, Google Sheets, Airtable o Notion

Clicca il pulsante di export e scegli il formato. Thunderbit esporta in Excel, Google Sheets, Airtable e Notion — gratis, senza paywall. I campi immagine vengono caricati direttamente nelle librerie immagini di Notion e Airtable, un dettaglio molto utile se stai estraendo foto prodotto o foto profilo.

Niente parsing JSON. Niente scripting. I dati sono subito pronti all’uso.

Scraping multi-pagina e delle sottopagine con Gemini

La maggior parte dei tutorial finisce in silenzio dopo un singolo URL. I veri lavori di scraping non finiscono lì.

Estrarre 500 pagine prodotto con paginazione e sottopagine di dettaglio è un lavoro vero — e la distanza tra una demo su un URL singolo e questa realtà è enorme.

Gestire la paginazione con Gemini API (approccio con codice)

Per URL con numeri di pagina (lo schema più comune), fai un loop finché non ottieni un risultato vuoto:

1import time
2all_products = []
3for page in range(1, 101):  # fino a 100 pagine
4    url = f"https://example.com/products?page={page}"
5    md = fetch_clean(url)  # la tua funzione HTML→Markdown vista prima
6    response = client.models.generate_content(
7        model="gemini-2.5-flash-lite",  # economico per le listing page
8        contents=f"Estrai nomi e URL dei prodotti:\n\n{md}",
9        config=types.GenerateContentConfig(
10            response_mime_type="application/json",
11            response_schema=list[ListingItem],
12        ),
13    )
14    items = response.parsed
15    if not items:
16        break
17    all_products.extend(items)
18    time.sleep(4)  # rispetta i limiti del tier gratuito

Per siti basati su cursor o infinite scroll, dovrai intercettare l’endpoint XHR chiamato dal frontend (controlla la scheda Network del browser) e ciclare direttamente quell’endpoint. È molto più economico che far renderizzare di nuovo tutto, e invii i dati a Gemini solo se serve una pulizia tramite LLM.

Occhio ai costi in token qui — ogni pagina moltiplica il conto. Usa Flash Lite per le listing page semplici e passa a Flash solo per l’estrazione dei dettagli.

Estrarre sottopagine per dati più ricchi (approccio con codice)

Il classico schema in due fasi: la Stage 1 estrae gli URL da una listing page, la Stage 2 visita ogni pagina di dettaglio per ottenere dati più completi.

1# Stage 1: raccogli gli URL con il Flash Lite più economico
2class Listing(BaseModel):
3    product_urls: list[str]
4listing = client.models.generate_content(
5    model="gemini-2.5-flash-lite",
6    contents=f"Estrai gli URL dei prodotti:\n{listing_md}",
7    config=types.GenerateContentConfig(
8        response_mime_type="application/json",
9        response_schema=Listing,
10    ),
11).parsed
12# Stage 2: estrai i dettagli con Flash
13class ProductDetail(BaseModel):
14    name: str
15    price: str
16    specs: dict[str, str]
17    reviews: list[str]
18for url in listing.product_urls:
19    md = fetch_clean(url)
20    detail = client.models.generate_content(
21        model="gemini-2.5-flash",
22        contents=f"Estrai i dettagli del prodotto:\n{md}",
23        config=types.GenerateContentConfig(
24            response_mime_type="application/json",
25            response_schema=ProductDetail,
26        ),
27    ).parsed
28    # salva il dettaglio...
29    time.sleep(0.5)

Funziona, ma richiede tanta infrastruttura: deduplicazione degli URL, gestione errori, rate limiting, retry logic, caching dell’HTML grezzo così da non dover rifare i fetch se cambi lo schema. Per 50 pagine è fattibile. Per 5.000, stai costruendo un’infrastruttura vera e propria.

L’alternativa no-code: paginazione e sottopagine integrate di Thunderbit

Thunderbit gestisce automaticamente sia la paginazione click-based sia quella infinite scroll — senza bisogno di scrivere loop. Per l’arricchimento delle sottopagine, la funzione "Scrape Subpages" visita ogni pagina di dettaglio collegata dalla tua listing e arricchisce la tabella originale con campi più profondi. Un clic, non uno script.

La modalità cloud processa fino a 50 pagine contemporaneamente, e questo fa davvero la differenza quando stai estraendo un catalogo prodotti o una directory immobiliare su larga scala. Per chi non vuole gestire loop Python e logica di retry, questa è la scelta pratica. (Per approfondire , abbiamo una guida dedicata.)

Screenshot Scraping: la scorciatoia multimodale di Gemini

Ecco un approccio che la maggior parte dei tutorial salta completamente: inviare a Gemini un screenshot della pagina web invece dell’HTML grezzo. Un developer che uno screenshot singolo costa solo ~258 token — contro le migliaia anche del Markdown ripulito. Per estrazioni semplici è una differenza di costo enorme.

Come usare la Vision API di Gemini per il web scraping

Cattura uno screenshot con Playwright, codificalo e invialo a Gemini:

1from playwright.sync_api import sync_playwright
2from google import genai
3from google.genai import types
4from pydantic import BaseModel
5class Product(BaseModel):
6    title: str
7    price: str
8with sync_playwright() as p:
9    page = p.chromium.launch().new_page()
10    page.goto("https://example.com/product/widget-pro")
11    page.wait_for_load_state("networkidle")
12    png_bytes = page.screenshot(full_page=False)  # solo above-the-fold
13client = genai.Client()
14resp = client.models.generate_content(
15    model="gemini-2.5-flash",
16    contents=[
17        {"inline_data": {"mime_type": "image/png", "data": png_bytes}},
18        "Estrai titolo e prezzo del prodotto in formato JSON.",
19    ],
20    config=types.GenerateContentConfig(
21        response_mime_type="application/json",
22        response_schema=Product,
23    ),
24)
25print(resp.parsed)

Secondo la , un’immagine in cui entrambe le dimensioni sono ≤ 384 pixel costa 258 token. Le immagini più grandi vengono suddivise in riquadri da 768×768, ognuno da 258 token. Uno screenshot breve above-the-fold (258–1.600 token) batte di gran lunga l’HTML grezzo — ma uno screenshot molto alto dell’intera pagina (~5.000 token) può risultare meno efficiente di un Markdown pulito (~765–1.200 token).

Limiti dello screenshot scraping

  • Precisione inferiore sulle tabelle dense: layout multi-colonna, font piccoli ed elementi sovrapposti portano a letture parziali — non allucinazioni, ma etichette saltate e intestazioni disallineate.
  • Non può seguire i link: la vision restituisce testo, non anchor cliccabili. Niente paginazione, niente arricchimento delle sottopagine.
  • Limite di risoluzione: il testo sotto ~10 px viene spesso letto male. Google riduce l’immagine a circa 1.568 px sul lato lungo.
  • Overhead di cattura: avviare Playwright + attendere networkidle richiede 2–5 secondi per pagina, e su larga scala il tempo cresce rapidamente.

Lo screenshot scraping dà il meglio su pagine pesanti in JavaScript, siti protetti da bot (dove requests.get() restituisce un 403 ma il browser visualizza correttamente la pagina) e pagine con dati incorporati in grafici o immagini. Per pagine lunghe e ricche di testo, il Markdown resta la scelta migliore.

Lo scraping di immagini e PDF di Thunderbit usa un approccio simile basato sulla visione AI: carichi un’immagine o un PDF e ottieni una tabella strutturata, senza dover scrivere script per screenshot o gestire base64. (Vedi anche: .)

Quando il Gemini Web Scraping fallisce (e cosa fare al posto suo)

Gemini è un motore di estrazione, non un motore di fetching. Se non riesci a far arrivare il contenuto della pagina a Gemini, non può aiutarti. Punto.

Ci sono diversi scenari comuni in cui tutto l’approccio si rompe, e la maggior parte dei tutorial li tratta come un dettaglio secondario. Preferisco essere diretto.

LimiteCosa succedeCome mitigarlo
Anti-bot / CloudflareLe richieste API vengono bloccate; requests.get() restituisce 403 o una challenge pageUsa proxy con rotazione del TLS fingerprint, oppure strumenti browser-based (la modalità browser scraping di Thunderbit usa la tua sessione loggata)
Limiti della context windowLe pagine grandi superano il contesto utile (~200K–300K per un’estrazione affidabile, anche se teoricamente supporta 1M)Pulizia HTML→Markdown, suddivisione delle pagine o screenshot
Allucinazioni su contenuti visualiGemini deduce da alt text o caption invece che dal contenuto reale dell’immagineValida gli output; usa esplicitamente la vision API per i dati immagine; aggiungi validator di grounding
Rate limit APILimitazioni su larga scala — il tier gratuito è ~100 RPD su Pro, ~1.000 RPD su Flash LiteGestione in coda, batching (sconto 50%) oppure strumenti già pronti
Estrazione incoerente (modelli Lite)Campi opzionali, timestamp e dati annidati vengono saltati o inventatiPassa a Flash/Pro, oppure aggiungi vincoli di schema espliciti
Siti protetti (LinkedIn, ecc.)Restituisce errori o dati vuotiScraping basato su browser con sessione attiva (Thunderbit lo supporta); rispetta i ToS

Alcuni di questi punti meritano un po’ di contesto in più.

Oggi l’anti-bot è consapevole degli LLM. Cloudflare da luglio 2025, con 416 miliardi di richieste di bot AI bloccate nei primi cinque mesi. Datadome ha introdotto nel 2025 il rilevamento specifico per LLM e ha visto il traffico dei bot LLM quadruplicare. Un semplice requests.get() + Gemini è di fatto morto contro i siti protetti da Datadome. Il problema è il fingerprint, non l’IP — cambiare solo IP non serve a nulla se il fingerprint TLS urla "Python requests".

Le allucinazioni sono sottili. I modelli addestrati a essere utili compilano spesso i campi opzionali con informazioni plausibili ma inventate, invece di restituire null. Ho visto modelli indovinare il brand di un prodotto dallo slug dell’URL, dedurre la valuta dal TLD e scrivere conteggi recensioni plausibili ma falsi a partire da skeleton loader. Lo stack di mitigazione: schemi Pydantic rigorosi, loop di retry con feedback di validazione, validator di grounding che verificano che i valori estratti compaiano davvero nell’HTML sorgente, e (Flash estrae, Pro valida un campione).

La finestra di contesto da 1M non è davvero utilizzabile a 1M. e altre mostrano che la qualità del ragionamento degrada ben prima del limite teorico dei token. Considera ~200K–300K token come tetto pratico per l’estrazione strutturata.

Albero decisionale: quale strumento dovresti usare?

  • Basso volume + pagine semplici + sviluppatore → Gemini API free tier + Python
  • Volume medio + schemi complessi + sviluppatore → Gemini 2.5 Flash a pagamento + Python + structured outputs + preprocessing
  • Qualsiasi volume + non sviluppatore + pagine con login o paginazione pesante
  • Volume molto alto + anti-bot forte + mission critical → infrastruttura di scraping gestita (proxy service) + Gemini come layer di estrazione

Gemini Web Scraping: consigli per risparmiare tempo e denaro

Che tu stia scrivendo Python o cliccando pulsanti, questi suggerimenti ti eviteranno un sacco di problemi.

  1. Preprocessa sempre l’HTML in Markdown prima di inviarlo a Gemini. Una riduzione tipica è ; puoi arrivare al 95% se fai anche un pre-trim con BeautifulSoup.
  2. Usa solo google-genai. Non usare il pacchetto deprecato google-generativeai — è EOL.
  3. Parti da Flash Lite solo per schemi piatti. Passa a Flash appena compaiono annidamenti o campi opzionali.
  4. Evita Field(default=...) negli schemi Pydantic che passi a Gemini. Usa invece sku: str | None = None a livello di tipo.
  5. Pydantic + response_schema sono fondamentali — sono sia un contratto sia un paracadute contro le allucinazioni.
  6. Usa la per job oltre le 1.000 pagine — costa il 50% in meno e non incide sul RPM realtime.
  7. Valida a mano un campione casuale di 10–50 righe prima di scalare un nuovo estrattore. La deriva di accuratezza è invisibile finché non controlli.
  8. Metti in cache l’HTML grezzo su disco — cambiare schema non dovrebbe costringerti a rifare i fetch.
  9. Registra l’URL sorgente su ogni riga così puoi ri-crawlarla singolarmente senza rilanciare tutto il job.
  10. Per chi usa il no-code: usa i prompt AI personalizzati per colonna in Thunderbit per spostare il prompt engineering nel livello del foglio — traduci, categorizza, riassumi a livello di colonna.

E un’ultima cosa: non portare il tier gratuito in produzione. I limiti sono stati tagliati del 50–80% nel dicembre 2025 e potrebbero essere ridotti di nuovo senza preavviso.

In chiusura

La distanza tra una demo Gemini su un singolo URL e una pipeline di produzione è molto più ampia di quanto dicano molti tutorial.

Il percorso Python + Gemini API offre agli sviluppatori pieno controllo su scelta del modello, preprocessing, paginazione e progettazione dello schema. Il percorso no-code — strumenti come — offre agli utenti business la stessa estrazione di dati strutturati senza toccare un terminale.

Ecco i punti chiave da portare a casa:

  • La scelta del modello conta. Flash Lite per i volumi, Flash per l’equilibrio, Pro per la complessità. Non partire dall’opzione più economica e poi chiederti perché i dati sono sbagliati.
  • Lo scraping multi-pagina e delle sottopagine è il punto in cui i tutorial si fermano — ed è invece lì che si svolge il lavoro reale. Entrambi i percorsi descritti qui colmano quel vuoto.
  • Conoscere i limiti reali ti fa risparmiare tempo. Se un sito blocca le richieste API, nessun prompt engineering ti salverà. Scegli lo strumento giusto per il lavoro, non quello più appariscente.
  • Preprocessare l’HTML in Markdown è l’ottimizzazione con il massimo impatto — taglia i costi di oltre il 75% e riduce le allucinazioni.

Se vuoi provare il percorso no-code, il ti permette di estrarre qualche pagina e vedere i risultati con i tuoi occhi. Se preferisci il codice, il tier gratuito dell’API Gemini basta per prototipare una pipeline in un pomeriggio. In ogni caso, otterrai dati strutturati molto più velocemente di quanto abbia mai permesso il copia-incolla. Per saperne di più su o , abbiamo trattato questi argomenti in profondità nel nostro blog.

Prova Thunderbit per il Web Scraping con AI

FAQ

Quanto costa usare Gemini per il web scraping?

L’API Gemini offre un tier gratuito con circa 100 richieste/giorno su Pro, 500/giorno su Flash e 1.000/giorno su Flash Lite (all’inizio del 2026 — questi limiti sono stati ridotti nel dicembre 2025). Sul tier a pagamento, lo scraping di 10.000 pagine prodotto costa circa $1,50 con Flash Lite, $6 con Flash o $25 con Pro — assumendo che tu converta prima l’HTML in Markdown. Senza preprocessing, i costi aumentano di 4–5 volte. La Batch API offre uno sconto del 50% per i job non real-time.

Gemini può estrarre siti che richiedono login?

L’API di Gemini da sola non può eseguire il login sui siti — processa solo il contenuto che le invii. Devi recuperare tu l’HTML usando la tua sessione autenticata (per esempio con un browser headless e cookie salvati). La modalità Browser Scraping di Thunderbit gestisce tutto nativamente: gira nella tua scheda Chrome già loggata, quindi qualsiasi sito tu riesca a vedere nel browser, Thunderbit può estrarlo.

Il Gemini web scraping è legale?

La legalità dipende dai termini di servizio del sito, dal tipo di dati e dalla giurisdizione. Negli Stati Uniti, dopo hiQ v. LinkedIn e Meta v. Bright Data, lo scraping di dati pubblicamente accessibili senza login è generalmente considerato consentito — ma ogni caso dipende dai fatti specifici. Lo scraping dietro login comporta un rischio legale maggiore. I dati personali dei residenti UE sono soggetti al GDPR indipendentemente dal fatto che il sito sia pubblico o meno. Rispetta sempre robots.txt e i termini di servizio, ed evita di estrarre dati personali senza una base giuridica valida.

Posso usare Gemini per estrarre siti dinamici con molto JavaScript?

Sì, ma devi prima renderizzare il JavaScript — con un browser headless (Playwright, Puppeteer) oppure intercettando direttamente gli endpoint API del sito. Una volta ottenuto l’HTML renderizzato, lo pulisci e lo invii a Gemini come al solito. In alternativa, lo screenshot scraping con la vision API di Gemini aggira del tutto il rendering JS — se la pagina si vede in un browser, Gemini la può vedere. Thunderbit gestisce automaticamente le pagine renderizzate in JS sia in modalità Cloud sia in modalità Browser.

Qual è la differenza tra usare Gemini per lo scraping e uno strumento dedicato come Thunderbit?

Gemini è un motore di estrazione: interpreta il contenuto e restituisce dati strutturati. Non visita i siti, non gestisce la paginazione, non amministra l’autenticazione e non esporta nei fogli di calcolo. Ti serve comunque qualcosa che porti il contenuto della pagina a Gemini e qualcosa che renda utile l’output. Strumenti dedicati come combinano fetching, rendering, estrazione AI, paginazione, arricchimento delle sottopagine ed export in un unico pacchetto — senza bisogno di assemblare tutto tu.

Scopri di più

Shuai Guan
Shuai Guan
Co-founder/CEO @ Thunderbit. Passionate about cross section of AI and Automation. He's a big advocate of automation and loves making it more accessible to everyone. Beyond tech, he channels his creativity through a passion for photography, capturing stories one picture at a time.
Indice

Prova Thunderbit

Estrai lead e altri dati in soli 2 clic. Potenziato dall’AI.

Scarica Thunderbit È gratis
Estrai dati con l’AI
Trasferisci facilmente i dati a Google Sheets, Airtable o Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week