La mayoría de los tutoriales sobre "gemini web scraping" parecen escritos para la misma persona: un desarrollador Python que ya tiene un entorno virtual, un esquema Pydantic y una opinión muy marcada sobre las librerías async. Si ese eres tú, perfecto: llegaremos al código. Pero si trabajas en ventas, marketing o ecommerce y solo quieres datos estructurados de varias páginas web sin aprender qué hace markdownify, no estás solo.
Gemini es la familia de modelos de IA multimodal de Google y, cada vez más, se está convirtiendo en uno de los motores favoritos para extraer datos de la web. El Developer Survey de Stack Overflow 2025 encontró que el 84% de los desarrolladores ya usa o piensa usar herramientas de IA, y el scraping impulsado por LLMs forma una parte importante de esa tendencia. Pero hay una diferencia enorme entre una "demo genial en una sola URL" y una solución capaz de manejar paginación, subpáginas, bloqueos anti-bot y HTML desordenado a gran escala. Esta guía cubre tanto la ruta con Python (código) como la opción sin código, explica cómo elegir modelo con cálculos reales de tokens, aborda el scraping de múltiples páginas —el paso que casi todos los tutoriales omiten— y es clara sobre dónde Gemini se queda corto. Al final sabrás qué camino encaja mejor con tu flujo de trabajo y cómo evitar los errores que suelen frenar tanto a desarrolladores como a usuarios de negocio.
¿Qué es Gemini Web Scraping?
Gemini web scraping consiste en enviar el contenido de una página web —HTML, Markdown o incluso una captura de pantalla— a uno de los modelos de Gemini de Google, que luego interpreta la página y devuelve datos estructurados. Sin selectores CSS. Sin XPath. Sin reglas frágiles que se rompen en cuanto el sitio cambia un poco el diseño.
El flujo básico es este:
- Obtener la página (con
requests, un navegador headless o una extensión de Chrome) - Limpiar y convertir el contenido (normalmente de HTML a Markdown para reducir el coste en tokens)
- Enviar a Gemini con un esquema que describa los campos que quieres
- Recibir JSON estructurado listo para tu hoja de cálculo, CRM o base de datos
Compáralo con el scraping tradicional usando BeautifulSoup o Selenium, donde defines selectores a mano como div.product-title > span.price y cruzas los dedos para que el sitio no rediseñe todo el martes siguiente. Gemini lee la página como lo haría una persona: entiende el contexto, se adapta a cambios de diseño y maneja formatos caóticos sin necesidad de reglas personalizadas.
Y hay otro punto importante: Gemini es multimodal de forma nativa. Puede procesar texto, imágenes, vídeo, audio, PDF y código en una sola petición. Eso abre enfoques de scraping —como enviar una captura de pantalla en lugar de HTML— que la mayoría de los demás LLMs simplemente no pueden igualar. Más adelante lo veremos.
Por qué Gemini Web Scraping importa para equipos de negocio
Si te preguntas por qué un gerente de marketing o un analista de ecommerce debería preocuparse por los LLMs y el scraping web, la respuesta corta es esta: ahorra muchísimo tiempo y no se rompe cada vez que un sitio se actualiza.
Se proyecta que el mercado de software de web scraping crecerá desde unos 1.000 millones de dólares en 2025 hasta más de 2.000 millones en 2030, y la extracción basada en IA es el segmento que más rápido crece. No es humo: refleja un cambio real en la forma en que los equipos recopilan datos.
Así encaja Gemini scraping en flujos de trabajo reales de negocio:
| Caso de uso | Qué extraes | Quién se beneficia |
|---|---|---|
| Generación de leads | Información de contacto de directorios, LinkedIn (público) y sitios de empresas | Ventas, BDRs |
| Seguimiento de precios de la competencia | Precios de productos, stock, promociones | Ecommerce, equipos de pricing |
| Extracción de catálogos de producto | Nombres, especificaciones, imágenes, reseñas | Merchandising, operaciones de marketplaces |
| Listados inmobiliarios | Detalles de propiedades, precios, datos del agente | Agentes, inversores |
| Agregación de contenidos | Noticias, artículos de blog, menciones en redes sociales | Marketing, relaciones públicas |
| Investigación del mercado laboral | Puestos, salarios, ubicaciones | RR. HH., reclutamiento |
La ventaja práctica es doble. Primero, te ahorras el ciclo de escribir, probar y depurar scripts de análisis: el modelo relee la página desde cero cada vez. Segundo, no necesitas contratar a un desarrollador cada vez que un sitio mueve un <div>. El plan gratuito de Gemini hace que experimentar sea casi gratis en trabajos pequeños: aproximadamente 1.000 solicitudes/día en Flash-Lite y 100/día en Pro, sin necesidad de tarjeta de crédito.
¿Qué modelo de Gemini deberías elegir? (Flash Lite vs. Flash vs. Pro)
No todos los modelos de Gemini sirven igual para scraping. Esta es la comparación práctica que me habría gustado ver en todos los tutoriales, porque elegir mal la versión puede hacerte gastar de más o darte datos basura.
Los tres modelos actuales de Gemini 2.5 comparten una ventana de contexto de 1.048.576 tokens y son multimodales. Las diferencias están en coste, velocidad y capacidad para manejar extracciones complejas.
| Modelo | Coste de entrada (por 1M tokens) | Coste de salida (por 1M tokens) | Ideal para | Precisión en esquemas complejos | Velocidad |
|---|---|---|---|---|---|
| Gemini 2.5 Flash Lite | ~$0.025 | ~$0.10 | Datos simples y planos, alto volumen | ⚠️ Tiene problemas con campos anidados/opcionales | El más rápido |
| Gemini 2.5 Flash | ~$0.075 | ~$0.625 | La mayoría de tareas de scraping | ✅ Bueno para extracción estructurada | Rápido |
| Gemini 2.5 Pro | ~$0.3125 | ~$2.50 | Esquemas anidados complejos, casos límite | ✅ La mejor precisión | El más lento |
(Precios según la Gemini Developer API. La Batch API tiene un 50% de descuento en estas tarifas.)
Gemini 2.5 Flash Lite: rápido y barato, pero ojo con los huecos
Flash Lite es la opción económica. Va muy bien para datos simples y planos —nombres de producto, precios, listados de un solo nivel— cuando necesitas gran volumen. Pero tiene problemas documentados con campos opcionales, marcas de tiempo y datos anidados. Un desarrollador en el foro de Google reportó que Flash Lite "se vuelve loco" cuando el esquema incluye propiedades no obligatorias, generando texto repetitivo hasta llegar al límite de tokens. Si tu esquema tiene más de dos niveles de anidación, o campos que pueden faltar en algunas páginas, Flash Lite te hará gastar tokens y paciencia.
Gemini 2.5 Flash: el punto ideal para la mayoría de trabajos
Flash es donde yo empezaría en casi cualquier tarea real de scraping. Maneja muy bien la extracción estructurada, gestiona la lógica de paginación y cuesta unas 3 veces más que Flash Lite en entrada, pero la mejora en precisión compensa. En benchmarks de razonamiento tipo GPQA, Flash queda a pocos puntos de Pro, lo que significa que resuelve bien la inferencia, normalización y simplificación que el scraping realmente necesita.
Gemini 2.5 Pro: máxima precisión para datos complejos
Pro es la herramienta de precisión. Úsala cuando extraigas esquemas profundamente anidados (por ejemplo: especificaciones de producto con varios grupos de variantes, cada uno con tallas, colores y precios), o cuando no se pueden tolerar campos inventados (datos legales, financieros o médicos). Cuesta aproximadamente 12 veces más en entrada que Flash Lite, así que déjalo para trabajos donde la exactitud importe más que el precio.
Ejemplo real de coste: 10.000 páginas de producto
Si preprocesas HTML a Markdown —que deberías hacerlo, como verás abajo— una página de producto típica pasa de unas 20.000 tokens de HTML bruto a unos 4.000 tokens en Markdown. El JSON de salida ronda los 500 tokens por página.
| Modelo | Coste de entrada (40M tokens) | Coste de salida (5M tokens) | Total para 10K páginas |
|---|---|---|---|
| Flash Lite | $1.00 | $0.50 | ~$1.50 |
| Flash | $3.00 | $3.13 | ~$6.13 |
| Pro | $12.50 | $12.50 | ~$25.00 |
Sin preprocesar a Markdown —usando HTML bruto con unos 200M tokens de entrada— esas cifras suben entre 4 y 5 veces. Preprocesar es la optimización más rentable de toda la cadena.
Código vs. sin código: dos caminos para Gemini Web Scraping
Aquí está la bifurcación. Si eres desarrollador y estás construyendo una canalización personalizada, la ruta Python + Gemini API te da el máximo control. Si eres un usuario de negocio que necesita datos ya y no quiere tocar una terminal, un scraper de IA sin código te lleva antes al resultado.
| Criterio | Gemini API (Python) | Thunderbit (sin código) |
|---|---|---|
| Tiempo de configuración | 15–30 min (entorno, claves, librerías) | < 1 min (instalar extensión de Chrome) |
| Requiere programación | Sí (Python, Pydantic) | No |
| Manejo de paginación | Script manual | Integrado (clic o scroll infinito) |
| Enriquecimiento de subpáginas | Código personalizado por sitio | "Scrape Subpages" con 1 clic |
| Gestión de coste en tokens | Manual (limpieza de HTML, elección de modelo) | Lo gestiona el motor de IA |
| Opciones de exportación | JSON/CSV mediante script | Excel, Google Sheets, Airtable, Notion |
| Mejor para | Desarrolladores que crean pipelines personalizados | Usuarios de negocio que necesitan datos ya |
Thunderbit es la opción sin código que construimos en Thunderbit: una extensión de Chrome que usa IA (incluyendo Gemini, ChatGPT, Claude y otros por debajo) para sugerir campos, extraer en dos clics y exportar a la herramienta que prefieras. Más abajo explicaré ambos caminos.
Para quienes trabajan primero en hojas de cálculo, Quadratic es otra opción interesante: una hoja de cálculo con IA que puede ejecutar scraping web impulsado por Gemini dentro de la propia hoja. Pero para flujos que parten de una página web conocida (listados de productos, directorios, bases de leads), Thunderbit encaja mejor con el modelo mental del usuario.
Paso a paso: Gemini Web Scraping con Python
Esta sección es para desarrolladores. Si quieres la ruta sin código, salta hacia delante.
Antes de empezar:
- Nivel: intermedio (se requiere familiaridad con Python)
- Tiempo estimado: ~20–30 minutos para la primera extracción
- Necesitas: Python 3.10+, cuenta de Google AI Studio (gratis), una URL objetivo
Paso 1: prepara tu entorno Python y la clave de API de Gemini
Crea una carpeta de proyecto y un entorno virtual, e instala las librerías necesarias:
mkdir gemini-scraper && cd gemini-scraper
python -m venv venv && source venv/bin/activate
pip install -U google-genai requests beautifulsoup4 markdownify pydantic
Importante: en 2026 el único SDK correcto es google-genai. El paquete antiguo google-generativeai llegó a su fin el 2025-11-30 y ya está obsoleto. Si ves import google.generativeai as genai en un tutorial, ese código ya no es actual.
Después, consigue tu clave de API en Google AI Studio. Haz clic en "Get API Key", crea una nueva clave y guárdala como variable de entorno:
export GEMINI_API_KEY="tu-clave-aquí"
Ya deberías tener un entorno Python funcional, con todas las dependencias instaladas y la clave lista.
Paso 2: obtén el HTML de la página objetivo
Usa requests para descargar la página. En este ejemplo, vamos a extraer una página de producto:
import requests
url = "https://example.com/product/widget-pro"
response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, timeout=30)
html = response.text
Si el sitio usa mucho renderizado con JavaScript o protección anti-bot, requests.get() puede devolver una página vacía o un error 403. En la sección de limitaciones veremos cómo mitigarlo, pero en muchos sitios públicos esto funciona sin problema.
Paso 3: limpia el HTML y conviértelo a Markdown
Este es el paso que casi todos mencionan pero pocos cuantifican. El HTML bruto de una página de producto típica ronda los 20.000 tokens. Tras recortar con BeautifulSoup y convertir a Markdown, hablamos de unos 765–4.000 tokens: una reducción de 5–10 veces que ahorra dinero real y reduce alucinaciones.
from bs4 import BeautifulSoup
from markdownify import markdownify
soup = BeautifulSoup(html, "html.parser")
main = soup.select_one("main") or soup # toma solo el área principal
markdown_content = markdownify(str(main))
La llamada select_one("main") elimina encabezados, pies de página, barras de navegación y scripts: ruido que desperdicia tokens y confunde al modelo. Si el sitio no usa una etiqueta <main>, prueba con .product-detail, #content o el contenedor real donde esté la información.
Después de este paso deberías tener una cadena Markdown limpia, con solo el contenido útil de la página.
Paso 4: define tu esquema de datos y envíalo a Gemini
Usa Pydantic para definir lo que quieres recibir. El SDK google-genai acepta directamente un BaseModel de Pydantic como response_schema:
from google import genai
from google.genai import types
from pydantic import BaseModel
class Product(BaseModel):
name: str
price: str
sku: str | None = None
description: str
sizes: list[str] = []
colors: list[str] = []
client = genai.Client() # lee GEMINI_API_KEY desde el entorno
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=f"Extrae los detalles del producto de esta página:\n\n{markdown_content}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=Product,
),
)
product = response.parsed
print(product)
Algunos problemas conocidos del registro de errores documentado:
- No uses
Field(default=...)en los esquemas que envías a Gemini: la API lanza unValueError. Usasku: str | None = Nonea nivel de tipo. - Mantén el anidamiento superficial (máximo 3 niveles). Los esquemas muy profundos hacen que Flash y Flash Lite generen salida recursiva o corchetes sin cerrar.
- Marca los campos como obligatorios cuando uses Flash Lite, y usa cadenas vacías sentinela en vez de omitirlos: el manejo de opcionales en Flash Lite es poco fiable.
Ahora ya deberías tener un objeto Product parseado con datos estructurados de la página.
Paso 5: exporta y guarda los datos extraídos
Guarda el resultado como JSON o CSV:
import json
with open("products.json", "w") as f:
json.dump(product.model_dump(), f, indent=2)
Si quieres volcarlo a Google Sheets, puedes usar la librería gspread. Para bases de datos, serializa al ORM que prefieras. La salida estructurada de Gemini es lo bastante limpia como para enviarla directamente a la mayoría de herramientas posteriores.
Paso a paso: Gemini Web Scraping sin código (usando Thunderbit)
Este camino es para usuarios de negocio —o para desarrolladores que prefieren no escribir scripts desechables de scraping.
Antes de empezar:
- Nivel: principiante
- Tiempo estimado: ~5 minutos para la primera extracción
- Necesitas: navegador Chrome, extensión Thunderbit (el plan gratis funciona)
Paso 1: instala la extensión de Chrome de Thunderbit
Ve a la Chrome Web Store y haz clic en "Add to Chrome". Regístrate con tu correo: todo el proceso tarda menos de un minuto. Compáralo con la configuración de Python de 15–30 minutos de antes.
Paso 2: abre la página objetivo y haz clic en "AI Suggest Fields"
Entra en el sitio que quieres extraer: un listado de productos, un directorio inmobiliario, una base de leads, lo que sea. Haz clic en el icono de Thunderbit en la barra del navegador y luego pulsa "AI Suggest Fields."
La IA de Thunderbit lee la página y recomienda automáticamente nombres de columnas y tipos de datos: cosas como "Product Name", "Price", "Rating", "Image URL". Puedes ajustar los nombres, quitar campos que no necesites o añadir prompts de IA personalizados por columna (por ejemplo, "clasificar como Alto/Medio/Bajo" o "traducir al inglés").
Antes de extraer una sola fila ya deberías ver una vista previa de la tabla con las columnas configuradas.
Paso 3: haz clic en "Scrape" y revisa los resultados
Un clic. Thunderbit maneja la paginación —tanto botones "Next" como scroll infinito— y extrae los datos en una tabla estructurada. Puedes elegir entre:
- Cloud Scraping: más rápido, procesa hasta 50 páginas a la vez. Funciona en sitios públicos.
- Browser Scraping: se ejecuta en la pestaña de tu navegador con sesión iniciada. Úsalo en sitios que requieren autenticación (CRMs, directorios privados, herramientas internas).
Los resultados aparecen en una tabla dentro de la barra lateral de la extensión. Revisa si hay errores evidentes antes de exportar.
Paso 4: exporta a Excel, Google Sheets, Airtable o Notion
Haz clic en el botón de exportación y elige el formato. Thunderbit exporta a Excel, Google Sheets, Airtable y Notion, gratis y sin muro de pago. Los campos de imagen se suben directamente a las bibliotecas de imágenes de Notion y Airtable, lo cual es muy útil si estás extrayendo fotos de producto o retratos.
Sin JSON. Sin scripts. Los datos quedan listos para usar al instante.
Scraping de múltiples páginas y subpáginas con Gemini
La mayoría de los tutoriales terminan discretamente después de una sola URL. Los trabajos reales de scraping no.
Extraer 500 páginas de producto con paginación y subpáginas de detalle es un trabajo serio, y la diferencia entre una demo de una URL y esa realidad es enorme.
Cómo manejar paginación con Gemini API (enfoque con código)
Para URLs con número de página —el patrón más común— recorre las páginas hasta obtener un resultado vacío:
import time
all_products = []
for page in range(1, 101): # hasta 100 páginas
url = f"https://example.com/products?page={page}"
md = fetch_clean(url) # tu función HTML→Markdown de antes
response = client.models.generate_content(
model="gemini-2.5-flash-lite", # barato para páginas de listado
contents=f"Extrae nombres y URLs de productos:\n\n{md}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=list[ListingItem],
),
)
items = response.parsed
if not items:
break
all_products.extend(items)
time.sleep(4) # respeta los límites del plan gratuito
Para sitios con cursor o scroll infinito, tendrás que interceptar el endpoint XHR que llama el front-end (míralo en la pestaña Network del navegador) y recorrer ese endpoint directamente. Es más barato que volver a renderizar, y solo envías los elementos a Gemini si hace falta limpiar campos con LLM.
Vigila aquí el coste en tokens: cada página multiplica la factura. Usa Flash Lite para páginas de listado simples y sube a Flash solo para extraer detalles.
Cómo extraer subpáginas para enriquecer más los datos (enfoque con código)
El patrón clásico de dos fases: la fase 1 extrae URLs de una página de listado, la fase 2 visita cada página de detalle para obtener datos más ricos.
# Fase 1: recopila URLs con Flash Lite barato
class Listing(BaseModel):
product_urls: list[str]
listing = client.models.generate_content(
model="gemini-2.5-flash-lite",
contents=f"Extrae las URLs de productos:\n{listing_md}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=Listing,
),
).parsed
# Fase 2: extrae detalles con Flash
class ProductDetail(BaseModel):
name: str
price: str
specs: dict[str, str]
reviews: list[str]
for url in listing.product_urls:
md = fetch_clean(url)
detail = client.models.generate_content(
model="gemini-2.5-flash",
contents=f"Extrae el detalle del producto:\n{md}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=ProductDetail,
),
).parsed
# guardar detalle...
time.sleep(0.5)
Esto funciona, pero implica bastante infraestructura: deduplicación de URLs, manejo de errores, limitación de velocidad, lógica de reintentos, y cachear el HTML bruto para que un cambio de esquema no obligue a volver a hacer fetch. Para 50 páginas es manejable. Para 5.000, ya estás construyendo infraestructura.
La alternativa sin código: paginación y subpáginas integradas en Thunderbit
Thunderbit maneja automáticamente la paginación tanto por clic como por scroll infinito, así que no necesitas escribir bucles. Para enriquecer subpáginas, la función "Scrape Subpages" visita cada página de detalle enlazada desde el listado y completa la tabla original con campos más profundos. Un clic, no un script.
El modo Cloud Scraping procesa hasta 50 páginas simultáneamente, lo que marca una gran diferencia cuando estás extrayendo un catálogo de productos o un directorio inmobiliario a escala. Para cualquiera que no quiera gestionar bucles de Python y lógica de reintentos, esta es la opción práctica. (Si quieres más información sobre extraer datos de webs a Excel, tenemos una guía aparte.)
Scraping con capturas de pantalla: el atajo multimodal de Gemini
Aquí tienes un enfoque que la mayoría de tutoriales omite por completo: enviar una captura de pantalla de una página web a la API de visión de Gemini en lugar de HTML bruto. Un desarrollador reportó que una sola captura cuesta solo unos ~258 tokens, frente a miles incluso para Markdown limpio. Para extracciones sencillas, la diferencia de coste es enorme.
Cómo usar la API de visión de Gemini para web scraping
Captura una pantalla con Playwright, codifícala y envíala a Gemini:
from playwright.sync_api import sync_playwright
from google import genai
from google.genai import types
from pydantic import BaseModel
class Product(BaseModel):
title: str
price: str
with sync_playwright() as p:
page = p.chromium.launch().new_page()
page.goto("https://example.com/product/widget-pro")
page.wait_for_load_state("networkidle")
png_bytes = page.screenshot(full_page=False) # solo la parte visible
client = genai.Client()
resp = client.models.generate_content(
model="gemini-2.5-flash",
contents=[
{"inline_data": {"mime_type": "image/png", "data": png_bytes}},
"Extrae el título y el precio del producto en JSON.",
],
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=Product,
),
)
print(resp.parsed)
Según la documentación de tokens para imágenes de Google, una imagen donde ambas dimensiones son ≤ 384 píxeles cuesta 258 tokens. Las imágenes más grandes se trocean en bloques de 768×768 a 258 tokens cada uno. Una captura corta de la parte visible (258–1.600 tokens) gana claramente frente al HTML bruto, pero una captura muy alta de toda la página (~5.000 tokens) puede perder frente a un Markdown limpio (~765–1.200 tokens).
Limitaciones del scraping con capturas
- Menor precisión en tablas densas: diseños con varias columnas, fuentes pequeñas y elementos superpuestos pueden producir lecturas parciales: no tanto alucinaciones como etiquetas omitidas y encabezados desalineados.
- No sigue enlaces: la visión devuelve texto, no anclas clicables. Sin paginación, sin enriquecimiento de subpáginas.
- Límite de resolución: el texto de menos de ~10 px suele leerse mal. Google reduce la imagen a unos ~1.568 px por el lado más largo.
- Sobrecarga de captura: iniciar Playwright y esperar a
networkidleañade 2–5 segundos por página, y eso a gran escala pesa.
El scraping con capturas brilla en páginas muy cargadas de JavaScript, sitios con bloqueo anti-bot (donde requests.get() devuelve 403 pero el navegador sí renderiza), y páginas con datos incrustados en gráficos o imágenes. Para páginas largas y llenas de texto, Markdown sigue siendo mejor opción.
El scraping de imágenes y PDF de Thunderbit usa un enfoque similar basado en visión de IA: subes una imagen o PDF y devuelve una tabla estructurada, sin scripts de captura ni manipulación de base64. (También te puede interesar: cómo convertir imágenes a Excel.)
Cuando Gemini Web Scraping falla (y qué hacer en su lugar)
Gemini es un motor de extracción, no un motor de descarga. Si no consigues llevar el contenido de la página a Gemini, no podrá ayudarte. Así de simple.
Hay varios escenarios comunes en los que todo el enfoque se rompe, y la mayoría de tutoriales los tratan como algo secundario. Prefiero ir directo al grano.
| Limitación | Qué ocurre | Cómo mitigarlo |
|---|---|---|
| Anti-bot / Cloudflare | Las peticiones de la API se bloquean; requests.get() devuelve 403 o una página de desafío | Usa proxies con rotación de huella TLS, o herramientas basadas en navegador (el modo Browser Scraping de Thunderbit usa tu sesión iniciada) |
| Límites de ventana de tokens | Las páginas grandes superan el contexto útil (~200K–300K para extracción fiable, aunque 1M sea el máximo técnico) | Limpieza HTML→Markdown, dividir páginas o usar capturas |
| Alucinación en contenido visual | Gemini adivina a partir de texto alt o pies de foto en vez de leer realmente la imagen | Valida salidas; usa explícitamente la API de visión para datos de imagen; añade validadores de grounding |
| Límites de la API | A gran escala te aplica throttling: el plan gratuito tiene ~100 RPD en Pro y ~1.000 RPD en Flash Lite | Gestión de colas, batching (50% de descuento) o cambiar a herramientas preconstruidas |
| Extracción inconsistente (modelos Lite) | Se omiten o inventan campos opcionales, fechas y datos anidados | Sube a Flash/Pro o añade restricciones de esquema más explícitas |
| Sitios protegidos (LinkedIn, etc.) | Devuelve errores o datos vacíos | Scraping basado en navegador con sesión activa (Thunderbit lo soporta); respeta los Términos |
Algunas de estas limitaciones merecen un poco más de contexto.
Los anti-bot ahora son conscientes de LLMs. Cloudflare bloquea crawlers de IA por defecto desde julio de 2025, con 416.000 millones de solicitudes de bots de IA bloqueadas en los primeros cinco meses. Datadome añadió detección específica para LLMs en 2025 y vio cómo el tráfico de bots LLM se cuadruplicaba. Un simple requests.get() + Gemini está prácticamente muerto contra sitios protegidos por Datadome. El problema es la huella digital, no la IP: rotar IPs no sirve de nada si la huella TLS grita "Python requests".
Las alucinaciones son sutiles. Los LLMs están entrenados para ser útiles, así que rellenan campos opcionales con invenciones plausibles en vez de devolver null. He visto modelos deducir la marca de un producto a partir del slug de la URL, inferir la moneda por el TLD y escribir conteos de reseñas plausibles pero falsos a partir de esqueletos de carga. La estrategia de mitigación: esquemas Pydantic estrictos, bucles de reintento con feedback de validación, validadores de grounding que comprueben que los valores extraídos sí aparecen en el HTML fuente, y extracción en dos pasos (Flash extrae, Pro valida una muestra).
La ventana de 1M de contexto no es utilizable al máximo. Investigaciones de Chroma y otras fuentes muestran que la calidad del razonamiento se degrada mucho antes del límite de tokens. Trata unos 200K–300K tokens como techo práctico para extracción estructurada.
Árbol de decisión: ¿qué herramienta deberías usar?
- Bajo volumen + páginas simples + desarrollador → plan gratuito de Gemini API + Python
- Volumen medio + esquemas complejos + desarrollador → Gemini 2.5 Flash de pago + Python + salida estructurada + preprocesado
- Cualquier volumen + no desarrollador + páginas con login o mucha paginación → Thunderbit
- Volumen muy alto + anti-bot fuerte + misión crítica → infraestructura de scraping gestionada (servicios proxy) + Gemini como capa de extracción
Gemini Web Scraping: consejos para ahorrar tiempo y dinero
Tanto si escribes Python como si haces clic en botones, estos consejos te ahorrarán dolores de cabeza.
- Convierte siempre HTML a Markdown antes de enviarlo a Gemini. Lo normal es ahorrar entre 5 y 10 veces en tokens; si además recortas con BeautifulSoup, puedes llegar al 95%.
- Usa solo
google-genai. No utilices el paquete obsoletogoogle-generativeai. - Empieza con Flash Lite solo para esquemas planos. Cambia a Flash en cuanto aparezcan anidamientos o campos opcionales.
- Evita
Field(default=...)en los esquemas Pydantic que envías a Gemini. Usasku: str | None = Nonea nivel de tipo. - Pydantic +
response_schemaes clave: funciona como contrato y como barrera contra alucinaciones. - Usa la Batch API para trabajos de más de 1.000 páginas: tiene 50% de descuento y no cuenta contra el RPM en tiempo real.
- Valida a mano una muestra aleatoria de 10–50 filas antes de escalar un nuevo extractor. La deriva de precisión no se ve hasta que revisas.
- Guarda el HTML bruto en disco: cambiar el esquema no debería obligarte a volver a descargar todo.
- Registra la URL de origen en cada fila para poder volver a rastrear páginas individuales sin repetir todo el trabajo.
- Para usuarios sin código: usa prompts de IA personalizados por columna en Thunderbit para llevar la ingeniería de prompts al nivel de la hoja: traducir, clasificar o resumir por columna.
Y una más: no lleves el plan gratis a producción. Los límites se recortaron entre un 50% y un 80% en diciembre de 2025 y podrían volver a recortarse sin aviso.
Conclusión
La distancia entre una demo de Gemini en una sola URL y una canalización lista para producción es mayor de lo que la mayoría de tutoriales admiten.
La ruta Python + Gemini API da a los desarrolladores control total sobre la elección del modelo, el preprocesado, la paginación y el diseño del esquema. La ruta sin código —con herramientas como Thunderbit— permite a los usuarios de negocio extraer datos estructurados sin tocar una terminal.
Esto es lo que me llevaría de todo esto:
- La elección del modelo importa. Flash Lite para volumen, Flash para equilibrio, Pro para complejidad. No uses por defecto la opción más barata y luego te preguntes por qué los datos salen mal.
- El scraping de múltiples páginas y subpáginas es donde fallan los tutoriales y donde ocurre el trabajo real. Ambos caminos descritos aquí cubren ese hueco.
- Las limitaciones honestas te ahorran tiempo. Si un sitio bloquea peticiones de API, ningún prompt engineering lo arreglará. Elige la herramienta adecuada, no la más vistosa.
- Convertir HTML a Markdown es la optimización más rentable: reduce costes más de un 75% y baja las alucinaciones.
Si quieres probar la ruta sin código, el plan gratuito de Thunderbit te permite extraer unas cuantas páginas y ver los resultados por ti mismo. Si prefieres programar, el plan gratuito de la API de Gemini basta para prototipar una canalización en una tarde. En cualquiera de los casos, tendrás datos estructurados mucho más rápido que copiando y pegando a mano. Para más información sobre extraer datos de sitios web a Excel o los mejores web scrapers con IA, hemos tratado esos temas en profundidad en nuestro blog.
Prueba Thunderbit para web scraping con IA Get Started Free
Preguntas frecuentes
¿Cuánto cuesta usar Gemini para web scraping?
La API de Gemini tiene un plan gratuito con aproximadamente 100 solicitudes/día en Pro, 500/día en Flash y 1.000/día en Flash Lite (a principios de 2026; estos límites se redujeron en diciembre de 2025). En el plan de pago, extraer 10.000 páginas de producto cuesta aproximadamente $1.50 con Flash Lite, $6 con Flash o $25 con Pro, suponiendo que primero conviertas HTML a Markdown. Sin preprocesado, los costes suben entre 4 y 5 veces. La Batch API ofrece un 50% de descuento para trabajos no en tiempo real.
¿Puede Gemini extraer sitios que requieren inicio de sesión?
La API de Gemini por sí sola no puede iniciar sesión en sitios web: solo procesa el contenido que le envías. Necesitas obtener el HTML tú mismo usando tu propia sesión autenticada (por ejemplo, con un navegador headless y cookies guardadas). El modo Browser Scraping de Thunderbit lo gestiona de forma nativa: se ejecuta en tu pestaña de Chrome con sesión iniciada, así que cualquier sitio que puedas ver en el navegador, Thunderbit puede extraerlo.
¿Es legal hacer web scraping con Gemini?
La legalidad depende de los términos del sitio, del tipo de datos y de tu jurisdicción. En EE. UU., tras hiQ v. LinkedIn y Meta v. Bright Data, extraer datos públicos sin iniciar sesión suele considerarse permitido, pero cada caso depende de sus circunstancias concretas. Scraping detrás de un login implica más riesgo legal. Los datos personales de residentes en la UE están sujetos al GDPR aunque el sitio sea público. Respeta siempre robots.txt y los términos de servicio, y evita extraer datos personales sin una base legal.
¿Puedo usar Gemini para extraer sitios dinámicos con mucho JavaScript?
Sí, pero primero tienes que renderizar el JavaScript, ya sea con un navegador headless (Playwright, Puppeteer) o interceptando directamente los endpoints de la API del sitio. Una vez tengas el HTML renderizado, límpialo y envíalo a Gemini como siempre. Como alternativa, el scraping con capturas usando la API de visión de Gemini evita por completo el renderizado JS: si se ve en el navegador, Gemini puede verlo. Thunderbit maneja automáticamente las páginas renderizadas con JS tanto en modo Cloud como en Browser Scraping.
¿Qué diferencia hay entre usar Gemini para scraping y usar una herramienta dedicada como Thunderbit?
Gemini es un motor de extracción: interpreta contenido y devuelve datos estructurados. No visita sitios web, no gestiona la paginación, no administra autenticación ni exporta a hojas de cálculo. Aun así necesitas algo que lleve el contenido de la página a Gemini y algo que use el resultado después. Las herramientas dedicadas como Thunderbit combinan obtención, renderizado, extracción con IA, paginación, enriquecimiento de subpáginas y exportación en un solo paquete, sin tener que montar toda la infraestructura.
Más información


