Анализ таблицы с rowspan и colspan

У меня есть таблица, которую мне нужно разобрать, в частности, это школьное расписание с 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>

Это вызывает у меня некоторые проблемы, это выводит

[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ']

С кодом, предоставленным reclosedev, что мне нужно изменить, чтобы адаптировать его, чтобы он выводил

[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']
[' ', ' ', ' ', 'Thing', ' ']

Вместо этого?

РЕДАКТИРОВАТЬ2: Используя новую функцию 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' , ' ']
]
13
задан Atheuz 4 April 2012 в 17:19
поделиться