Historia de Web Scraping: Espías en MediaMarkt

¡Que hay tecnotrolls! ¿Os molan las películas de espionaje? 🧐 ¿De agentes secretos infiltrados? Muchas de esas películas están ambientadas en la guerra fría, en la que se intentaban robar avances tecnológicos. Aunque acabó hace tiempo, el espionaje sigue siendo una realidad hoy día. Parte de ese espionaje ha trascendido a la red pero sigue habiendo espías alejados de un ratón y un teclado.

Voy a contarte una historia de espionaje marketero, esta vez alejado de la red. No está dirigida por Spielberg. No detienen a nadie ni se desestabiliza ningún gobierno, pero me parece interesante y la he vivido en persona.

Mediamarkt por BlackFriday

En noviembre de 2017 estaba en el MediaMarkt de San Sebastian de los Reyes. Recuerdo la fecha porque fué en el Blackfriday y fui a comprar un móvil que llevaba tiempo echando un ojo, el Samsung Galaxy S7 que aún conservo.

Si habéis estado en un centro comercial como este en el Blackfriday os podéis imaginar el ambiente. Turbas de consumidores enfurecidos (entre los que me encontraba) por conseguir un chollo épico.

Cuando fui al stand de móviles no quedaba stock a la vista del que estaba buscando en color negro. Al preguntar a un empleado me dijo que sí quedaban, que ahora traerían unos cuantos más. Llamó a un compañero y se quedó esperando conmigo a la reposición del stock.

Digitalización de los precios del MediaMarkt

Mientras esperábamos tuve con el empleado algo más que la típica conversación de ascensor. Era un chaval joven, veintipocos años. Le pregunté por la digitalización del marcado de precios de sus productos. Os pongo la imagen, sacada por mi en esa misma tienda, por si no sabéis a qué me refiero:

precio digital mediamarkt
Precio digital del MediaMarkt

Es un simple display plastiquero que muestra los precios de una manera dinámica. Pueden cambiar en cualquier momento al estar conectados a un servidor que ejecuta un algortimo que compara los precios de la competencia. Esto no me lo dijo él, ya lo sabía yo.

El chico cogió cierta confianza conmigo. Entre el compadreo patrio que nos caracteriza me comentó que varias veces a la semana aparecían empleados de Worten con libretas para apuntar los precios a los que estaban los productos del MediaMarkt 😐

espías en Mediamarkt
Espías del Worten en MediaMarkt

No tengo nada a favor de ninguno de los dos comercios, pero estarás de acuerdo conmigo en que esto es algo cutre nivel DIOS. Lo pensé cuando me compuse de mi pokerface.😶

La única justificación que le encuentro es que, en ocasiones, los precios de la web y de la tienda no coinciden y quieran competir directamente al encontrarse ambos comercios en la misma calle. Esta diferencia de precios entre tienda-web tampoco es muy habitual, así que desconozco si es la verdadera razón.

Vaya, vaya… ha llegado Lorey Money pero no la transformación digital al Worten (ba dum, tsss….)

Web scraping entre comercios electrónicos

MediaMarkt debe tener varios referentes y competidores, entre ellos el gigante Amazon. Seguramente ya te has dado cuenta porque estas comparaciones, subidas y bajadas de precios entre ellos suceden a diario.

MediaMarkt rebajó en el dia sin IVA del 2019 el patinete eléctrico de xiaomi mijia a 304€. Minutos más tarde Amazon igualaba el precio. Y no, no estaba Jeff Bezos con una libreta en ningún MediaMarkt. Fué seguramente el resultado de un script el que alertó a la compañía americana de que debían rebajarlo para seguir siendo competitivos.

Esta técnica se denomina Web Scraping. Es muy utilizada entre SEOS y administradores de ecommerces para saber cuando tu competencia realiza algún cambio en el contenido de su web. En este caso, el cambio de precio de un producto.

Existen muchas herramientas y lenguajes para realizar Web Scraping, también llamado Web data extraction. Depende de tus conocimientos en programación o tu presupuesto puedes encontrar múltiples opciones.

Como introducción al Web Scraping y solución a este «problemilla» de la franquicia de Worten en el centro comercial plaza Norte les propongo Python y las librerías BeautifulSoup + Requests.

Este script .py se puede almacenar en un servidor y planificar su ejecución para lanzarlo cada día, cada 6 horas, cada hora …según te interese.

