Precios de Corabastos. Precios mayoristas, día a día.
Corabastos publica sus precios en un PDF cada día hábil. Este pipeline convierte cada boletín en filas de una base de datos de series de tiempo y en una tendencia que se puede leer. Corre un boletín de ejemplo aquí abajo.
Pruébalo: de un boletín a una tendencia de precios
Elige un producto y corre la actualización diaria.
Lo que hizo la plataforma
- cron7:00 en Bogotá, un día hábil: APScheduler arranca la actualización diaria; los fines de semana no hay boletín.
- pdfDescargó Boletin_diario_20260116.pdf de corabastos.com.co y verificó que de verdad sea un PDF.
- parsepdfplumber leyó las tablas, saltó los encabezados, convirtió PAPA PASTUSA a $1.760 en un número y normalizó la variación a Estable, Subio o Bajo.
- dbGuardado en precios, una hypertable de TimescaleDB por fecha: un precio por producto por día, y solo reescribe una fila si cambió un valor.
- dbBoletín marcado como procesado con el conteo de filas insertadas, actualizadas, sin cambios y omitidas.
- appStreamlit dibujó Papa pastusa con Plotly: actual, promedio, mínimo y máximo del periodo.
Toca una parte del pipeline
Los cables resaltados muestran con qué habla.
Recolectar
Transformar
Guardar y mostrar
Corre la actualización diaria a las 7:00, hora de Bogotá, de lunes a viernes.
Por qué: Corabastos publica hacia las 6 de la mañana y los fines de semana no hay boletín.
Arma la URL del boletín del día o lo busca en la página de precios, y guarda una copia local.
Por qué: Revisa el tipo de contenido o la cabecera del PDF, así que una página de error nunca llega al lector.
Lee cada tabla, salta los encabezados, limpia los precios y clasifica cada producto por palabras clave.
Por qué: Los precios vienen como $16.000 o $16,000, así que se normalizan antes de volverse números.
PostgreSQL 15 con una hypertable precios por fecha, más tablas de productos y boletines.
Por qué: Un índice único por producto y fecha deja un precio por producto por día, y una fila solo se reescribe si cambió un valor.
Explorar precios, análisis de tendencias con Plotly y una página de administración para importar, rellenar históricos y ver la cobertura.
Por qué: Los históricos pasan por el mismo pipeline que la actualización diaria.
Stack
- Pipeline
- Python 3.11
- requests
- BeautifulSoup
- pdfplumber
- pandas
- Datos
- PostgreSQL 15
- TimescaleDB
- SQLAlchemy
- App
- Streamlit
- Plotly
- APScheduler
- Operación
- Docker Compose
- Tipo
- Herramienta personal
- Fuente
- Boletines diarios en PDF de Corabastos
- Horario
- 7:00, de lunes a viernes
- Almacenamiento
- Hypertable de TimescaleDB
- Corre en
- Docker Compose, autoalojado