如果你没有跨距,这是很容易做到的。想象一下这样一张桌子:
A | B | C |
1 | 2 | 3 |
它将呈现如下:
^{pr2}$
如果对表代码执行一些字符串操作,那么可以轻松地填充一个二维数据结构,从中可以提取列。我能想到的最简单的方法就是使用正则表达式。下面是一个小函数,它接受表代码(为了简单起见不带标记)并返回行列表。这些行以单元格列表的形式返回:import re
def htmlTableData(tblbody):
trs=re.findall(r'(?<=
).*?(?=)', tblbody)content=[re.findall(r'(?<=
).*?(?=)', tr) for tr in trs]return content
对于上面的示例表,它将返回以下列表:[['A', 'B', 'C'], ['1', '2', '3']]
现在,只需将其解压缩传递给zip函数(els是上面的列表):columns=zip(*els)
它将返回列的列表,其中列是元组。在上面的示例中,它返回[('A', '1'), ('B', '2'), ('C', '3')]
请注意,在真正的抓取程序中不会真正使用这个。这是一个简单的例子来说明如何做到这一点。在现实世界中,您经常有不正确的代码,这些代码永远无法以这种方式进行解析。如果要进行屏幕抓取,可以使用解析器来获取表的内容,但可以通过这种方式压缩它来获取列。在