Persistiendo la información "scrapeada"

Clase 20 de 38Curso de Ingeniería de Datos con Python

Contenido del curso

Web scraping

Pandas

Resumen

Conecta tu trabajo de scraping con análisis real: aprende a guardar artículos en CSV con Python usando una función clara, nombres de archivo con fecha y escritura robusta. Este flujo elimina prints de debug y apuesta por un output reproducible y fácil de manipular.

¿Cómo guardar artículos en CSV con Python?

Para cerrar el ciclo, se crea una función auxiliar llamada save_articles que recibe dos parámetros: news site UID y articles. Se eliminan los prints usados para debuggear y se pasa a persistir resultados con el módulo csv.

¿Qué hace la función save_articles?

  • Recibe el identificador del sitio y la lista de artículos.
  • Calcula la fecha actual con datetime.now.
  • Construye el nombre de archivo con el UID, la fecha y la palabra articles.
  • Genera los csv headers de forma programática.
  • Escribe encabezados y filas con csv.writer.
import datetime import csv def save_articles(news_site_uid, articles): # fecha actual y formateo AAAA_MM_DD now = datetime.datetime.now() now = now.strftime('%Y_%m_%d') # nombre de salida: uid_fecha_articles.csv out_file_name = f'{news_site_uid}_{now}_articles.csv' # headers dinámicos a partir del primer artículo csv_headers = list(filter(lambda prop: not prop.startswith('_'), dir(articles[0]))) # escritura del CSV with open(out_file_name, 'w+') as f: writer = csv.writer(f) writer.writerow(csv_headers) for article in articles: row = [getattr(article, prop) for prop in csv_headers] writer.writerow(row) break # prueba rápida del flujo

¿Cómo se construyen los csv headers con dir y lambda?

  • Se usa dir para listar atributos disponibles de un artículo.
  • Se aplica una función lambda para filtrar nombres que no inician con guion bajo.
  • Se convierte el iterador en lista con list para obtener los encabezados.

¿Cómo se escriben los rows con getattr?

  • Se recorre cada propiedad en csv headers.
  • Se obtiene el valor con getattr(article, prop).
  • Se construye un row dinámico que refleja cambios futuros en el objeto.

¿Cómo nombrar el archivo con datetime para trazabilidad?

El nombre del archivo debe dejar claro el origen y la fecha de extracción. Se sugiere incluir el news site UID, la fecha formateada y el sufijo articles.csv, separados por guion bajo.

¿Qué formato de fecha usar con String Format Time?

  • Se usa la función de formato de datetime llamada String Format Time para evitar minutos, segundos y milisegundos.
  • Formato recomendado: año, mes y día con guion bajo.
now = datetime.datetime.now() fecha = now.strftime('%Y_%m_%d') # ejemplo: 2024_03_15 out_file_name = f'{news_site_uid}_{fecha}_articles.csv'

¿Cómo probar rápido con break y ejecutar el script?

  • Añade break tras escribir el primer artículo válido para una verificación rápida.
  • Ejecuta: python main.py, selecciona el sitio (por ejemplo, “el universal”) y confirma que obtienes el primer artículo.
  • Revisa el archivo generado en tu sistema con: ls la.

¿Qué prácticas hacen el código robusto ante cambios?

Un enfoque robusto minimiza cambios cuando el objeto de artículo evoluciona. Se prioriza la obtención dinámica de propiedades y la escritura genérica.

¿Por qué este enfoque es resistente?

  • Encabezados dinámicos: el CSV se adapta si el objeto cambia.

  • Lectura programática: dir, lambda, list y getattr evitan dependencias rígidas.

  • Flujo probado: un break temporal acelera la validación inicial.

  • Elimina prints de debug para pasar a persistencia real.

  • Usa with open('w+') para crear el archivo si no existe.

  • Inicializa csv.writer y escribe primero los headers con writer.writerow.

  • Itera sobre articles y construye cada row con getattr.

  • Guarda el dataset y prepárate para: detectar datos faltantes y enriquecer la información.

¿Te surgieron dudas sobre el código o el flujo de guardado? Deja tu comentario y la comunidad te apoyará.