Cómo raspar sitios web utilizando fórmulas de Google Sheets (ejemplos)

Las Hojas de cálculo de Google tienen algunas funciones muy útiles que pueden hacer mucho trabajo pesado.

Como parte de mi trabajo en línea, a menudo necesito ir a algunos sitios web y extraer puntos de datos o secciones específicas de ellos.

Por ejemplo, a veces tengo que copiar y pegar una tabla de una página web en Google Sheets o recuperar el título del artículo o el nombre del producto de una página web en Google Sheets.

Como de todos modos paso mucho tiempo en Google Sheets, se me ocurrió averiguar si podía raspar los datos de las páginas web y extraerlos en las celdas de Google Sheets.

Después de unas horas de escanear contenidos en varios foros y en YouTube, pude crear un scrapper básico en Google Sheets (para mis necesidades).

En este artículo, quiero mostrarle cómo puede utilizar fórmulas sencillas de Google Sheets para raspar contenido de la web.

Tenga en cuenta que Google Sheets no es una herramienta de raspado. Así que, aunque podemos hacer un raspado básico de sitios web con ella, si necesita algo más robusto, le recomiendo que utilice mejores opciones como Python o herramientas de raspado dedicadas.

Antes de mostrarle algunos ejemplos de cómo raspar datos en Google Sheets, echemos primero un vistazo a algunas fórmulas que lo hacen posible

Fórmulas importantes de Google Sheets para el scrapping

A continuación, las fórmulas de desguace de la web que estaríamos cubriendo en este tutorial:

IMPORTAR fórmula XML

Con la fórmula IMPORTXML, puede obtener los datos de muchos tipos de datos estructurados como XML, HTML, CSVTSV y feeds RSSATOM XML.

No se preocupe si se siente un poco perdido aquí.

Tendrá una idea mucho mejor de cómo funciona esto cuando vayamos a algunos ejemplos y le muestre cómo utilizar IMPORTXML para desechar títulos de páginas web o secciones específicas como la fecha o el nombre del autor.

La fórmula de IMPORTXML tiene la siguiente sintaxis:

IMPORTXML(url, xpath_query)

donde:

  • 'url' es la URL de la página web de la que se quieren extraer los datos
  • 'xpath_query' es el identificador que indica a la fórmula qué debe raspar. Por ejemplo, si quiere raspar el título de un artículo, utilizará la consulta que indica a la fórmula qué parte del código de la página web se refiere al título.

Fórmula IMPORTHTML

Con IMPORTHTML, puede obtener una tabla o una lista de una página web.

En la mayoría de los casos, utilizo esto cuando hay una tabla en una página web que quiero recuperar. En caso de que haya varias tablas, se puede especificar qué tabla se debe raspar.

La fórmula IMPORTHTML tiene la siguiente sintaxis:

IMPORTHTML(url, query, index)

donde:

  • 'url' es la URL de la página web de la que se quieren raspar los datos
  • 'query'puede ser una "lista" o una "tabla", en función de lo que se quiera extraer
  • el índice es el número que indicará a Google Sheets qué tabla de la lista debe extraer

Fórmula IMPORTFEED

Mientras que IMPORTXML e IMPORTHTML están pensadas para ser utilizadas con URLs regulares, la función IMPROTFEED está específicamente diseñada para tratar con feeds RSS o Atom.

Un caso de uso de esta función podría ser cuando quiera obtener los 10 títulos de artículos más importantes utilizando el feed RSS de su blog o sitio web de noticias favorito.

La fórmula IMPORTANTE tiene la siguiente sintaxis:

IMPORTFEED(url, [query], [headers], [num_items])

  • url - es la URL del ATOM o del feed RSS del blogwebsite
  • [query] - se trata de un argumento opcional en el que se indica a la fórmula el punto de datos que se desea obtener (como el título de la entrada o la fecha de la misma). Si no se especifica nada, se obtendrá todo
  • [cabeceras] - es un argumento opcional que puede hacer TRUE si desea una fila adicional que muestre la cabecera
  • [num_items] - este es también un argumento opcional en el que puede especificar cuántos elementos desea obtener. Por ejemplo, si está recuperando las últimas publicaciones de un sitio web mediante el canal RSS, puede especificar aquí 5 y se mostrarán las cinco últimas publicaciones.

Ahora que hemos cubierto todas las fórmulas de Google Sheets que necesita conocer para raspar los sitios web, vamos a sumergirnos y echar un vistazo a algunos de los ejemplos de raspado web.

