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
defsave_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 CSVwithopen(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_15out_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á.