gpt4 book ai didi

python、lxml和xpath——html表格解析

转载 作者:太空狗 更新时间:2023-10-30 01:30:39 24 4
gpt4 key购买 nike

我是 lxml 的新手,是 python 的新手,无法找到以下问题的解决方案:

我需要导入一些包含 3 列和从第 3 行开始的未定义行数的表格。

当任何一行的第二列为空时,该行被丢弃并且表的处理中止。

以下代码可以很好地打印表的数据(但之后我无法重用这些数据):

from lxml.html import parse

def process_row(row):
for cell in row.xpath('./td'):
print cell.text_content()
yield cell.text_content()

def process_table(table):
return [process_row(row) for row in table.xpath('./tr')]

doc = parse(url).getroot()
tbl = doc.xpath("/html//table[2]")[0]
data = process_table(tbl)

这只打印第一列:(

for i in data:  
print i.next()

下面只导入第三行,不导入后面的

tbl = doc.xpath("//body/table[2]//tr[position()>2]")[0]

有谁知道一个奇特的解决方案,可以将第 3 行的所有数据放入 tbl 并将其复制到一个数组中,以便可以将其处理到一个没有 lxml 依赖性的模块中?

预先感谢您的帮助,亚历克斯

最佳答案

这是一个生成器:

def process_row(row):  
for cell in row.xpath('./td'):
print cell.text_content()
yield cell.text_content()

您调用它的方式就好像您认为它会返回一个列表一样。它没有。它在某些情况下表现像一个列表:

print [r for r in process_row(row)]

但这只是因为生成器和列表都向 for 循环公开相同的接口(interface)。在只评估一次的上下文中使用它,例如:

return [process_row(row) for row in table.xpath('./tr')]

只需为 row 的每个新值调用一次生成器的新实例,返回产生的第一个结果。

所以这是你的第一个问题。你的第二个是你期待的:

tbl = doc.xpath("//body/table[2]//tr[position()>2]")[0]

为您提供第三行和所有后续行,它只是将 tbl 设置为第三行。好吧,对 xpath 的调用 返回第三行和所有后续行。是最后的 [0] 把你搞砸了。

关于python、lxml和xpath——html表格解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1577487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com