Ir al contenido
Jossua Servicios
Power Query

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.

Por Jossua5 de noviembre de 20265 min de lectura
Ventana de Power Query con una tabla de precios importada de una página web y la consulta Web.Contents lista para 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

  1. En Excel, ve a Datos → Obtener datos → De otras fuentes → Desde la web. En Power BI Desktop, usa Inicio → Obtener datos → Web.
  2. Pega la dirección completa. Si el sitio pide usuario y contraseña, elige la autenticación que corresponda.
  3. 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.
  4. 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:

  1. Promover encabezados: si la primera fila trae los nombres, usa Inicio → Usar la primera fila como encabezados.
  2. Quitar filas sobrantes: títulos, notas al pie o filas vacías que la página incluye dentro de la tabla.
  3. Cambiar tipos: precio y cantidad como número decimal, fecha como fecha y el resto como texto.
  4. 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,50 o 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.

JossuaConsultor en Business Intelligence y Analítica de Datos. Manta, Ecuador.

Sigue con Power Query

Otros artículos del mismo tema.