54 lines
2.3 KiB
Python
54 lines
2.3 KiB
Python
from bs4 import BeautifulSoup
|
|
|
|
def process_html(html_doc):
|
|
"""
|
|
Procesa el HTML de la página y extrae la información relevante
|
|
como materias, estados del servicio social, etc.
|
|
"""
|
|
soup = BeautifulSoup(html_doc, 'lxml')
|
|
table = soup.find('table', attrs={'id': 'ctl00_contenedor_HistorialAlumno1_gvMaterias'})
|
|
|
|
actualmente_cursadas = soup.find('table', attrs={'id': 'ctl00_contenedor_HistorialAlumno1_gvMatOrdinario'})
|
|
|
|
if table is None:
|
|
raise Exception("Tabla no encontrada en la página")
|
|
elif actualmente_cursadas is None:
|
|
raise Exception("Tabla de materias actualmente cursadas no encontrada en la página")
|
|
|
|
materias_sgu = []
|
|
headers = [header.text for header in table.find_all('th')]
|
|
|
|
for row in table.find_all('tr'):
|
|
cols = row.find_all('td')
|
|
if cols and not any(col.text == "Promedio:" for col in cols):
|
|
materias_sgu.append({ headers[i]: col.text for i, col in enumerate(cols) if not is_cell_empty(col.text) })
|
|
materias_actualmente_cursadas = []
|
|
headers = [header.text for header in actualmente_cursadas.find_all('th')]
|
|
for row in actualmente_cursadas.find_all('tr'):
|
|
cols = row.find_all('td')
|
|
if cols and not any(col.text == "No hay Datos" for col in cols):
|
|
materias_actualmente_cursadas.append({ headers[i]: col.text for i, col in enumerate(cols) if not is_cell_empty(col.text) })
|
|
|
|
periodo_actual = soup.find('span', attrs={'id': 'ctl00_contenedor_HistorialAlumno1_Header1_lblPeriodo'})
|
|
grupo_actual = soup.find('span', attrs={'id': 'ctl00_contenedor_HistorialAlumno1_Header1_lblgru'})
|
|
|
|
return clean_materias_sgu(materias_sgu), clean_materias_sgu(materias_actualmente_cursadas), f"'{periodo_actual.text}'", f"'{grupo_actual.text}'"
|
|
|
|
def is_cell_empty(cell_content):
|
|
"""
|
|
Verifica si el contenido de una celda está vacío o contiene solo espacios.
|
|
"""
|
|
return not cell_content.strip() or cell_content == u'\xa0'
|
|
|
|
def clean_materias_sgu(materias_sgu):
|
|
"""
|
|
Limpia y ajusta las materias obtenidas del SGU para su procesamiento posterior.
|
|
"""
|
|
for materia in materias_sgu:
|
|
if '\xa0' in materia:
|
|
materia['SEMESTRE'] = materia.pop('\xa0')
|
|
return materias_sgu
|
|
|
|
# Puedes agregar más funciones según sea necesario para procesar otros aspectos del HTML
|
|
|