Indice de contenidos
Recopilar datos de cualquier lugar con la función ImportXML de Google Sheet
Todos hemos necesitado en algún momento una hoja de cálculo, y cuando descubrimos lo importantes y útiles que son, no dudamos en seguir aprendiendo más.
Yo en particular me declaro un fanático de las hojas de cálculo, sobre todo si se trata de las hojas de cálculo de Google, ya que estas pueden ir recopilando información de forma muy dinámica, incluso cuando estamos dormidos.
Además de que nos permiten obtener cualquier tipo de información que queramos, desde precios de acciones, análisis del sitio web, hasta cualquier otro tipo de información que queramos, sin importar el lugar en el que estemos.
Incluso si lo que queremos es obtener datos de la web en general, con Google Sheets también es posible, es decir, copiar información de una tabla en un sitio web, copiar una lista de eventos o una cuadrícula de hechos o direcciones de correo electrónico que estén repartidas en una página web, entre otras acciones que nos llevarían una eternidad llevarlas a cabo.
Google Sheets nos permite importar datos desde cualquier tipo de página web utilizando una gran función que recibe el nombre de ImportXML, que es la función de la que te hablaré hoy, y ya verás que una vez que la domines no querrás dejar de trabajar con su ayuda, ya que los beneficios que obtendrás son realmente únicos y fascinantes.
¿Qué es ImportXML?
Como ya te he indicado, ImportXML es una de las funciones de las hojas de cálculo de Google y se puede usar para acceder a las listas y a las tablas que contienen las páginas.
Y para poder utilizarla de la forma correcta, es necesario conocer la estructura de la página que se quiera evaluar, y además, esa página tiene que tener muy bien formadas sus etiquetas de listas y sus tablas, ya que esto dependerá de cuál de estos dos elementos sea el que nos interesa, es decir, las tablas o las listas.
Además de que de acuerdo al propósito original con el que fue diseñado IMPORTXML, esta función se puede usar para coger contenido de archivos XML.
Esta idea nació, porque muchas páginas web cumplen con las reglas de XML, desde hace algún tiempo en Internet hay muchas publicaciones que sugieren su uso, para lograr obtener los datos de las páginas web.
Pero para poder utilizar esta función, se tiene que cumplir con una serie de requisitos, si no será imposible que funcione, porque no todos los sitios webs son compatibles.
¿Dónde se puede utilizar ImportXML?
Puedes utilizar ImportXML para conseguir información en cualquier campo XML, entre corchetes que este entre <tag> y </tag>. Es decir, que puedes obtener datos de cualquier sitio web o incluso de metadatos que sean generados por un sitio web. Con esta opción o función, podrás copiar y pegar la información para luego empezar a editar todo lo que necesites.
¿Cuáles son los conceptos básicos de XML y HTML?
Para poder trabajar y entender esta función de la forma correcta, es necesario que se controle y se conozca muy bien el código HTML o el marcado XML, que es el encargado de designar el conjunto de datos en una página web.
Y también, cualquier conjunto de <something> y </something>, además de los componentes básicos del código fuente de una página web, que indican que un cierto conjunto de datos dentro de ellos, por ejemplo, <algo>, </ algo>, algún texto en un <p> gráfico, que también puede contener <b> o quizás <a> e incluso un enlace seguido de </a> </b>.</p> </body> para cerrar todo fuera.
Con la función ImportXML de Google Sheets también es posible buscar un conjunto de datos XML específico para copiar los datos de él. Así que, si queremos obtener todos los enlaces de una página web, lo único que tenemos que decirle a la función ImportXML es que importe toda la información que esté dentro de las etiquetas <a> </a>.
Pero si lo que queremos es obtener todo el texto de una página web porque estamos realizando un trabajo más avanzado, tendremos que seleccionar todo lo que está dentro del <body> </body> o en su defecto todo lo que esté en cada instancia de <p> </ p> y después de realizar esta acción, tenemos que limpiar nuestros datos en etapas.
¿Cómo puedo extraer una lista de códigos postales y distritos de la ciudad?
Si pensabas que esto no era posible, déjame decirte que si que lo es. Ya puedes hacer coincidir tu lista de clientes por su código postal con una sala municipal de tu ciudad.
Actualmente estoy trabajando en este proyecto con mis páginas, pero no me ha sido muy sencillo, porque Canadá no suministra los datos de nuestros códigos postales. Sin embargo, he logrado seguir adelante gracias a que en Wikipedia existe una tabla de códigos postales con sus respectivos municipios y vecindarios. Pero si estás en un país en el que esta información es libre, será mucho más sencillo para ti hacerlo.
Pero si por ahora lo que te interesa es practicar, en las tablas de Wikipedia vas a encontrar una gran forma para practicar ImportXML. Vamos a ver un ejemplo sencillo, intentaremos coger todos los códigos postales.
Si abrimos la página en otra ventana del navegador, tenemos que ver lo que se muestra en la imagen anterior. Ahora vamos a echarle un vistazo a la fuente de la página. Y para ello vamos a seleccionar uno de los códigos postales, cuando ya esté seleccionado, hacemos clic derecho sobre él, se desplegará una serie de opciones y vamos a seleccionar la de “Inspeccionar”, con ella podremos abrir las herramientas del navegador y veremos el código fuente de la página.
Y según podemos observar, parece que cada uno de los códigos postales están dentro de una etiqueta. Por lo tanto, en nuestro caso nos vamos a enfocar en importar las etiquetas TD que tengan dentro de ellas la palabra “Edmonton“, que son las que nos interesan en este momento.
Después de esto, el siguiente paso es crear una nueva hoja de cálculo, en la que pegaremos todo el contenido de la etiqueta TD, incluso vamos a incluir el <span> y los enlaces. Y para tener claro qué es lo que queremos con cada una de ellas, vamos a utilizar la sintaxis XPath.
También es importante que sepas que ImportXML coge las URL y las etiquetas que se buscan como argumentos, así que lo más recomendable es que pongamos el siguiente algoritmo en las Hojas de cálculo de Google:
= importxml (“https://en.wikipedia.org/wiki/List_of_T_postal_codes_of_Canada”, “// td”)
De esta forma nos aseguramos que recogemos la información de los td dentro de esa url.
Al indicar este algoritmo, vas a ver el siguiente resultado:
Si vemos nuestra fuente de página, podemos ver cómo el código postal está en negrita, o <b> </b>, mientras que los nombres de las ciudades que se enlazan con artículos de Wikipedia están en <a> </a>.
Para el siguiente ejercicio lo que haremos será coger el primer enlace que está en cada una de las celdas, ya que es ahí donde está la ciudad principal, los demás son solo los vecindarios.
Cuando esta acción esté lista, vamos a modificar eso en dos comandos, que puedes encontrarlos en las columnas A y B: = importxml (“https://en.wikipedia.org/wiki/List_of_T_postal_codes_of_Canada”, “// td / span / a [1]”) = importxml (“https://en.wikipedia.org/wiki/List_of_T_postal_codes_of_Canada”, “// td / b [1]”), con esto lograremos filtrar un poco más nuestros resultados, y veremos lo siguiente:
Con estos ejemplos, tenemos que hacernos una idea de cómo funciona la sintaxis de la consulta XPath.
Además, es importante que tengas claro que una etiqueta con [1] significa: “solo dame la primera instancia de <tag> dentro de <etiqueta principal>”. Así que, si vemos, td / span / a [1] le da el primer enlace dentro del <span> dentro de cada <td>.
igualmente, td / b [1] es el que proporciona el primer texto en negrita dentro de cada <td>, en nuestro caso nos proporciona el código postal.
Y si queremos hacer dos consultas con una sola función, también es posible combinar las solicitudes solo con utilizar el símbolo “|” en el medio, por ejemplo:
= importxml (“https://en.wikipedia.org/wiki/List_of_T_postal_codes_of_Canada”, “// td / span / a [1] | // td / b [1]”)
Y aunque esta es una función muy útil, no vamos a obtener los resultados de la misma forma, ya que se interfilarán todas las solicitudes que sean coincidentes en una lista larga, y no en dos columnas como estamos acostumbrados:
Incluso, en el ejemplo que te he dado, no queremos todas estas filas; ya que lo que nos interesa son los resultados que coincidan con “Edmonton” en ese campo td / span / a [1].
Porque nuestra intención es devolver el código postal, y por esto mismo, solo nos interesa el b [1] de cada <td> que tenga “Edmonton” en span / a [1]. Y para poder seleccionar los códigos postales en los cuadros en los que los primeros enlaces son “Edmonton”, tendremos que utilizar el siguiente código:
= importxml (“https://en.wikipedia.org/wiki/List_of_T_postal_codes_of_Canada”, “// td [span / a = ‘Edmonton’] / b [1]”)
Y si queremos la información mucho más específica, como por ejemplo obtener los nombres de los barrios, tendremos que incluir otra función de importXML, que nos llevará a la siguiente columna, seleccionando el texto que viene después de la palabra “Edmonton”.
Yo por lo general, lo que hago en este tipo de casos es coger el contenido de span [1] usando los paréntesis, al igual que la barra para dividir el contenido, con ello dividimos “Edmonton” que aparecerá en la primera columna, mientras que los barrios o vecindarios se pondrán en las siguientes columnas. Y también podemos unir los códigos postales con los nombres de los barrios. Para estos casos, vamos a utilizar el siguiente código:
= importxml (“https://en.wikipedia.org/wiki/List_of_T_postal_codes_of_Canada”, “// td [span / a = ‘Edmonton’] / span [1]”)
También están las columnas que utilizan las funciones de división y concatenación, estas son las que se encargan de separar y agrupar los datos con los que estamos trabajando:
= SPLIT (concatenar (B2: J2), “(/)”)
Al aplicar esta función, vamos a obtener nuestra tabla final y totalmente limpia, ya que solo tendremos el código postal, la ciudad y toda la información que necesitamos del vecindario.
¿Ves qué fácil es?, no es tan difícil como creías en un principio. Con el tiempo todo será mucho más sencillo e iras mejorando este método. Por ejemplo, podrás elegir solo el contenido de <span> después del [1], solo el texto dentro de paréntesis, e incluso solo el texto que incluye la cadena “Edmonton”, o todo lo que esté después del salto de línea <br>. Además de copias automáticamente direcciones de correo electrónico de un sitio web.
Y además de todo lo que te he mencionado antes, es importante que tengas claro que las Hojas de Cálculo de Google, también conocidas por sus siglas como “HCG”, tienen disponibles una gran variedad de funciones con las que nos permiten hacer muchas cosas. Estas funciones son conocidas como IMPORTalgo, y entre ellas tenemos la que hemos hablado en este post, que es Importxml y además:
Importdata
Importdata es una de las funciones IMPORT, que se creó con la finalidad de que nos permita acceder a los archivos CSV o TSV, sin embargo, con el pasar del tiempo y a través de su uso, se descubrió que es posible utilizarla para tomar los datos de cualquier archivo que contenga un texto considerando, además esta distribuirá automáticamente todo el contenido en columnas y en renglones, con la ayuda de comas o tabuladores.
Importfeed
Esta es la función IMPORT, que nos permite acceder a todas las fuentes de contenido en las que no sea posible suscribirnos, bien sea en formato ATOM o RSS. Formatos que por lo general se utilizan en los blogs.
Importhtml
Esta es la función IMPORT que nos permite acceder a las listas y tablas de páginas web que son estáticas. Pero para poder utilizarla tenemos que conocer la estructura de la página, además de que es necesario que la página tenga muy bien formadas las etiquetas de listas o tablas, que nos interesen.
Importrange
Importrange se caracteriza por ser un caso particular entre todas las funciones IMPORT de las hojas de cálculo de Google. Esta función se utiliza para poder obtener datos de otras hojas de cálculo (HCG).
Por eso, podrás notar que en lugar de poner la URL solo tendrás que indicar el key o id de la hoja de cálculo que te interesa. Sin embargo, para poder usar esta función, es importante que el usuario nos de su autorización para acceder a los datos de la HCG externa, por lo tanto, el usuario podrá tener acceso a la hoja de cálculo de origen.
Estas son funciones que tienen una característica en común y que no es otra que con cualquiera de ellas, a través de una dirección de Internet, que se conoce como “URL”, que a su vez son las siglas en inglés de Universal Resource Locator, es posible acceder a datos.
Cada una de ellas impone sus propias excepciones, sin embargo, una de las más específicas es Importrange, ya que uno de sus requisitos es que los datos sean accesibles de forma pública. Esto quiere decir que para tener acceso a los datos no es necesario el inicio de sesión y que tampoco te limiten en ningún caso el acceso a los servidores de Google.
Plantilla de ejemplo extraer datos de páginas web
Aquí te dejo una plantilla para que veas como se hace, en este ejemplo muestro como extraigo datos de moz:
Recuerda que esto tiene muchas posibilidades como por ejemplo scrapear contenido en otros idiomas para traducir directamente con la API de Deepl o Google directamente en Google Sheets.
Buenísima herramienta!
Muchas gracias!
Gracias Ana, te dejo aquí una plantilla de ejemplo que no estaba antes: https://docs.google.com/spreadsheets/d/1I6S5Yurqc13gi6DiQe_hk2MoR6PD8EOkzgBNFbIQs3M/copy
Es muy útil esta función de Google Sheets, pero falla un poco la explicación.
En primer lugar hay un error en varias partes del texto: pone “funciones IMPOR” y en todo caso sería “funciones IMPORT”. También creo que la explicación de Xpath es insuficiente. Para extraer la ruta Xpath de un elemento concreto, puedes hacer clic derecho sobre la web, seleccionas “Inspeccionar” y en la ventana que se muestra con el código, seleccionas el elemento HTML que quieres extraer y haces clic derecho “Copiar > Copy Xpath”.
Por otra parte, para extraer datos de listas y tablas es mucho mejor la función importHTML. De hecho diría que casi exclusivamente funciona con tablas y listas, ya que importa directamente el contenido en ese formato.
La función importXML sirve para extraer el contenido y/o los atributos de cualquier página web. Yo lo uso para monitorizar backlinks de clientes (estado de la URL, texto del enlace, rel, etc…). Eso sí, esta función falla a veces con algunas etiquetas, como “” que no las reconoce completamente.
Un saludo.
Gracias por el aviso Aidatün, no siempre funciona el Copy Xpath, a veces no funciona bien. He dejado una plantilla donde se puede ver fácil unos ejemplos.
Buen aporte!
totalmente deacuerdo no siempre funciona el copiar pegar Xpath
Hola,
Grandisimo post explicando todo de una manera muy sencilla.
A mi me pasa que de vez en cuando todos los IMPORTXML que tengo en las Google Sheets dejan de funcionar.
Me da un error que dice que no puede encontrar la URL… he googleado y buscado por todos lados y no consigo entender-saber porque me pasa eso ciclicamente.
¿Sabeis porque es?
Seria interesante teniendo una columna con las palabras clave, otra con las las urls sacar si estan presentes y cuantas veces cada palabra en cada url