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