Tony Wang9 min de lecturaExtraer datos de un sitio web a Excel — 3 formas que funcionan
Tres formas de llevar datos web a Excel o Sheets: Power Query e IMPORTXML, scrapers sin código y un script de Python + API programable.
Hay tres formas reales de extraer datos de un sitio web a Excel: las herramientas integradas que ya tienes (Power Query de Excel y las fórmulas de importación de Google Sheets), un scraper sin código como Octoparse o Browse AI, y un pequeño script de Python que llama a una API y escribe el libro de trabajo por ti. Cada una funciona, para un tipo de sitio y un tipo de usuario específicos. Esta guía repasa las tres con honestidad, con ejemplos que puedes copiar y pegar, y termina con una tabla comparativa para que decidas en treinta segundos.
Método 1: las herramientas integradas — Power Query de Excel y fórmulas de Google Sheets
Si la página que quieres es una tabla HTML sencilla —una lista de Wikipedia, una tabla de posiciones de una liga, una tabla de estadísticas gubernamentales—, empieza por aquí. Toma dos minutos y no cuesta nada.
Excel: Power Query "Desde web"
Excel 2016 y versiones posteriores incluyen Power Query, que puede extraer tablas directamente desde una URL:
- Abre Excel y ve a la pestaña Datos.
- Haz clic en Desde web (dentro del grupo Obtener y transformar datos) y pega la URL de la página.
- En el Navegador, Excel muestra una vista previa de cada tabla que encontró en la página. Elige una.
- Haz clic en Transformar datos para limpiar columnas y tipos en el editor de Power Query, o en Cargar para insertarla directamente en la hoja.
El resultado es una consulta activa, no un pegado puntual: haz clic derecho sobre la tabla y elige Actualizar, o configura Datos → Consultas y conexiones → Propiedades → Actualizar cada N minutos para volver a extraer los datos con el libro abierto.
Google Sheets: IMPORTHTML e IMPORTXML
Google Sheets hace el mismo trabajo con dos fórmulas. IMPORTHTML toma la enésima tabla o lista de una página:
=IMPORTHTML("https://en.wikipedia.org/wiki/List_of_countries_by_population_(United_Nations)", "table", 1)
IMPORTXML es la herramienta de precisión: recibe una consulta XPath, así que puedes extraer un elemento específico en lugar de una tabla completa:
=IMPORTXML("https://example.com/product", "//h1")
=IMPORTXML("https://en.wikipedia.org/wiki/Moon_landing", "//a/@href")
La segunda fórmula extrae cada enlace (href) de la página. Sheets vuelve a evaluar estas importaciones periódicamente (aproximadamente cada hora), lo que te da una actualización automática básica y gratuita.
Dónde dejan de funcionar las herramientas integradas
Ambas herramientas comparten una limitación importante: leen el HTML sin procesar que envía el servidor en la primera carga. Si el sitio completa sus datos con JavaScript después —lo cual describe a Amazon, los resultados de Google, la mayoría del comercio electrónico, la mayoría de los paneles y casi cualquier aplicación web moderna—, Power Query ve una página vacía e IMPORTXML devuelve #N/A o nada. No hay un paso de renderizado en navegador, ni manejo de inicio de sesión, ni evasión anti-bot: los sitios que limitan la tasa de peticiones o bloquean solicitudes automatizadas también bloquearán estas, y muchos sitios bloquean por defecto las IP compartidas que usa Google para las importaciones de Sheets.
Las herramientas integradas también son frágiles de una manera más silenciosa: la fórmula apunta a una posición dentro del marcado de la página, así que un rediseño la rompe sin avisar. Es un problema general del análisis de HTML —la página es un blanco móvil—, pero con las fórmulas no hay ningún manejo de errores, solo un #N/A en la celda A1 el lunes por la mañana.
Veredicto: perfecto para tablas estáticas que revisas de vez en cuando. La herramienta equivocada para sitios dinámicos, sitios protegidos o cualquier cosa que necesites de forma fiable y programada.
Método 2: herramientas de scraping sin código (Octoparse, Browse AI y similares)
El siguiente escalón es un scraper visual. Octoparse ofrece un constructor de flujos de trabajo de apuntar y hacer clic con detección automática de campos de datos, plantillas preestablecidas para sitios populares, programación en la nube y exportación directa a Excel, CSV o Google Sheets. Browse AI entrena un "robot" observando cómo haces clic en los campos que quieres, y luego lo vuelve a ejecutar según una programación (cada hora, cada día) y puede sincronizar los resultados con Google Sheets o Airtable, además de monitorear cambios. Ambas herramientas manejan páginas renderizadas con JavaScript, paginación y —en los planes de pago— rotación de proxies.
Es una opción genuinamente buena para un usuario no técnico que necesita monitorear uno o dos sitios: sin código, un editor visual y una exportación funcionando en menos de una hora.
Las contrapartidas honestas:
- Configuración por sitio. Cada sitio web es su propio robot o tarea. Diez sitios significan diez configuraciones que construir y mantener.
- Fragilidad ante los rediseños. El robot hace clic en selectores que memorizó. Cuando el sitio lanza un rediseño, el robot devuelve datos incorrectos o vacíos hasta que lo vuelves a entrenar, y muchas veces te enteras por la hoja de cálculo rota.
- Costo de suscripción. Los planes gratuitos son limitados; los volúmenes útiles, la programación en la nube y los proxies están en los planes de pago, que suelen empezar por el precio de un asiento SaaS de gama media y suben con el volumen de páginas.
- Difícil de versionar e integrar. El scraper vive en la interfaz del proveedor, no en tu repositorio, así que no encaja con la revisión de código, la integración continua ni los pipelines posteriores de la misma forma que lo haría un script.
Veredicto: la decisión correcta para alguien sin conocimientos de programación que vigila un puñado de páginas dinámicas. Menos indicado cuando necesitas muchas fuentes, transformaciones personalizadas o algo que tu equipo pueda mantener en git.
Método 3: Python — llamada a la API, pandas y to_excel()
Si puedes ejecutar un script de Python —o tienes a alguien cerca que pueda hacerlo—, esta es la opción más sólida, y es más corta de lo que la gente espera. El patrón: llamar a un endpoint que devuelve JSON limpio, aplanarlo con pandas y escribir el libro de trabajo con to_excel(). No hay selectores que mantener, porque una API de scraping se encarga del renderizado, los proxies y los reintentos por su cuenta, y devuelve los mismos campos normalizados incluso cuando cambia el marcado del sitio. (Para la comparación completa entre extraer páginas por tu cuenta y llamar a una API, consulta web scraping vs API; para la ruta desde cero, nuestro pilar de web scraping con Python y el tutorial de BeautifulSoup cubren cómo analizar el HTML sin procesar tú mismo.)
Aquí está la versión de extremo a extremo, usando el endpoint de búsqueda de Amazon de Crawlora. Instala primero las tres librerías:
pip install requests pandas openpyxl
Luego, el script completo:
import requests
import pandas as pd
API_KEY = "YOUR_API_KEY" # free tier: 2,000 credits/month, no card
resp = requests.get(
"https://api.crawlora.net/api/v1/amazon/search",
params={"k": "mechanical keyboard"},
headers={"x-api-key": API_KEY},
timeout=60,
)
resp.raise_for_status()
rows = resp.json()["data"] # list of normalized result cards
df = pd.DataFrame(rows)[
["asin", "title", "price", "list_price", "rating", "review_count", "link"]
]
df.to_excel("amazon-keyboards.xlsx", index=False, sheet_name="results")
print(f"Wrote {len(df)} rows to amazon-keyboards.xlsx")
Ejecútalo y tendrás un .xlsx real en el disco: columnas con tipo definido, sin copiar y pegar, sin selectores. Cambia la palabra clave en el parámetro k, o cambia el endpoint por cualquiera de las otras plataformas soportadas; los documentos listan los campos de cada endpoint, y el playground te permite probar una solicitud en el navegador antes de escribir código. Como la API cobra solo por éxito —se te cobra únicamente por las respuestas 2xx exitosas—, una solicitud fallida te cuesta un reintento, no créditos.
La variante de Google Sheets (gspread)
¿Prefieres que los datos lleguen a una hoja de Google compartida en lugar de a un archivo? El mismo script, con un último paso distinto, usando la librería gspread con una cuenta de servicio de Google:
- En Google Cloud Console, crea un proyecto y habilita la Google Sheets API y la Google Drive API.
- Crea una cuenta de servicio y descarga su archivo de clave JSON.
- Comparte tu hoja de cálculo de destino con el correo de la cuenta de servicio (termina en
iam.gserviceaccount.com), igual que la compartirías con un colega.
import gspread
gc = gspread.service_account(filename="service-account.json")
ws = gc.open("Keyboard price tracker").sheet1
ws.clear()
ws.update([df.columns.tolist()] + df.fillna("").values.tolist())
Todos los que tengan la hoja abierta verán los nuevos datos en el siguiente refresco, sin enviar archivos por correo.
Veredicto: unos quince minutos de configuración y luego la opción más duradera de esta página: maneja sitios con mucho JS y protegidos gracias a la API, sobrevive a los rediseños, vive en control de versiones y escala de una palabra clave a mil con un bucle.
Mantenlo actualizado: cómo programar la actualización
Una hoja de cálculo que era precisa el mes pasado es la forma en que se toman malas decisiones. Los tres métodos pueden actualizarse, pero solo el script se actualiza sin que nadie lo supervise:
- cron (macOS/Linux):
0 6 * * * /usr/bin/python3 /home/you/refresh.pyvuelve a ejecutar el script cada mañana a las 06:00. - Programador de tareas (Windows): crea una tarea básica, con desencadenador diario y la acción Iniciar un programa apuntando a
python.exe, con la ruta de tu script como argumento. - GitHub Actions —la opción más elegante, porque no necesita ninguna máquina encendida:
name: refresh-sheet
on:
schedule:
- cron: "0 6 * * *" # daily at 06:00 UTC
jobs:
refresh:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install requests pandas openpyxl gspread
- run: python refresh.py
env:
CRAWLORA_API_KEY: ${{ secrets.CRAWLORA_API_KEY }}
Guarda la clave de la API en los secretos de Actions del repositorio, nunca en el script. Si publicas el .xlsx actualizado como artefacto de compilación o escribes en Google Sheets mediante gspread, la hoja de cálculo se actualiza sola cada día, esté o no abierta tu laptop. Una nota de cortesía para cualquier scraping programado: mantén una cadencia razonable; una extracción diaria es algo muy distinto a golpear un endpoint cada minuto, y los límites de tasa también existen en las APIs.
(Power Query puede actualizarse automáticamente mientras el libro está abierto, y las fórmulas de importación de Sheets se recalculan solas aproximadamente cada hora, lo cual está bien para un uso casual, pero ninguna de las dos funciona con el archivo cerrado, ni reintenta ante un fallo.)
¿Qué método deberías usar?
| Power Query de Excel | Sheets IMPORTXML/IMPORTHTML | Herramientas sin código (Octoparse, Browse AI) | Python + API de scraping | |
|---|---|---|---|---|
| Tiempo de configuración | Minutos | Minutos | 30–60 min por sitio | ~15 min una vez, cualquier endpoint después |
| Sitios con mucho JavaScript | No | No | Sí | Sí (la API renderiza) |
| Sitios anti-bot / bloqueados | No | No | Parcial (proxies de pago) | Sí (lo maneja la API) |
| Sobrevive a rediseños del sitio | No | No | No (hay que reentrenar el robot) | Sí (JSON normalizado) |
| Programación sin supervisión | Solo mientras el libro está abierto | Recálculo automático aproximado | Sí, en planes en la nube de pago | Sí — cron / Actions |
| Costo | Incluido con Excel | Gratis | Suscripción | Nivel gratuito de 2,000 créditos/mes; solo se cobra por éxito |
Guía de decisión, según quién eres:
- Analista con una tabla estática y una fecha límite: Power Query o
IMPORTHTML. Listo en cinco minutos; no le des más vueltas. - Persona de marketing u operaciones que vigila una o dos páginas dinámicas, sin nada de código: una herramienta sin código justifica su suscripción. Reserva tiempo para reentrenar los robots después de los rediseños.
- Cualquiera que necesite muchas fuentes, sitios protegidos o un pipeline programado que el equipo pueda mantener: el script de Python + API. Es la única opción de esta lista que es a la vez económica, duradera y automatizable de principio a fin.
- Desarrollador junior decidiendo si construir el scraper por su cuenta: lee primero web scraping con Python; hacerlo tú mismo es una gran habilidad, pero para hojas de cálculo en producción, la ruta de la API elimina el mantenimiento de proxies, renderizado y parsers que consume el tiempo.
- ¿Los datos están en el HTML inicial? Si es así, Power Query / IMPORTHTML es suficiente.
- ¿La página está renderizada con JavaScript o protegida contra bots? Necesitas una herramienta sin código o una API.
- ¿Necesita actualizarse sin supervisión? Un script + cron/Actions es el camino confiable.
- ¿Más de un par de sitios, o compañeros de equipo que deban mantenerlo? Prefiere el código sobre los robots con interfaz gráfica.
- Extrae solo datos públicos, mantén una cadencia razonable y revisa los términos del sitio.
Convierte cualquier sitio soportado en una hoja de cálculo
Una sola solicitud GET devuelve JSON normalizado: pandas y to_excel() hacen el resto. 2,000 créditos gratis al mes, sin tarjeta, y solo se cobra por éxito: se te cobra únicamente por las respuestas 2xx exitosas.
Lecturas relacionadas: el pilar de web scraping con Python para el conjunto completo de herramientas DIY, el tutorial de BeautifulSoup si quieres analizar el HTML tú mismo, y web scraping vs API para saber cuándo gana cada enfoque.
Preguntas frecuentes
Can Excel scrape data from a website?
Yes. Excel 2016+ includes Power Query: Data tab, From Web, paste the URL, and Excel imports any HTML table it finds on the page as a refreshable query. It only reads the initial server HTML, so it works for static tables but returns nothing on JavaScript-rendered or bot-protected sites.
How do I scrape a website into Google Sheets?
For static pages, use the built-in formulas: IMPORTHTML pulls the Nth table or list on a page, and IMPORTXML pulls specific elements via an XPath query. For JavaScript-heavy or protected sites, run a short Python script that calls a scraping API and writes rows into the sheet with the gspread library and a Google service account.
Why does Excel Power Query show no tables or an empty page?
Power Query reads the raw HTML the server sends on first load. If the site fills in its content with JavaScript afterward — as Amazon, Google, and most modern web apps do — that initial HTML contains no data, so Power Query finds nothing. You need a tool that renders the page: a no-code scraper or a scraping API.
What is the best way to get data from JavaScript-heavy sites into Excel?
Either a no-code scraper (Octoparse, Browse AI) that renders pages in the cloud, or a Python script that calls a scraping API returning normalized JSON and writes it with pandas to_excel(). The script route survives site redesigns and schedules cleanly with cron or GitHub Actions.
How do I refresh scraped data in Excel automatically?
Power Query can refresh on a timer, but only while the workbook is open. For unattended refreshes, run a script on a schedule: cron on macOS/Linux, Task Scheduler on Windows, or a GitHub Actions workflow with a cron trigger that re-fetches the data and rewrites the .xlsx or Google Sheet daily.
Is it legal to scrape a website into a spreadsheet?
Scraping publicly visible data is generally permissible in many jurisdictions, but it depends on the data, the site's terms, and what you do with it. Stick to public data, keep request rates polite, avoid personal data, and check the source's terms — and treat this as background, not legal advice.
How much does scraping a website to Excel cost?
Excel Power Query and Google Sheets formulas are free with the tools you already have. No-code scrapers run on subscriptions once you need volume, scheduling, or proxies. Crawlora's API has a free tier of 2,000 credits/month with no card, and pricing is pay-on-success — you are charged only for successful 2xx responses.