我有一个需要解析的表格,具体来说,它是一份包含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]
但在字典形式中,需要包含有关其跨越多少列和行、描述以及所属周数的信息。
显然,这需要适用于跨度/列跨度的每种可能性,并且适用于同一表中的多个周。
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' , ' ']
]