Raspado de tablas de sitios web en Google Sheets

Digamos que quiere raspar la tabla de Wikipedia sobre las películas más taquilleras de todos los tiempos.

>Aquí está la URL de la página que tiene esta tabla -https:/es.wikipedia.orgwikiLista_de_las_películas_más_recaudadas

A continuación se muestra la fórmula que permitiría obtener esta tabla en Google Sheets

=IMPORTHTML("https:/es.wikipedia.orgwikiLista_de_películas_más_graciosas", "tabla",1)

>La fórmula anterior va a la URL especificada y, a partir del código HTML de la página web, identifica la primera tabla y obtiene la tabla completa en Google Sheets.

Bastante impresionante, la verdad.

Tenga en cuenta que la hoja de Google devuelve una matriz de valores, y para que esta fórmula funcione necesita tener todo el rango de celdas libre y disponible para que la fórmula IMPORTHTML llene esa zona.

Si ya tiene algo en una de las celdas (una celda que de otro modo habría sido utilizada por el resultado de la fórmula ImportHTML) vería un error.

Ahora, esto es genial.

Pero qué pasa si no quiero la tabla completa.

¿Y si sólo quiero los nombres de las películas más taquilleras?

También puede hacerlo.

Como la fórmula devuelve una matriz de valores, puede utilizarla como entrada dentro de la función INDEX y obtener sólo la columna que necesite.

A continuación se muestra la fórmula que sólo le daría los nombres de las películas más taquilleras de la tabla.

=INDEX(IMPORTHTML("https:/es.wikipedia.orgwikiLista_de_las_películas_más_recaudadas", "tabla",1),,3)

>La fórmula INDEX anterior sólo recupera la tercera columna, que tiene los nombres de las películas.

De la misma manera que he utilizado la fórmula para desechar la tabla, también puede utilizarla para obtener una lista. Sólo tiene que cambiar el segundo argumento de "tabla" a "lista".

Nota: Esta fórmula se actualizará cuando vuelva a abrir el documento de Google Sheets más adelante. De esta manera, en caso de que haya algún cambio en la lista, se actualizaría automáticamente. Si sólo necesita la tabla y no quiere que se actualice, copie los datos y péguelos como valores.

Cómo desechar el título de un artículo

He aquí un artículo al azar que elegí de Forbes.

>Ahora quiero utilizar las fórmulas para raspar el titular de este artículo.

Esto podría ser útil cuando se tiene una lista de 50 o 100 URLs y se quiere obtener rápidamente los títulos.

He introducido esta URL en la celda A2 (aunque también puede utilizar la URL directamente en la fórmula, yo utilizaré en su lugar la referencia de la celda que tiene la URL).

Ahora, antes de utilizar la fórmula, necesito dos cosas para que funcione: la URL exacta (o la referencia de la celda que contiene la URL), y un identificador dentro del HTML de esa página que me diga que ese es el título.

Veamos cómo puede encontrar este identificador HTML.

Abra la página web y, cuando esté completamente cargada, pase el cursor por encima del título, haga clic con el botón derecho del ratón y luego haga clic en Inspeccionar.

>Esto abre la ventana de inspección de elementos y verá que se resalta el siguiente elemento HTML

<h1 speakable-headline font-base font-size "El aprendizaje automático de Google le hará más eficaz en 2020<h1

>A partir de esto, necesitamos un identificador que nos diga que es el título y ese identificador es>s-headline speakable-headline font-base font-size "

Ahora, podemos utilizar esto en nuestra fórmula y obtener el título de la URL.

A continuación se muestra la fórmula que raspará el título de la URL dada:

=IMPORTXML(A2,"/*[@class='fs-headline speakable-headline font-base font-size']")

>De la misma manera, si quiere obtener el nombre del autor de este artículo, puede utilizar los mismos pasos anteriores para encontrar el elemento HTML que es un identificador único para el nombre del autor y utilizar la fórmula siguiente:

=IMPORTXML(A2,"/*[@class='contrib-link--name remove-underline']")

>Nota: Me gustaría que esto fuera un proceso estandarizado en el que siempre se tuviera el mismo identificador de "título" o el mismo identificador de "nombre de autor" para todos los sitios web de Internet. Desgraciadamente, cada sitio web está hecho de forma diferente y, por tanto, la codificación HTML es distinta para todos ellos. Así que tiene que dedicar algo de tiempo a conseguir ese identificador y luego utilizarlo en su fórmula IMPORTXML. Esta es de nuevo una de las razones por las que digo que, aunque Google Sheets puede raspar un sitio web, no está pensado para ello.

