1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 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
|