Ho un tavolo che ho bisogno di analizzare, in particolare è un programma scolastico con 4 blocchi di tempo e 5 blocchi di giorni per ogni settimana. Ho tentato di analizzarlo, ma onestamente non sono arrivato molto lontano perché sono rimasto bloccato su come gestire gli attributi rowspan e colspan, perché essenzialmente significa che c'è una mancanza di dati che devo continuare.Analizzare un tavolo con rowspan e colspan
Come esempio di ciò che voglio fare, ecco una tabella:
<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>
Voglio prendere quel tavolo e convertirlo in questa lista:
[[1,1,2,3,4],
[1,1,2,3,4],
[1,1,2,5,6],
[1,1,2,5,6]]
In questo momento sono ottenere una lista piatta, simile a questo:
[1,2,3,4,5,6]
ma in forma dizionario, le informazioni riguardanti il numero di colonne e ro ws it span, una descrizione di esso e in quale settimana è.
Ovviamente questo deve funzionare per ogni possibilità di rowspan/colspan e per più settimane nella stessa tabella.
L'html non è così pulito come l'ho ritratto, ci sono molti attributi che ho omesso, e il testo ovviamente non è così netto come 1,2,3,4 ma piuttosto blocchi di testo descrittivo. Ma se potessi ottenere questa parte risolta, dovrebbe essere abbastanza facile da incorporare in ciò che ho già scritto.
Ho usato lxml.html e Python per farlo, ma sono aperto a utilizzare altri moduli se fornisce una soluzione più semplice.
Spero che qualcuno possa aiutarmi, perché davvero non so cosa fare.
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>
Questo mi sta causando alcuni problemi, questo è l'output
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ']
Con il codice fornito da reclosedev, cosa devo cambiare per adattarla in modo che le uscite
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
Invece?
EDIT2: Utilizzando la nuova funzione di reclosedev, è avvicinando una soluzione, ma ci sono ancora casi in cui non riesce a mettere le cellule in modo corretto:
<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 questo, la tabella originale mostra come tale:
[
[' ', ' 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' , ' ']
]
Ma le nuove uscite di chiamata in questo modo:
[
[' ', ' 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' , ' ']
]
Sarebbe davvero d'aiuto se poteste mostrarci quale codice state attualmente utilizzando e quale output state effettivamente ottenendo, invece di un output che è simile a quello che state ottenendo. –