fbpx

Seguido pasa que tenemos una página abierta y la pestaña anclada todo el tiempo al navegador, porque tiene información cambiante que estamos revisando constantemente. Puede ser el precio de un artículo de una tienda en línea, o el precio de compra o venta del dólar americano publicado por un banco específico. ¿Y si pudiéramos traer esa información concreta a una hoja de cálculo de Google? ¡Sí que podemos!

En posts anteriores vimos cómo obtener el precio del dólar en tiempo real con la función =GOOGLEFINANCE(), y como referencia general está bien, pero pongamos el ejemplo de requerir el precio del dólar específicamente del banco HSBC o Citibanamex para usarlo en algún cálculo. Hay páginas que los publican todos juntos, por ejemplo esta:

https://www.eldolar.info/es-MX-x-noacento/mexico/dia/hoy

Para lograr esto usaremos una técnica que se llama scraping, que en español se traduce a algo así como rascar. Lo que haremos es usar una técnica muy sencilla de  scraping (lo que nos permite Google Sheets con dos fórmulas que veremos a continuación) para rascar solo los datos que queremos de esa página y nada más esos datos. Ten en cuenta que dependemos al 100% de cómo esté publicada esa página, nosotros nos tenemos que adaptar al código que ya exista.

Web scraping con IMPORTXML en Google Sheets

Vamos a utilizar primero la fórmula =IMPORTXML(), la cual importa y procesa datos estructurados en XML, CSV o HTML. Necesitamos dos cosas:

  1. La URL (ya la tenemos)
  2. La ruta XPath. Esta se refiere a la ruta del elemento que queremos. Si vemos el código fuente de la página, no nos sirve todo, porque solo queremos el precio.

Vamos a probar obteniendo la ruta XPath del precio de venta del dólar. En la página damos click derecho sobre el precio y damos click en la opción de Inspeccionar.

Esto nos debe abrir la consola de desarrollo de Google Chrome, con el elemento que elegimos seleccionado. Una vez ahí, damos click derecho sobre ese elemento/nodo de HTML y elegimos la opción del menú Copiar – Copiar XPath:

Nos devolverá algo así:

//*[@id="dllsTable"]/tbody/tr[1]/td[5]

Ahora probémoslo en nuestra fórmula de =IMPORTXML(). Antes de pegarlo así como está, fíjate que seas congruente con las comillas y las dobles comillas, yo tuve que cambiar las dobles comillas a comillas simples en id='dllsTable' para que no diera error la fórmula:

=IMPORTXML(A1, "//*[@id='dllsTable']/tbody/tr[1]/td[5]")

NOTA: Si el contenido de la página es dinámico, es decir, se genera después de cargada la página con JavaScript, este método no funcionará. Esto me pasó con las páginas de Banamex y de Bancomer.

Web scraping con IMPORTHTML en Google Sheets

Existe otra función alternativa, que aunque es más limitada por ser más específica, también nos puede ayudar, se llama =IMPORTHTML(). Podemos usarla para obtener la tabla completa si así lo deseamos. Para esta función necesitamos

  1. La URL que ya tenemos
  2. Especificar si queremos un elemento de listtable. (Está limitada a estos dos elementos de HTML nada más, <ul><table>.)
  3. El número de tabla o lista que queramos, en orden. Ej. 1 es la primera que aparezca siempre.

Entonces, con esta fórmula y la misma URL, podemos tener la tabla completa de divisas de todos los bancos:

=IMPORTHTML(A2,"table",1)

Un ejemplo más

Vamos a probar con un artículo de una página de e-commerce, por ejemplo una pantalla en Best Buy:

  1. La URL: https://www.bestbuy.com.mx/p/samsung-pantalla-de-43-tv-4k-ultra-hd-smart-hdr-plana-negro/1000214731
  2. XPath: "//*[@id='widget-667a5176-6029-414e-8c0c-b8f6f87c0f07']/div/div/div[3]"

Este es el resultado:

Ejemplo en vivo

Para descargar un ejemplo en vivo de esta guía, solamente debes seguirnos en Twitter y dar click en el botón de "Ir al demo"

Elige tu red:

Powered by Followall

¡Espero que te haya sido útil esta guía! No olvides seguirnos en Twitter y Facebook para más tips, trucos y guías de productividad.

Si tienes dudas, deja un comentario y con gusto te ayudaremos a resolverlas.

¿Quieres tener las herramientas de oficina de Google (G Suite) en tu empresa? ¡Contáctanos!