El IMPORTXML de Google Sheets es una función que te permite importar datos de tipos de datos estructurados como HTML y XML. También admite la importación de datos de feeds CSV, TSV, RSS y ATOM XML. Por eso es una herramienta excelente para importar datos de sitios web y hacer web scraping o minería de datos.
IMPORTXML lee una página publicada en la web a través de su URL. No sirve para cargar un archivo .xml guardado en tu ordenador.
Sintaxis
=IMPORTXML(url, xpath_query, locale)
- url – la dirección de la página web estructurada de la que quieres importar datos. Hay dos formas de incluirla:
- Como una ubicación completa en forma de texto entre comillas (por ejemplo, "https://en.wikipedia.org/wiki/Tiger_Woods")
- Como referencia a una celda que contiene la url.
- xpath_query – this is the XPath query to run on the structured data. Simply put, this specifies the information we are trying to fetch. For instance, using “//h1/@id” gives all the id attributes within the anchor <h1> tags on the page. Consulta las pautas de sintaxis de XPath para ver instrucciones detalladas.
Si esto es nuevo para ti, puede que te confunda un poco el parámetro xpath_query . Pero es tan potente como confuso, así que te animamos a investigarlo.
Ejemplo de IMPORTXML
=IMPORTXML(url, "all the hyperlink titles in the page")
En el siguiente ejemplo, importo los datos en la celda B3, así que es ahí donde escribo la fórmula.
La fórmula que he usado incluye la url entre comillas, como mencioné antes. Usa la consulta XPath "//a/@title" para obtener todos los títulos de los hipervínculos del artículo.
¡Prueba la fórmula! Verás un aviso de que la hoja de cálculo intenta enviar y recibir datos; solo tienes que permitirlo para obtener toda la información.
=IMPORTXML(“https://en.wikipedia.org/wiki/Tiger_Woods“, "//a/@title")
A continuación verás lo que aparece mientras Google Sheets intenta obtener los datos. Cuantos más nodos tenga el archivo de datos estructurados, más tardará la importación.
Mientras se importan los datos, parece que la celda en la que has escrito la fórmula ha generado un error.
Sin embargo, no es un error, sino un estado temporal que indica que los datos se están cargando. Pasa el ratón por encima de la celda para ver la siguiente descripción.
En cuanto Google Sheets carga los datos, el error desaparece. Verás que los datos se extienden desde la celda de la fórmula (B3) hacia la derecha y hacia abajo.
Es una función de expansión automática, lo que significa que todos los valores obtenidos se incluirán en las celdas de debajo.
Es importante que mantengas el área prevista del resultado libre de cualquier valor. De lo contrario, la fórmula IMPORTXML dará un error #REF!.
Por ejemplo, la siguiente imagen muestra lo que ocurre si hay algún valor en ese rango.
En este ejemplo, he guardado en la celda B1 la url de la página de la que intento importar la información de los encabezados.
Usaré esa celda como referencia en la fórmula IMPORTXML:
=IMPORTXML(B1,"//h2")
Como ves, los datos que se obtienen aquí son distintos de los del ejemplo anterior, aunque la URL es la misma.
Esta vez tengo una lista de los encabezados del artículo, algo que puede ser útil por muchas razones. Si quieres importar otra información de la URL, te animo a leer más sobre las consultas XPath.
Más ejemplos de XPath para IMPORTXML
El xpath_query decide qué extrae IMPORTXML de la página. Estas consultas cubren las tareas más habituales. Sustituye la URL por la página que quieres leer, o apunta a una celda que la contenga.
Extraer todos los enlaces de una página
=IMPORTXML("https://en.wikipedia.org/wiki/Tiger_Woods", "//a/@href")
Devuelve la dirección de cada enlace de la página, uno por fila. Los enlaces a otras páginas del mismo sitio suelen aparecer como rutas relativas, como /wiki/PGA_Tour. Si usas "//@href" en su lugar, también obtienes el href de otras etiquetas, como hojas de estilo e iconos.
Extraer solo los enlaces externos
=IMPORTXML("https://www.example.com/", "//a[starts-with(@href, 'http') and not(contains(@href, 'example.com'))]/@href")
La consulta conserva los enlaces que empiezan por http, lo que deja fuera las rutas relativas, y luego elimina cualquier enlace que apunte al mismo dominio. Sustituye example.com por el dominio de la página que estás leyendo.
Obtener la URL canónica de una página
=IMPORTXML("https://www.example.com/page/", "//link[@rel='canonical']/@href")
El enlace canónico es la versión de una página que su propietario marca como la preferida, para evitar contenido duplicado. Esta consulta devuelve esa única URL.
Otras consultas útiles
//titledevuelve el título de la página.//meta[@name='description']/@contentdevuelve la metadescripción.//*[@id='main']devuelve el elemento cuyo id es main.//div[contains(@class, 'price')]devuelve todos los div que tienen price entre sus clases.
Para los datos que están en una tabla o una lista, la fórmula IMPORTHTML suele ser más sencilla.
Importxml no ha podido obtener la url
Como es lógico, este mensaje de error de Google Sheets suele indicar que hubo un problema al obtener los datos.
Este error puede deberse a varios motivos, como:
- URL no válida: comprueba que la URL indicada en la función IMPORTXML es correcta, incluido http o https. También es posible que la página se haya trasladado a otra dirección.
- Problemas de red: a veces, este error se debe a problemas de red temporales. Espera un poco y vuelve a intentarlo.
- Restricciones de acceso: es posible que el sitio web al que intentas acceder tenga restricciones. Si es así, no hay mucho que hacer, salvo solicitar acceso.
- Cambios en la estructura de la página: si la función funcionaba antes pero la estructura de la página ha cambiado, es posible que la consulta XPath ya no funcione bien. Actualiza la consulta XPath para que coincida con la nueva estructura de la página web.
- El contenido importado está vacío: la fórmula llegó a la página, pero no encontró nada que coincida con la consulta. Revisa la consulta XPath y, después, abre el código fuente de la página en tu navegador para confirmar que los datos están en el HTML. Las páginas que cargan su contenido con JavaScript lo muestran en el navegador, pero IMPORTXML solo ve el HTML que envía el servidor.
- El sitio bloquea Google Sheets: algunos sitios, entre ellos varios de datos financieros, rechazan las solicitudes del sistema de obtención de Google. La página se abre en tu navegador, pero la fórmula sigue sin poder obtenerla. Ningún cambio en la fórmula lo soluciona, así que usa otra fuente o la API del propio sitio.
- Demasiadas fórmulas: cada fórmula IMPORTXML envía su propia solicitud, y Google Sheets las actualiza aproximadamente cada hora. Un archivo con cientos de ellas carga despacio y puede alcanzar los límites de un sitio. Funcionan mejor unas pocas fórmulas que devuelvan cada una una lista completa.
Resumen sobre IMPORTXML
También puedes consultar la siguiente entrada del blog para aprender a importar datos a Google Sheets desde una tabla o una lista de una página HTML con la función IMPORTHTML de Google Sheets o Cómo usar la fórmula IMPORTFEED. Para importar un archivo CSV o TSV desde una URL, usa la fórmula IMPORTDATA, y para traer datos de otra hoja de cálculo, usa IMPORTRANGE.
Nota del editor: Esta es una versión revisada de un post anterior que se ha actualizado para mayor precisión y exhaustividad.




