Skip to content

ochoajuanm/promiedos-data-scraping

Repository files navigation

Promiedos

Promiedos Data Scraper

Python Shell Script Docker Alpine Linux Postgres Pandas Grafana

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.

Estructura del proyecto

.
├── 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

Instalación de dependencias

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

Uso

Al ejecutar el archivo main.py comienza el proceso ETL para concluir con el guardado de datos

python3 jobs/main.py

Deploy

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