Obtener datos de una página web con Power Query: guía práctica
Aprende a importar tablas de una página web con Power Query, usar Web.Contents con parámetros y evitar errores al actualizar.

Cada semana, alguien de Ferretería Andrade entra a la página de un proveedor, busca la lista de precios, copia la tabla y la pega en un Excel. El proceso funciona hasta que el proveedor cambia el diseño, la tabla queda con columnas distintas o alguien pega los datos en la hoja equivocada. Ahí empieza el retrabajo: revisar filas, borrar encabezados repetidos y volver a dar formato.
Power Query puede hacer esa importación por ti. Con Obtener datos → Desde web lees una tabla publicada en una página, y con Web.Contents controlas la dirección, los parámetros y los encabezados de la petición. La tabla se actualiza con un clic. Eso sí: una página web no es una base de datos y cambia cuando menos lo esperas.
Qué puede leer Power Query de una página web
Power Query descarga el contenido de la página y busca tablas HTML. No ejecuta JavaScript ni espera a que la página termine de dibujarse en el navegador. Por eso, si la tabla aparece solo después de un inicio de sesión o de un script, es posible que el conector no la vea. En esos casos conviene buscar una fuente más estable: un archivo CSV, un JSON o una API del proveedor.
Hay tres caminos habituales según lo que devuelva la dirección:
- Web.Page: interpreta una página HTML y extrae sus tablas.
- Json.Document: lee la respuesta de una API que entrega JSON.
- Csv.Document: procesa un archivo de texto separado por comas o punto y coma.
Paso 1: conectar desde la interfaz
- En Excel, ve a Datos → Obtener datos → De otras fuentes → Desde la web. En Power BI Desktop, usa Inicio → Obtener datos → Web.
- Pega la dirección completa. Si el sitio pide usuario y contraseña, elige la autenticación que corresponda.
- En la ventana del Navegador, revisa la vista previa. A la izquierda aparecen las tablas detectadas, a menudo con nombres como Tabla 0 o Tabla 1.
- Selecciona la tabla correcta y pulsa Transformar datos, no Cargar. Así revisas la estructura antes de que llegue al informe.
Paso 2: revisar la tabla en el editor
La consulta ya tiene un paso Origen y otro con el nombre de la tabla. Antes de cargar, deja los datos presentables:
- Promover encabezados: si la primera fila trae los nombres, usa Inicio → Usar la primera fila como encabezados.
- Quitar filas sobrantes: títulos, notas al pie o filas vacías que la página incluye dentro de la tabla.
- Cambiar tipos: precio y cantidad como número decimal, fecha como fecha y el resto como texto.
- Renombrar los pasos con nombres claros, como Encabezados promovidos o Tipos cambiados.
No confíes en la posición de la tabla. El índice {0} toma la primera tabla de la página. Si el proveedor agrega un aviso o mueve el contenido, puede apuntar a otra cosa. Revisa la consulta cuando cambie el sitio y prefiere una dirección que devuelva los datos directamente.
Paso 3: entender Web.Contents
La consulta que genera la interfaz suele verse así:
let
Origen = Web.Contents("https://ejemplo.com/lista-de-precios"),
Pagina = Web.Page(Origen),
Tabla = Pagina{0}[Data]
in
Tabla
Web.Contents descarga la dirección y devuelve un valor binario: no entiende HTML. Web.Page interpreta la respuesta y arma una tabla con las tablas encontradas. La columna Data guarda cada una y el índice elige la que necesitas.
Si la dirección devuelve JSON, el patrón cambia:
let
Origen = Web.Contents("https://api.ejemplo.com/ventas"),
Datos = Json.Document(Origen)
in
Datos
Paso 4: pasar parámetros sin armar la URL a mano
Cuando la dirección lleva ciudad o año, no conviene pegar el texto completo. Web.Contents acepta un registro con la ruta relativa, los parámetros y los encabezados:
let
Base = "https://api.ejemplo.com",
Respuesta = Web.Contents(
Base,
[
RelativePath = "ventas/2026",
Query = [ciudad = "Manta", formato = "json"],
Headers = [Accept = "application/json"]
]
),
Datos = Json.Document(Respuesta)
in
Datos
RelativePath se une a la dirección base sin duplicar la barra. Query arma los parámetros y los codifica por ti. Headers envía la información que el servidor espera, como el tipo de contenido. Si el año y la ciudad salen de un parámetro de Power Query, cambias el valor una vez y todas las consultas se actualizan, como se explica en parámetros en Power Query.
Paso 5: buenas prácticas
- Prefiere datos a pantallas. Un CSV o un JSON oficial es más estable que una tabla HTML que cambia de diseño.
- Una consulta, una responsabilidad. Separa la conexión de la limpieza y crea una consulta de referencia, sin duplicar la descarga.
- Usa parámetros para la dirección, el año o la ciudad. Evita repetir la URL en varias consultas.
- Cuida el servidor. No actualices decenas de veces al día. Si la fuente es ajena, revisa sus condiciones de uso.
- No extraigas datos personales de páginas que no te pertenecen. Importar no reemplaza el permiso.
- Documenta la fuente. Anota de dónde salen los datos y cada cuánto cambian.
- Valida después de actualizar. Una página puede devolver una tabla vacía sin dar error; compara el conteo de filas con el periodo anterior.
Si la limpieza posterior se vuelve larga, aplica el mismo orden que en limpiar datos con Power Query: encabezados, tipos, filas vacías y duplicados antes de cargar al modelo.
Errores frecuentes
- DataSource.Error o 404: la dirección cambió, le falta una parte o el sitio bloquea la petición. Abre la URL en el navegador y compárala con la de la consulta.
- No aparece ninguna tabla: el contenido se genera con JavaScript, está dentro de un PDF o requiere iniciar sesión. Busca un CSV o una API, o revisa la página con las herramientas del navegador.
- La consulta traía datos y ahora trae otra cosa: el índice de la tabla apunta a un elemento distinto. Vuelve al Navegador y selecciona de nuevo la tabla correcta.
- Expression.Error al cambiar el tipo: la página usa formatos como
1.250,50o incluye símbolos de moneda. Limpia el texto antes de convertir o revisa la configuración regional. - Formula.Firewall: estás combinando la web con un archivo local y los niveles de privacidad no coinciden. Revisa Opciones de consulta → Privacidad o separa las consultas.
- La actualización pide credenciales cada vez: el sitio exige autenticación y la consulta no la conserva. Configura el origen con el método correcto y evita escribir claves dentro del código.
Importar datos de la web ahorra la copia semanal, pero exige mirar la fuente con desconfianza: una tabla HTML es una promesa frágil. Con una dirección estable, tipos correctos y parámetros, el reporte se actualiza solo y nadie pierde la mañana en tareas repetitivas.


