Mejorar el README.md
- Se ha implementado la extracción de datos de calificaciones desde la página web de la ULSA utilizando Selenium. - Los datos extraídos se almacenan en una base de datos PostgreSQL con inserciones y actualizaciones controladas. - Se ha añadido un control de fechas para permitir la extracción únicamente dentro de periodos específicos. - Manejo de errores en la conexión a la base de datos y en la extracción web. - API REST configurada con Flask y desplegada con Waitress para permitir la extracción mediante solicitudes HTTP.
This commit is contained in:
107
README.md
107
README.md
@@ -1 +1,106 @@
|
||||
# Extracción de alumnos
|
||||
# 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
|
||||
|
||||
1. Clona el repositorio y navega a la carpeta del proyecto:
|
||||
|
||||
```bash
|
||||
git clone <repo_url>
|
||||
cd <project_directory>
|
||||
```
|
||||
|
||||
2. Instala las dependencias del proyecto:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
3. Configura las variables de entorno mencionadas anteriormente.
|
||||
|
||||
4. Asegúrate de tener `chromedriver` instalado 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`.
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:5000/calificaciones \
|
||||
-F 'clave=<tu_clave>' \
|
||||
-F 'password=<tu_password>'
|
||||
```
|
||||
|
||||
### Funcionalidades
|
||||
|
||||
1. **Extracción de datos**: El script extrae la información de calificaciones y materias de la página web de la ULSA.
|
||||
|
||||
2. **Almacenamiento en base de datos**: Los datos extraídos se almacenan en una base de datos PostgreSQL.
|
||||
|
||||
3. **Manejo de errores**: Los errores de conexión o de extracción se gestionan y registran adecuadamente en la base de datos.
|
||||
|
||||
4. **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 `chromedriver` y `waitress` están instalados.
|
||||
|
||||
## Ejecución en Producción
|
||||
|
||||
Para ejecutar la aplicación en producción, puedes utilizar el comando:
|
||||
|
||||
```bash
|
||||
python app.py
|
||||
```
|
||||
|
||||
El servidor escuchará en `http://0.0.0.0:5000` por defecto.
|
||||
Reference in New Issue
Block a user