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 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 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: , 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 . 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 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 , 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 |
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:
1mkdir gemini-scraper && cd gemini-scraper
2python -m venv venv && source venv/bin/activate
3pip 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 . Haz clic en "Get API Key", crea una nueva clave y guárdala como variable de entorno:
1export 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:
1import requests
2> This paragraph contains content that cannot be parsed and has been skipped.
3Si 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.
4### Paso 3: limpia el HTML y conviértelo a Markdown
5Este 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](https://web2md.com/reduce-llm-token-usage) que ahorra dinero real y reduce alucinaciones.
6```python
7from bs4 import BeautifulSoup
8from markdownify import markdownify
9soup = BeautifulSoup(html, "html.parser")
10main = soup.select_one("main") or soup # toma solo el área principal
11markdown_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:
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() # lee GEMINI_API_KEY desde el entorno
12response = client.models.generate_content(
13 model="gemini-2.5-flash",
14 contents=f"Extrae los detalles del producto de esta página:\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)
Algunos problemas conocidos del :
- 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 .
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:
1import json
2with open("products.json", "w") as f:
3 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, (el plan gratis funciona)
Paso 1: instala la extensión de Chrome de Thunderbit
Ve a la 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:
1import time
2all_products = []
3for page in range(1, 101): # hasta 100 páginas
4 url = f"https://example.com/products?page={page}"
5 md = fetch_clean(url) # tu función HTML→Markdown de antes
6 response = client.models.generate_content(
7 model="gemini-2.5-flash-lite", # barato para páginas de listado
8 contents=f"Extrae nombres y URLs de productos:\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) # 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.
1# Fase 1: recopila URLs con Flash Lite barato
2class Listing(BaseModel):
3 product_urls: list[str]
4listing = client.models.generate_content(
5 model="gemini-2.5-flash-lite",
6 contents=f"Extrae las URLs de productos:\n{listing_md}",
7 config=types.GenerateContentConfig(
8 response_mime_type="application/json",
9 response_schema=Listing,
10 ),
11).parsed
12# Fase 2: extrae detalles 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"Extrae el detalle del producto:\n{md}",
23 config=types.GenerateContentConfig(
24 response_mime_type="application/json",
25 response_schema=ProductDetail,
26 ),
27 ).parsed
28 # guardar detalle...
29 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 , 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 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:
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 la parte visible
13> This paragraph contains content that cannot be parsed and has been skipped.
14Según la [documentación de tokens para imágenes](https://ai.google.dev/gemini-api/docs/image-understanding) 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).
15### Limitaciones del scraping con capturas
16- **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.
17- **No sigue enlaces:** la visión devuelve texto, no anclas clicables. Sin paginación, sin enriquecimiento de subpáginas.
18- **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.
19- **Sobrecarga de captura:** iniciar Playwright y esperar a `networkidle` añade 2–5 segundos por página, y eso a gran escala pesa.
20El 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.
21El 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](https://thunderbit.com/blog/convert-images-to-excel).)
22## Cuando Gemini Web Scraping falla (y qué hacer en su lugar)
23Gemini 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.
24Hay 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.
25> This paragraph contains content that cannot be parsed and has been skipped.
26Algunas de estas limitaciones merecen un poco más de contexto.
27**Los anti-bot ahora son conscientes de LLMs.** Cloudflare [bloquea crawlers de IA por defecto](https://www.tomshardware.com/news/cloudflare-blocks-ai-bots-by-default) 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".
28**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](https://github.com/googleapis/python-genai/issues/699) (Flash extrae, Pro valida una muestra).
29**La ventana de 1M de contexto no es utilizable al máximo.** [Investigaciones de Chroma](https://research.trychroma.com/context-rot) 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.
30### Árbol de decisión: ¿qué herramienta deberías usar?
31- **Bajo volumen + páginas simples + desarrollador** → plan gratuito de Gemini API + Python
32- **Volumen medio + esquemas complejos + desarrollador** → Gemini 2.5 Flash de pago + Python + salida estructurada + preprocesado
33- **Cualquier volumen + no desarrollador + páginas con login o mucha paginación** → [Thunderbit](https://thunderbit.com/)
34- **Volumen muy alto + anti-bot fuerte + misión crítica** → infraestructura de scraping gestionada (servicios proxy) + Gemini como capa de extracción
35## Gemini Web Scraping: consejos para ahorrar tiempo y dinero
36Tanto si escribes Python como si haces clic en botones, estos consejos te ahorrarán dolores de cabeza.
371. **Convierte siempre HTML a Markdown** antes de enviarlo a Gemini. Lo normal es ahorrar [entre 5 y 10 veces en tokens](https://searchcans.com/markdown-vs-html-for-llm-context); si además recortas con BeautifulSoup, puedes llegar al 95%.
382. **Usa solo `google-genai`.** No utilices el paquete obsoleto `google-generativeai`.
393. **Empieza con Flash Lite solo para esquemas planos.** Cambia a Flash en cuanto aparezcan anidamientos o campos opcionales.
404. **Evita `Field(default=...)` en los esquemas Pydantic** que envías a Gemini. Usa `sku: str | None = None` a nivel de tipo.
415. **Pydantic + `response_schema` es clave**: funciona como contrato y como barrera contra alucinaciones.
426. **Usa la [Batch API](https://ai.google.dev/gemini-api/docs/pricing) para trabajos de más de 1.000 páginas**: tiene 50% de descuento y no cuenta contra el RPM en tiempo real.
437. **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.
448. **Guarda el HTML bruto en disco**: cambiar el esquema no debería obligarte a volver a descargar todo.
459. **Registra la URL de origen en cada fila** para poder volver a rastrear páginas individuales sin repetir todo el trabajo.
4610. 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.
47Y 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.
48## Conclusión
49La 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.
50La 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](https://thunderbit.com/)— permite a los usuarios de negocio extraer datos estructurados sin tocar una terminal.
51<iframe width="560" height="315" src="https://www.youtube.com/embed/pycp1b8Gh3o" title="El scraper web nativo de Gemini: 100% \" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen></iframe>
52Esto es lo que me llevaría de todo esto:
53- **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.
54- **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.
55- **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.
56- **Convertir HTML a Markdown es la optimización más rentable**: reduce costes más de un 75% y baja las alucinaciones.
57Si quieres probar la ruta sin código, [el plan gratuito de Thunderbit](https://chromewebstore.google.com/detail/thunderbit-ai-web-scraper/hbkblmodhbmcakopmmfbaopfckopccgp) 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](https://thunderbit.com/blog/extract-data-from-website-to-excel) o [los mejores web scrapers con IA](https://thunderbit.com/blog/best-ai-web-scrapers), hemos tratado esos temas en profundidad en nuestro blog.
58<BottomCard url={"https://thunderbit.com/"} title={"Prueba Thunderbit para web scraping con IA"} />
59## Preguntas frecuentes
60### ¿Cuánto cuesta usar Gemini para web scraping?
61La 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.
62### ¿Puede Gemini extraer sitios que requieren inicio de sesión?
63La 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.
64### ¿Es legal hacer web scraping con Gemini?
65La 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.
66### ¿Puedo usar Gemini para extraer sitios dinámicos con mucho JavaScript?
67Sí, 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.
68### ¿Qué diferencia hay entre usar Gemini para scraping y usar una herramienta dedicada como Thunderbit?
69Gemini 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](https://thunderbit.com/) 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.
70**Más información**
71- [Las mejores herramientas automatizadas de web scraping](https://thunderbit.com/blog/best-automated-web-scraping-tools)
72- [Cómo hacer web scraping con Python](https://thunderbit.com/blog/how-to-web-scrape-with-python)
73- [Obtener todas las páginas de un sitio usando IA](https://thunderbit.com/blog/get-all-website-pages-using-ai)
74- [Extraer datos de un sitio web a Excel](https://thunderbit.com/blog/scrape-data-from-website-into-excel)
75- [Las mejores herramientas de extracción de datos](https://thunderbit.com/blog/best-data-extraction-tools)