← Blog

Redescubriendo la automatización con Python

Python / Automatización

En soporte IT llevaba años usando Python para tareas sueltas: un script para renombrar archivos, otro para revisar un log. Mientras hacía el Máster en Data Science lo miré con otros ojos. Las mismas herramientas que me ahorraban clics en sistemas servían para recoger y preparar datos, que es justo la parte del análisis que más tiempo se come.

Este post recoge dos ejemplos que probé y una lista de ideas que tenía pendientes.

Cómo decido qué automatizar

Antes de escribir código me hago tres preguntas:

  1. ¿Lo hago más de una vez a la semana? Si es algo de una vez al año, no compensa.
  2. ¿Los pasos son siempre los mismos? Si cada vez hay que decidir algo distinto, el script se complica mucho.
  3. ¿Qué pasa si falla? No es lo mismo un script que lee datos que uno que borra archivos o envía correos.

Si las respuestas son «sí, sí y no pasa nada grave», lo automatizo. Después lo pruebo con datos de mentira, lo ejecuto a mano un par de veces y solo entonces lo programo para que se lance solo.

Ejemplo 1: sacar los titulares de un periódico

Quería practicar la recogida de datos de la web, así que empecé por lo más sencillo: descargar la portada de El Mundo y quedarme con los titulares.

import requests
from bs4 import BeautifulSoup

respuesta = requests.get('https://www.elmundo.es', timeout=10)
respuesta.raise_for_status()
sopa = BeautifulSoup(respuesta.content, 'html.parser')

for titular in sopa.find_all('h2'):
    print(titular.get_text(strip=True))

requests descarga la página (el timeout evita que se quede colgado y raise_for_status() avisa si la web devuelve un error) y BeautifulSoup permite buscar dentro del HTML. Aquí busco las etiquetas <h2>, que es donde suelen ir los titulares.

La primera lección llegó al ejecutarlo: no todos los <h2> son titulares. Entre las noticias aparecen textos de pasatiempos y de bloques publicitarios. Para quedarme solo con las noticias tendría que afinar el selector, mirando qué clase CSS usa la web en sus titulares. Y ahí está la pega del scraping: si el periódico cambia su diseño, el script deja de funcionar. Cuando una web ofrece una API o un feed RSS, es mejor usar eso. Y conviene revisar siempre sus condiciones de uso antes de descargar nada.

Ejemplo 2: leer un CSV sin copiar y pegar

En sistemas trabajo mucho con exportaciones de Excel y de otras herramientas en CSV: inventarios, listados de usuarios, compras. Python trae de serie el módulo csv para leerlos.

import csv

with open('datos.csv', newline='', encoding='utf-8') as archivo:
    lector = csv.reader(archivo)
    for fila in lector:
        print(', '.join(fila))

Este script:

  1. Abre datos.csv indicando la codificación, para que las tildes y las eñes salgan bien.
  2. Crea un lector que separa cada línea por las comas.
  3. Recorre el archivo fila a fila y la imprime.

Imprimir es solo el primer paso. A partir de aquí cada fila se puede filtrar, sumar, pasar a una base de datos o convertir en un informe. Cuando el análisis se complica, lo siguiente es pasar a pandas, como hice en el script de compras del departamento.

Diez automatizaciones que tenía en la lista

Estas son las ideas que me apunté, con lo que haría cada una en mi día a día:

  1. Web scraping: recoger datos de webs que no tienen API, como el ejemplo de los titulares.
  2. Consumir APIs: pedir datos a un servicio (el tiempo, un ERP, una herramienta de tickets) en vez de exportarlos a mano.
  3. Convertir PDF a audio: leer en voz alta un documento largo mientras hago otra cosa.
  4. Descargar imágenes en bloque: bajar todas las imágenes de una lista de URLs con un solo comando.
  5. Leer CSV: el segundo ejemplo de este post.
  6. Copiar archivos: mover o duplicar carpetas según reglas (por fecha, por extensión) sin hacerlo a mano.
  7. Enviar correos: mandar un informe periódico a la misma lista de personas.
  8. Limpiar el sistema: borrar temporales o logs antiguos de forma programada (con cuidado: aquí la tercera pregunta importa mucho).
  9. Validar JSON: comprobar que un archivo de configuración está bien formado antes de usarlo.
  10. Gestionar repositorios de GitHub: crear repositorios o revisar su estado desde un script.

Conclusión

Python no me descubrió nada nuevo como herramienta, pero sí como puente: lo que ya usaba para sistemas me sirvió para empezar a trabajar con datos. Lo más útil no fue ningún script concreto, sino la costumbre de preguntarme si una tarea repetida merece unas líneas de código.

Las ideas de la lista salen en parte de la guía de automatización con Python de Analytics Vidhya.