У меня есть таблица, которую мне нужно проанализировать, в частности, это школьное расписание с 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 для этого, но я открыт для использования других модулей, если это обеспечивает более простое решение.
Я надеюсь, что кто-то может мне помочь, потому что я действительно не знаю, что делать.
РЕДАКТИРОВАТЬ:
<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>
Это вызывает у меня некоторые проблемы, этоoutputting
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ']
С кодом, предоставленным reclosedev, что мне нужно изменить, чтобы адаптировать его, чтобы он выводил
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
Вместо?
EDIT2: Использование reclosedev'sновая функция, она приближается к решению, но все еще есть случаи, когда ей не удается правильно разместить ячейки:
<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' , ' ']
]