4.5 · Automatización y web scraping

Nivel 4 · Especializaciones (Web, Data, IA, Automatización)

4.5Automatización y web scraping

Objetivo: Automatizar una tarea repetitiva y raspar con cortesía una página (requests, BeautifulSoup, pausas) — para ganar horas cada semana sin que os bloqueen ni infringir las reglas.
Tiempo estimado: 14 min · lectura autónoma · Si solo tienes 5 min: lee «Lo esencial en 30s» + el esquema.

Lo esencial en 30 segundos

  • ROI primero : tarea de 30 min/semana + script de 2 h = rentabilizado en un mes ; pathlib, openpyxl/pandas, logging como caja de herramientas.
  • Dúo estático : requests.get recupera (timeout, user-agent), BeautifulSoup analiza (select) ; Selenium pilota un navegador para JavaScript.
  • Reflejo de Nabil : robots.txt + CGU ANTES de la primera petición, pausas entre peticiones, API oficial preferida al scraping.

Mini-caso hilado — Nabil automatiza su vigilancia de precios

Cada lunes, Nabil, en Argel, recoge a mano precios públicos para su vigilancia competitiva : 30 minutos de copiar-pegar. Escribe un script cortés : lee el robots.txt y las CGU del sitio, espacía sus peticiones 2 segundos con un user-agent identificado, extrae los precios con BeautifulSoup y los guarda en CSV con logs. Cuando el sitio ofrece una API oficial, cambia a ella. Último hito del hilo : el analista que ganó sus lunes — limpiamente.

Último caso del hilo 4.1-4.5 — Nabil cierra sus especializaciones.

1. Automatizar lo rentable

Automatizamos lo repetitivo : archivos, hojas de cálculo (openpyxl/pandas), informes, correos — con pathlib para las rutas. La regla : calcular el ROI antes de programar (30 min/semana contra 2 h de desarrollo = rentable en un mes). Y lo fiabilizamos : logging para trazar, try específicos con alertas, pruebas sobre copias (nunca sobre los originales) y luego planificación (cron, Programador) para girar solo. Nabil prueba su renombrado sobre copias antes de tocar las carpetas reales.

2. Raspar con cortesía : requests, BeautifulSoup, Selenium

Para páginas estáticas : requests.get descarga (con timeout y User-Agent identificado), BeautifulSoup analiza el HTML (select(".prix")), guardamos en CSV. La cortesía : leer robots.txt, espaciar las peticiones (time.sleep), nunca saturar — si no, bloqueo. Para JavaScript y el desplazamiento infinito : Selenium pilota un navegador real, más pesado. Y la regla maestra : si existe una API oficial (o si login/CGU lo prohíben), la usamos — el scraping viene en último lugar, nunca contra las reglas.

Error frecuente de interpretación: « Si es accesible en mi navegador, tengo derecho a rasparlo en masa ». No. Accesible no significa autorizado : CGU, robots.txt, protecciones antiabuso y derechos sobre los datos (incluidos personales) enmarcan la recogida. Raspar rápido y fuerte un sitio que lo prohíbe expone al bloqueo — y al litigio. Cortés, espaciado, autorizado : o nos abstenemos.
El scraping cortés en 4 tiempos Autorización → recuperación → extracción → almacenamiento Autorización CGU +robots.txt, ¿API oficial?Recuperación requests +timeout + user-agentExtracción BeautifulSoupselect, espaciado (sleep)Almacenamiento CSV + logs,vigilado y planificado
Autorización → recuperación → extracción → almacenamiento
Versión en texto del esquema (SEO / lectores de pantalla / traducción): 1) Nabil verifica CGU y robots.txt, y prefiere la API oficial si existe. 2) requests recupera las páginas con timeout y user-agent identificado. 3) BeautifulSoup extrae los campos, peticiones espaciadas 2 segundos. 4) Los precios se guardan en CSV con logs y planificación. Lección : automatizar lo rentable, raspar lo permitido — con cortesía.

🔎 Ejemplo concreto — 🔎 Ejemplo concreto — La vigilancia de precios de Nabil

El scraper cortés de Nabil, con las API reales :

r = requests.get(url, timeout=10, headers={"User-Agent": "veille-perso"})
prix = BeautifulSoup(r.text, "html.parser").select_one(".prix").text
logging.info("%s : %s", url, prix)  # todo trazado
time.sleep(2)  # cortesía : espaciar las peticiones

Lectura : recuperar, analizar, trazar, esperar.

Lección : timeout + user-agent + pausa = scraper cortés.

Vocabulario de la sección

Automatización / ROI
Confiar las tareas repetitivas a un script (archivos, hojas de cálculo, informes) tras verificar que el tiempo ganado supera al tiempo de desarrollo.

Ejemplo sencillo: Nabil : 30 min/semana ahorrados por 2 h de desarrollo, rentable en un mes.

Lo que no es: automatizar una tarea hecha dos veces al año.

Reflejo: calcular el ROI antes de programar.

requests + BeautifulSoup
El dúo de páginas estáticas : requests descarga la página, BeautifulSoup analiza el HTML (select) para extraer los campos.

Ejemplo sencillo: Nabil extrae los precios públicos con select_one y los guarda en CSV.

Lo que no es: un navegador pilotado para una página estática simple.

Reflejo: timeout + user-agent + peticiones espaciadas, siempre.

Selenium
Pilotaje de un navegador real para páginas JavaScript (contenido cargado, desplazamiento infinito) — potente pero más pesado.

Ejemplo sencillo: Nabil recurre a él cuando los precios no están en el HTML inicial.

Lo que no es: saturar con requests un contenido generado en JS.

Reflejo: Selenium solo si lo estático no basta.

robots.txt / CGU
Las reglas de acceso de un sitio (archivo robots.txt, condiciones de uso) : lo que se puede recoger, a qué ritmo — para leer antes de la primera petición.

Ejemplo sencillo: Nabil lee ambas, espacía sus peticiones y cambia a la API oficial.

Lo que no es: raspar en masa un sitio que lo prohíbe.

Reflejo: autorizado + espaciado + trazado, o nos abstenemos.

En la práctica — En práctica — Automatizar y luego raspar con cortesía

  1. Elegid UNA tarea repetitiva, calculad su ROI (tiempo/semana contra tiempo de desarrollo) y automatizadla con pathlib/pandas.
  2. Añadid logging, try específicos con alertas, y probad sobre copias — nunca sobre los originales.
  3. Antes de todo scraping : leed CGU + robots.txt, buscad una API oficial y preved timeout, user-agent y pausas.
  4. Raspad (requests + BeautifulSoup), guardad en CSV, planificad (cron/Programador) y vigilad los logs.
Ganáis horas cada semana con scripts fiables y recogéis datos web con cortesía — sin bloqueos ni infracciones.

Guion listo para decir — justificar su recogida (30 s)

« Soy Nabil : CGU y robots.txt leídos antes de la primera petición, API oficial preferida, peticiones espaciadas con user-agent identificado, todo trazado en logs. Nuestros lunes están automatizados — y nuestra recogida es defendible. »

Para decir antes de toda puesta en producción de un scraper ; mostrad CGU + logs.

Modelo copiar-pegar — scraper cortés (código probado)

import csv
import logging
import time
import requests
from bs4 import BeautifulSoup

logging.basicConfig(level=logging.INFO)

URLS = ["https://example.com/page-1", "https://example.com/page-2"]
HEADERS = {"User-Agent": "veille-perso (contact : exemple@domaine.test)"}

# Previo : leer https://example.com/robots.txt + CGU,
# preferir la API oficial si existe.
with open("prix.csv", "w", newline="", encoding="utf-8") as f:
    out = csv.writer(f)
    out.writerow(["url", "prix"])
    for url in URLS:
        r = requests.get(url, timeout=10, headers=HEADERS)
        r.raise_for_status()
        prix = BeautifulSoup(r.text, "html.parser").select_one(".prix").text.strip()
        out.writerow([url, prix])
        logging.info("%s : %s", url, prix)
        time.sleep(2)  # cortesía : espaciar las peticiones

Tarea ofimática

Renombrado, informes, correos : pathlib + pandas + logging, probado sobre copias y luego planificado.

Vigilancia ocasional

Como Nabil : pocas páginas, espaciadas, trazadas — el script gira el lunes, nadie piensa en ello.

Página JavaScript

¿Contenido ausente del HTML? Selenium pilota un navegador — más pesado, para reservar a ese caso.

Recogida regular

API oficial en cuanto exista : estable, autorizada, más rápida que todo scraping.

Prudencia: Recoger compromete vuestra responsabilidad : respetad CGU y robots.txt (ritmo espaciado, parada si rechazo), no recojáis ni difundáis datos personales sin base legal, y en caso de duda haced validar por un jurista antes de toda puesta en producción. Contenido pedagógico, ejemplos con datos ficticios.

✓ Buenas prácticas

  • Calcular el ROI antes de automatizar.
  • Leer CGU + robots.txt antes de la primera petición.
  • Logs + pruebas sobre copias + peticiones espaciadas.

✗ Errores frecuentes

  • Raspar sin leer CGU ni robots.txt.
  • Saturar sin pausa (bloqueo asegurado).
  • Lanzar un script destructivo sin pruebas.

Puntos clave

  • AUTOMATIZAR lo repetitivo rentable : pathlib, openpyxl/pandas, smtplib — ROI calculado.
  • DÚO estático : REQUESTS (descarga) + BEAUTIFULSOUP (analiza HTML).
  • SELENIUM = navegador pilotado para el JS ; API OFICIAL preferida al scraping.
  • CORTESÍA : robots.txt, pausas, user-agent ; FIABILIDAD : logs, copias de prueba, planificación.

Reto 48h — aplica mañana

Automatizad 1 tarea repetitiva (ROI calculado, probada sobre copias) O raspad 2 páginas autorizadas (CGU leídas) con pausas + logs.

Lista de salida de la sección
  • Puedo citar ROI, requests, BeautifulSoup, Selenium.
  • Sé explicar CGU/robots.txt + pausas.
  • Tengo 1 script fiable o 1 recogida cortés funcionando.
Autoevaluación 1-5 : ¿está probado y trazado mi script?¿es autorizada y espaciada mi recogida?

Preguntas frecuentes

¿Es legal el web scraping?

Depende : CGU y robots.txt del sitio, derechos sobre los datos (incluidos personales), ritmo de recogida — todo enmarca lo permitido. Reglas de Nabil : leer CGU + robots.txt antes de la primera petición, espaciar las peticiones, preferir la API oficial, nunca recoger datos personales sin base legal y hacer validar por un jurista en caso de duda o uso profesional.

¿basta con requests o hace falta Selenium?

requests + BeautifulSoup bastan cuando los datos están en el HTML inicial (páginas estáticas) : rápido y ligero. Selenium se vuelve necesario cuando el contenido se genera en JavaScript (carga dinámica, desplazamiento infinito) : pilota un navegador real, más pesado y más lento. Empezamos en estático, pasamos al navegador solo si hace falta.

Comprueba tu comprensión

¿Qué dúo para raspar páginas estáticas?

Recursos adicionales (opcional, para ir más allá)

Examen del nivel 4Preguntas inéditas y más difíciles para validar tus conocimientos