Este proyecto se encarga de realizar scraping con la librería bs4
(Beautiful Soup) de Python, leyendo HTML mediante RegEx; transformar los datos con pandas
y guardar los resultados de los partidos del día anterior de la página PROMIEDOS en una base de datos PostgreSQL en la nube, con el fin de que persistan los registros de los partidos de futbol diarios ya que estos se borran de la web luego de pasados dos días del partido.
.
├── app
│ ├── __init__.py
│ └── src
│ ├── db_connectors.py
│ ├── etl.py
│ ├── exceptions.py
│ ├── __init__.py
│ ├── logger.py
│ ├── models.py
│ ├── parsers.py
│ └── scrapers.py
├── crontab.Development
├── data_output_example.html
├── docker-compose-postgres.yaml
├── Dockerfile
├── __init__.py
├── jobs
│ ├── main.py # Script a ejecutar
│ └── migrations.py
├── logging.conf
├── logs
│ └── app.log
├── poetry.lock
├── pyproject.toml
├── README.md
├── requirements.txt
├── sql
│ ├── create_database.sql # Crear la base de datos en caso de no existir
│ ├── create_tables.sql # Crear la tabla en caso de no existir
├── start.sh # Definimos entrypoint para desplegar la aplicación
└── template.env
Se debe usar el gestor de dependencias pip:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Luego para configurar un ambiente persional se deben reemplazar los datos propios en el archivo template.env
y renombrarlo como .env
. Gracias a la librería decouple
se leerán las variables de entorno
Al ejecutar el archivo main.py comienza el proceso ETL para concluir con el guardado de datos
python3 jobs/main.py
El Dockerfile
nos sirve para desplegar nuestra aplicación, está configurado de tal forma de partir de una imagen de Alpine personalizada (ya que la imagen original de Alpine presenta conflictos con pandas
), y usando el archivo start.sh
creará el schedule solicitado en crontab.Development
para que se ejecute automáticamente todos los días. Para realizar deploy de esta forma:
docker build -t scheduler .
docker run -it scheduler /bin/bash
source start.sh