Mam tabelę, którą muszę przeanalizować, w szczególności jest to plan zajęć w szkole z 4 blokami czasu i 5 bloków dni na każdy tydzień. Próbowałem to przeanalizować, ale szczerze mówiąc, nie dotarłem zbyt daleko, ponieważ utknąłem w kwestii radzenia sobie z atrybutami rowspan i colspan, ponieważ zasadniczo oznaczają one brak danych, które muszę kontynuować.Parsowanie tabeli z odstępem między wierszami i kolspanem
Jako przykład tego, co chcę zrobić, oto tabela:
<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>
chcę wziąć ten stół i przekształcić go w tej liście:
[[1,1,2,3,4],
[1,1,2,3,4],
[1,1,2,5,6],
[1,1,2,5,6]]
Teraz jestem uzyskanie płaskiej listy, podobnego do tego:
[1,2,3,4,5,6]
ale w formie słownika, z informacji na temat jak wiele kolumn i ro ws to rozciąga się, opis go i jaki jest tydzień.
Oczywiście to musi działać dla każdej możliwości rowspan/colspan i przez wiele tygodni w tej samej tabeli.
HTML nie jest tak czysty, jak go przedstawiłem, jest wiele atrybutów, które pominąłem, a tekst nie jest oczywiście tak czysty jak 1,2,3,4, ale raczej blokuje opisowy tekst. Ale jeśli uda mi się rozwiązać tę część, to powinno być to łatwe do włączenia do tego, co już napisałem.
Używam lxml.html i Python, aby to zrobić, ale jestem otwarty na używanie innych modułów, jeśli zapewnia to łatwiejsze rozwiązanie.
Mam nadzieję, że ktoś może mi pomóc, bo naprawdę nie wiem, co robić.
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>
To jest przyczyną mnie jakieś problemy, to jest wyprowadzanie
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ']
z kodem dostarczonych przez reclosedev, co muszę zmienić, aby je dostosować tak wyprowadza
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
Zamiast tego?
EDIT2: Korzystanie z nowej funkcji reclosedev jest, to zbliża się rozwiązanie, ale nadal istnieją przypadki, w których nie udaje mu się umieścić komórki poprawnie:
<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>
Z tym, oryginalna tabela pokazuje go jako takie:
[
[' ', ' 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' , ' ']
]
Ale nowe wyjścia nazywają to:
[
[' ', ' 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' , ' ']
]
Naprawdę by nam to pomogło, gdybyś mógł pokazać nam, jakiego kodu obecnie używasz i jaki jest wynik, zamiast wyjść, który jest podobny do tego, co dostajesz. –