Tengo una tabla que debo analizar, específicamente es un horario escolar con 4 bloques de tiempo y 5 bloques de días para cada semana. Intenté analizarlo, pero honestamente no he llegado muy lejos porque estoy atascado con la forma de manejar los atributos rowspan y colspan, porque esencialmente significan que hay una falta de datos que necesito continuar.Analizando una tabla con rowspan y colspan
Como un ejemplo de lo que quiero hacer, aquí está una tabla:
<tr>
<td colspan="2" rowspan="4">#1</td>
<td rowspan="4">#2</td>
<td rowspan="2">#3</td>
<td rowspan="2">#4</td>
</tr>
<tr>
</tr>
<tr>
<td rowspan="2">#5</td>
<td rowspan="2">#6</td>
</tr>
<tr>
</tr>
quiero tomar esa mesa y convertirlo en esta lista:
[[1,1,2,3,4],
[1,1,2,3,4],
[1,1,2,5,6],
[1,1,2,5,6]]
En este momento estoy obtener una lista plana, similar a esto:
[1,2,3,4,5,6]
Pero en forma de diccionario, con información sobre cuántas columnas y ro ws se expande, una descripción de ello y en qué semana está.
Obviamente, esto debe funcionar para cada posibilidad de rowspan/colspan, y para varias semanas en la misma tabla.
El html no es tan limpio como lo he retratado, hay muchos atributos que he omitido, y el texto obviamente no está tan limpio como el 1,2,3,4, sino bloques de texto descriptivo. Pero si pudiera resolver esta parte, entonces debería ser lo suficientemente fácil de incorporar a lo que ya he escrito.
He estado usando lxml.html y Python para hacer esto, pero estoy abierto a usar otros módulos si proporciona una solución más fácil.
Espero que alguien pueda ayudarme, porque realmente no sé qué hacer.
EDIT:
<table>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td rowspan="4">Thing</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
Esto me está causando algunos problemas, esto está emitiendo
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ']
Con el código proporcionado por reclosedev, ¿qué necesito cambiar para adaptarla lo que da salida a
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
¿En lugar de eso?
Edit2: Utilizando la nueva función de reclosedev, se acerca a una solución, pero todavía hay casos en los que se produce un error de colocar las células correctamente:
<table>
<tr>
<td> </td>
<td rowspan="2"> DMAT Aud. 6 </td>
<td rowspan="4"> Exam</td>
<td rowspan="2"> DMAT Aud. 7</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td rowspan="2"> CART Aud. 4</td>
</tr>
<tr>
<td> </td>
<td rowspan="2"> CART Aud. 4</td>
<td rowspan="2"> OOP Aud. 7</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
</table>
Con esto, la tabla original muestra como tal:
[
[' ', ' DMAT Aud. 6 ', ' Exam', ' DMAT Aud. 7', ' '],
[' ', ' DMAT Aud. 6 ', ' Exam', ' DMAT Aud. 7', ' CART Aud. 4'],
[' ', ' CART Aud. 4' , ' Exam', ' OOP Aud. 7' , ' CART Aud. 4'],
[' ', ' CART Aud. 4' , ' Exam', ' OOP Aud. 7' , ' ']
]
Pero las nuevas salidas de llamadas esto:
[
[' ', ' DMAT Aud. 6 ', ' Exam', ' DMAT Aud. 7', ' '],
[' ', ' DMAT Aud. 6 ', ' Exam', ' DMAT Aud. 7', ' CART Aud. 4'],
[' ', ' CART Aud. 4' , ' Exam', ' CART Aud. 4', ' OOP Aud. 7'],
[' ', ' CART Aud. 4' , ' Exam', ' OOP Aud. 7' , ' ']
]
Realmente nos ayudaría si pudiera mostrar lo que el código está utilizando actualmente y qué salida que está consiguiendo realmente, en lugar de un resultado similar a lo que está recibiendo. –