Si no disponen de un servidor ni quieren dejar un pc encendido 24/7 también pueden programar el script en la herramienta Google Colab y lanzarlo desde ahí. No podrán programar el cron que lo ejecute periódicamente, pero siempre será más cómodo que mandar a dos esbirros con antifaces y libretas al MediaMarkt 🤭

Escrapeando a MediaMarkt

Google Colab es un entorno gratuito para desarrolladores de Inteligencia Artificial en la nube. Al soportar python puedes darle muchas otras utilidades que nada tienen que ver con la IA. Los ficheros son llamados «cuadernos» y sus funciones van más allá del propio lenguaje python, como la creación de formularios en el propio código.

Por si alguien en Worten u otro que les haga la competencia quiere el script aquí dejo el cuaderno. Lo he hecho para la sección de móviles, para cualquier otra sección el código sería muy similar.

El scraper puedes ejecutarlo tú mismo aquí y ahora. Para ejecutarlo y empezar a ver resultados por pantalla es tan sencillo como entrar al cuaderno y pulsar CTRL+F9. Puedes hacer una versión cuya salida exportes a un excel desde el mismo código y almacenarlo en tu cuenta de Google Drive. Las posibilidades que nos ofrece son infinitas.

Aquí dejo el código también 👇. Ten en cuenta de que funciona en el momento de escribir este post (Febrero 2019). Si los desarrolladores de la web realizan cambios en el código es probable que no funcione o que haya que realizar algún ajuste. Intentaré mantenerlo actualizado.

import urllib
import requests
from bs4 import BeautifulSoup
from time 
import sys

headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36'}

url = "https://www.mediamarkt.es/es/category/_smartphones-701189.html"
req = requests.get(url,headers=headers)
soup = BeautifulSoup(req.text, 'html.parser')
paginador = soup.find("ul",{"class":"pagination"})
paginador = int(paginador.findChildren("li")[4].text)

#La variable vueltalp marca el número de página en el que estamos extrayendo los datos 
#La variable paginador marca el número de peticiones que vamos a lanzar y hemos extraido de la propia pagina
vueltalp = 1 

while vueltalp < paginador:
  
  print(vueltalp)
  time.sleep(0.5) #Esperar medio segundo entre petición y petición
  url = "https://www.mediamarkt.es/es/category/_smartphones-701189.html?page="+str(vueltalp)
  req = requests.get(url,headers=headers)
  soup = BeautifulSoup(req.text, 'html.parser')
  
  
  for elemento in soup.findAll("script"):
    
    if str(elemento).startswith('<script>var product'):
      
      product = str(elemento).split('":"')[1]
      precio = str(elemento).split('":"')[3].replace('brand','').replace(',','').replace('""','')+'EU'
      marca = str(elemento).split('":"')[4].replace('ean','').replace(',','').replace('""','')
      nombre = product.split(',')[0].replace("Móvil -",'')
      modelo = product.replace(product.split(',')[0],'').replace('id','').replace(',','').replace('""','')
      idproduct = str(elemento).split('":"')[2].replace('price','').replace(',','').replace('""','')    
      #Las funciones replace se emplean para limpiar los campos
      
      print('--------------------')
      print('Nombre:'+nombre)
      print('Modelo:'+modelo)
      print('Id: '+idproduct)
      print('Precio:'+precio)
      print('Marca:'+marca)
      
  vueltalp += 1
else:
    print ('-> Fuera del bucle')

 

Si crees que el código es susceptible de mejora escríbeme con la propuesta y lo cambiaré encantado.

El WebScraping tiene muchas consideraciones y hay que ser cautos cuando lo realizamos si no queremos ser un mono con ballesta 🙈. Aplicándolo a pequeñas webs puede que su servidor no esté preparado para responder a todas las peticiones que hagas y acabes provocando un caída del servidor.

En este post solo quería contar la historia de amor entre estos dos comercios. Otro día hablaré más extendidamente acerca de esta técnica, la programación de scrapers y bots que emulan la navegación de un humano.

¿Conoces más ejemplos de utilización del Web Scraping entre e-commerce?

 

1 Comment

  1. Como idea puedo aportar que en todos los e-commerce que indiquen y actualicen los valores de su stock, están infirmando el volumen de ventas.

    Durante un año he recogido estos datos de algunos productos que me interesan (unos 2 millones de registros) y es una información que da mucho juego.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *