有没有办法从python中的html表中获取某一列的所有元素:
例如:
a b c
1 2 3
我想得到a
,1, c
, 3。
谢谢
如果您没有任何跨度,则很容易做到。想象一下这样的表:
<table>
<tr><td>A</td><td>B</td><td>C</td></tr>
<tr><td>1</td><td>2</td><td>3</td></tr>
</table>
它将呈现如下:
A B C
1 2 3
如果您对表代码进行一些字符串操作,您可以轻松地填充一个二维数据结构,您可以从中提取列。我能想到的最简单的方法是使用正则表达式。这是一个小函数,它采用表格代码(为简单起见不带标签)并返回行列表。这些行作为单元格列表返回:
import re
def htmlTableData(tblbody):
trs=re.findall(r'(?<=<tr>).*?(?=</tr>)', tblbody)
content=[re.findall(r'(?<=<td>).*?(?=</td>)', tr) for tr in trs]
return content
对于上面的示例表,它将返回此列表:
[['A', 'B', 'C'], ['1', '2', '3']]
现在,只需将其解压后传递给 zip 函数(els
即上面的列表):
columns=zip(*els)
它将返回列是元组的列列表。在上面的例子中,它返回[('A', '1'), ('B', '2'), ('C', '3')]
请注意,您不会在真正的抓取程序中真正使用它。这是一个关于如何完成的简单示例。在现实世界中,您经常拥有永远无法以这种方式解析的不正确代码。如果要进行屏幕抓取,请使用解析器获取表的内容,但以这种方式压缩它以获取列。