Este commit implementa la funcionalidad principal de extracción de datos desde la plataforma SGU de la ULSA, utilizando Selenium para automatizar el proceso. Los datos extraídos son almacenados en la base de datos PostgreSQL mediante psycopg2. También se integró un servicio web mediante Flask para exponer una API REST que facilita la extracción remota de los datos.
Proyecto: Extracción de Calificaciones ULSA
Descripción
Este proyecto tiene como objetivo automatizar la extracción de información de calificaciones de alumnos de la ULSA (Universidad La Salle). Utiliza Selenium para interactuar con la página de consulta de calificaciones y psycopg2 para almacenar los datos en una base de datos PostgreSQL. Además, el proyecto está desplegado como un servicio web utilizando Flask y Waitress, permitiendo realizar extracciones mediante peticiones HTTP.
Requisitos
Dependencias de Python
Las siguientes bibliotecas son necesarias para ejecutar el proyecto:
- psycopg2: Para la conexión y manejo de la base de datos PostgreSQL.
- selenium: Para interactuar con la página web y realizar la extracción automatizada de datos.
- requests: Para manejar posibles errores de conexión.
- flask: Para crear el servicio web.
- waitress: Servidor WSGI para producción.
- pandas: Para manejar los datos extraídos como DataFrame y convertirlos a formato JSON.
- urllib3 y http.client: Para manejar excepciones de conexiones HTTP.
Variables de Entorno
Asegúrate de configurar las siguientes variables de entorno en tu sistema para la conexión a la base de datos y los tiempos de espera de Selenium:
DBNAME: Nombre de la base de datos.DBUSER: Usuario de la base de datos.DBPASSWORD: Contraseña del usuario de la base de datos.DBHOST: Host de la base de datos (por ejemplo, localhost).DBPORT: Puerto de la base de datos (por ejemplo, 5432).WAIT_TIME: Tiempo de espera máximo para los elementos de la página web en segundos.
Configuración del Navegador
El proyecto utiliza Chromium en modo headless para realizar las extracciones. Asegúrate de tener instalado chromedriver en la ruta especificada (/usr/bin/chromedriver).
Instalación
-
Clona el repositorio y navega a la carpeta del proyecto:
git clone <repo_url> cd <project_directory> -
Instala las dependencias del proyecto:
pip install -r requirements.txt -
Configura las variables de entorno mencionadas anteriormente.
-
Asegúrate de tener
chromedriverinstalado y accesible en la ruta correcta (/usr/bin/chromedriver).
Uso
Servicio Web
El servicio expone una API a través del endpoint /calificaciones. Para realizar una extracción, se envía una petición POST con los parámetros clave (nombre de usuario) y password.
curl -X POST http://localhost:5000/calificaciones \
-F 'clave=<tu_clave>' \
-F 'password=<tu_password>'
Funcionalidades
-
Extracción de datos: El script extrae la información de calificaciones y materias de la página web de la ULSA.
-
Almacenamiento en base de datos: Los datos extraídos se almacenan en una base de datos PostgreSQL.
-
Manejo de errores: Los errores de conexión o de extracción se gestionan y registran adecuadamente en la base de datos.
-
Control de fechas: La extracción solo se permite si la fecha actual está dentro de un rango permitido, verificado en la tabla
alumno_extraccion_fecha.
Arquitectura del Proyecto
extract(): Función principal que realiza la extracción de datos desde la página web utilizando Selenium.insert_alumno_extraccion(): Inserta los datos extraídos en la base de datos PostgreSQL.se_puede_extraer(): Verifica si la fecha actual permite realizar la extracción según la tabla de control de fechas.- API REST: Expuesta mediante Flask para realizar las extracciones de forma remota.
- Waitress: Servidor WSGI que permite escalar la aplicación en producción.
Base de Datos
El proyecto utiliza PostgreSQL para almacenar la información de los alumnos extraída de la página web. Las tablas relevantes incluyen:
- alumno_extraccion: Contiene los datos de cada alumno extraídos de la página.
- alumno_extraccion_fecha: Controla los periodos en los que se permite realizar la extracción de datos.
Consideraciones
-
Manejo de errores: Se ha integrado la gestión de errores en las conexiones a la base de datos y durante la extracción de datos web. Los errores se registran y se devuelven respuestas adecuadas.
-
Compatibilidad: Este proyecto está pensado para ejecutarse en servidores Linux, donde
chromedriverywaitressestán instalados.
Ejecución en Producción
Para ejecutar la aplicación en producción, puedes utilizar el comando:
python app.py
El servidor escuchará en http://0.0.0.0:5000 por defecto.