У меня есть таблица, которую мне нужно разобрать, в частности, это школьный график с 4 блоками времени и 5 блоков дней в неделю. Я попытался разобрать его, но, честно говоря, не очень далеко, потому что я застрял в том, что касается атрибутов rowspan и colspan, потому что они по существу означают отсутствие данных, которые мне нужно продолжить.
В качестве примера того, что я хочу сделать, вот таблица:
<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>
Я хочу взять эту таблицу и преобразовать ее в этот список:
[[1,1,2,3,4],
[1,1,2,3,4],
[1,1,2,5,6],
[1,1,2,5,6]]
Сейчас я получаю плоский список, похожий на это:
[1,2,3,4,5,6]
Но в словарной форме, с информацией о том, сколько столбцов и строк она охватывает, описание ее и на какой неделе она.
Очевидно, что это должно работать для каждой возможности rowspan/colspan и в течение нескольких недель в одной таблице.
html не так чист, как я его изобразил, есть много атрибутов, которые я забыл, и текст явно не такой чистый, как 1,2,3,4, а скорее блок описательных текст. Но если бы я смог решить эту часть, то ее было бы достаточно легко включить в то, что я уже написал.
Я использовал lxml.html и Python для этого, но я открыт для использования других модулей, если он обеспечивает более легкое решение.
Я надеюсь, что кто-то может мне помочь, потому что я действительно не знаю, что делать.
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>
Это вызывает некоторые проблемы, это выводит
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ']
С кодом, предоставленным reclosedev, что мне нужно изменить для его адаптации, чтобы он выводил
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
Вместо
EDIT2: Используя новую функцию reclosedev, она приближается к решению, но все еще есть случаи, когда он не может правильно помещать ячейки:
<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>
При этом исходная таблица показывает это как таковое:
[
[' ', ' 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' , ' ']
]
Но новый вызов выводит это:
[
[' ', ' 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' , ' ']
]