0

有没有办法从python中的html表中获取某一列的所有元素:
例如:

a    b    c  
1    2    3  

我想得到a,1, c, 3。

谢谢

4

2 回答 2

0

如果您没有任何跨度,则很容易做到。想象一下这样的表:

<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')]

请注意,您不会在真正的抓取程序中真正使用它。这是一个关于如何完成的简单示例。在现实世界中,您经常拥有永远无法以这种方式解析的不正确代码。如果要进行屏幕抓取,请使用解析器获取表的内容,但以这种方式压缩它以获取列。

于 2012-12-05T15:08:16.623 回答
0

你试过什么?你在解析一些其他的 HTML 代码吗?或者这就是你想做的全部?

尝试查看用于 HTML 抓取的Beautiful Soup 。

包括有关您尝试做的事情的更多信息或有关您的项目的更多信息。

于 2012-12-05T05:18:59.763 回答