Descripción del proyecto

En este proyecto desarrollé un script en Python usando la librería Selenium para hacer web scraping de los productos de la página web de Tottus.com. El script procesa y genera una lista de productos a partir de un parámetro de búsqueda definido por el usuario, por ejemplo "refrigeradora", y extrae la información de cada producto de esa categoría como el nombre, la marca y las modalidades de precios ofertados (precio CMR, precio en línea y precio en tienda), todo desde la web de Tottus.com.

Asimismo, permite destacar los productos que tienen un precio límite definido también por el usuario, por ejemplo, resaltar aquellos productos con un precio menor o igual a S/ 1,800.00. Finalmente, la data extraída se formatea en un DataFrame de Pandas (otra librería de Python) y a partir de allí es posible exportar la información a un archivo CSV para su posterior análisis o incluso si fuera necesario, a una base de datos o un datalake en la nube.

Sobre el entorno

El script se ejecuta en la nube en un notebook de Deepnote, que permite trabajar con Python y Jupyter Notebooks en la nube. Considerar que fue necesario instalar previamente la librería Selenium y el driver geckodriver (Firefox) para Selenium en el entorno de Deepnote ya que no están instalados por default, tal como sucede en Google Colab si se quisiera ejecutar el script en ese entorno. Otro detalle ¿Por qué usé geckodriver? Simplemente porque es el driver que mejor me ha funcionado en mi experiencia personal, pero se puede implementar con ChromeDriver o Edge WebDriver sin mayor problema.

Ver demo en vivo

Para ver el script en acción, puedes hacer clic en el botón. Se abrirá una nueva pestaña con la app del proyecto en Deepnote donde podrás colocar los parámetros a tu gusto, ejecutar el script y ver los resultados en tiempo real. No es necesario crearte una cuenta. Luego puedes volver aquí para seguir leyendo el post.

Explicación del código

1. Importación de librerías.

2. Función que captura los precios.

Un poco de contexto. La web Tottus.com tiene tres tipos de precios para cada producto: precio "CMR", precio "internet" y precio "normal", y aún así no todos los productos tienen los tres valores, algunos tienen dos, otros solo uno. Cada uno de estos valores de precios se encuentran en un atributo específico según se aprecia en la estructura HTML de la web y el objetivo es capturar el contenido de esos atributos, si existen, y de no ser así asignar un valor cero, conservando de esa manera la uniformidad de las longitudes de las listas extraídas. Esta función realiza todo ese proceso.

3. Configuraciones previas del driver y parámetros de búsqueda.

4. Bloque principal.

Algunas anotaciones. Se ha incluído código para manejar excepciones, de darse el caso. Además, se han agregado notas para el usuario final conforme se va ejecutando el script.

Tabla de resultados

La data extraída se almacena en un DataFrame de Pandas llamado tabla_resultado.

Tener en cuenta que el script tiene solo fines demostrativos por lo que extrae datos solo de la primera ventana de resultados. En un caso real, se debería implementar un mecanismo de paginación para recorrer todas las páginas de resultados y extraer la información de todos los productos. Algo que se puede hacer fácilmente con Selenium.

Algunos gráficos

Una característica que me agrada de los notebooks de Deepnote es que se pueden crear gráficos interactivos básicos de inmediato con unos clics sin tener que escribir código con librerías como Matplotlib. Esos gráficos permiten una vista inicial rápida: seleccionas el dataframe, eliges el tipo de gráfico, seleccionas los campos, y listo. A continuación, se muestran dos gráficos interactivos generados por Deepnote a partir de la data extraída.