Raspar los artículos recientes de un feed

Si tiene la URL del feed de un sitio web, también puede utilizar la fórmula IMPORTFEED para obtener todos los artículos publicados recientemente del feed.

Por ejemplo, a continuación se muestra un ejemplo del feed de Tech Crunch

https:/techcrunch.comfeed

Ahora puedo utilizar este feed para obtener los últimos artículos de TechCrunch.

A continuación se muestra la fórmula que obtendrá todos los datos del feed:

=IMPORTFEED("https:/techcrunch.comfeed",,TRUE)

>Como TechCrunch tiene los 20 mejores artículos en el feed, obtendrá información como el título del artículo, el autor, la URL, la fecha, el resumen, etc.

Si sólo quiere los títulos de los artículos recientes, puede utilizar la siguiente fórmula:

=IMPORTFEED("https:/techcrunch.comfeed", "items title",TRUE)

>y si quiere las URLs, puede utilizar la siguiente fórmula

=IMPORTFEED("https:/techcrunch.comfeed", "items url",TRUE)

>Puede utilizar esto para crear su propia lista de feeds de los principales sitios de blogs que desee seguir. Puede tener los feeds de estos sitios en columnas separadas y utilizar la fórmula para tener siempre una lista de los últimos artículos del sitio web.

Esta también puede ser una gran técnica para mantener un seguimiento de lo que publican sus competidores.

Raspando datos de Amazon

Ahora quiero mostrarle algo sorprendente.

Utilizando fórmulas de Google Sheets, puede raspar datos de Amazon como el título del producto, la calificación, el número total de reseñas, etc.

Aquí está la URL de un producto que voy a utilizar - https:/www.amazon.comMicrosoft-Ergonomic-Keyboard-Business-5KV-00001dpB00CYX26BC

>Es una URL de un teclado ergonómico.

Ahora vamos a ver las fórmulas que puede utilizar para raspar los datos de Amazon utilizando Google Sheets.

=IMPORTXML(A2,"/*[@id='productTitle']")

>Como el identificador utilizado en Amazon es 'productTitle', puede utilizar la URL de cualquier página de producto y esto raspará el título del producto.

A continuación se muestra la fórmula que le dará el precio del producto:

=IMPORTXML(A2,"/*[@id='precio_nuestro_precio']")

>Y la fórmula siguiente le dará el número de valoraciones de los clientes:

=INDEX(importXml(A2,"/*[@id='acrCustomerReviewLink']"),1,1)

>El concepto utilizado en estas fórmulas es el mismo que ya he tratado anteriormente.

Puede intentar obtener más datos de Amazon o de cualquier sitio web que desee. Dado que no hay una talla única que sirva para todos, es posible que tenga que hacer un poco de prueba y error antes de conseguir la fórmula que funcione.

Estas fórmulas funcionan en el momento de escribir este artículo. En el futuro, si Amazon cambia el diseño de sus páginas de productos, es posible que tenga que ajustar las fórmulas.

Limitaciones de Google Sheets como raspador

Como he mencionado anteriormente, Google Sheets no está construido para el raspado de sitios web. Claro que tiene algunas fórmulas impresionantes que puede utilizar para el raspado, pero hay un montón de limitaciones que debe conocer.

Por ejemplo, si está tratando de raspar un par de tablas o un par de elementos HTML, debería estar bien.

Pero si le pide a Google Sheets que realice el raspado de cientos de puntos de datos a la vez, es posible que tenga que esperar mucho tiempo (minutos o incluso horas) o, lo que es peor, que vea un mensaje de error porque Google Sheets no es capaz de realizar el raspado.

En mi experiencia, en cuanto intento raspar más de 50 puntos de datos de una sola vez, me encuentro con problemas. A veces, introduzco la fórmula y no ocurre nada, se muestra un espacio en blanco.

No estoy seguro de lo que ocurre exactamente en el backend, pero creo que hay un límite diario para estas fórmulas. Google Sheets le permite raspar 50 o 100 puntos de datos, pero una vez que supera ese límite, le impide hacerlo durante algún tiempo (tal vez unas horas o un día)

Así es como se puede utilizar Google Sheets como un raspador web básico y obtener los datos de los sitios web.

¡Espero que haya encontrado útil este tutorial!

Deja un comentario