python,lxml和xpath - html表解析

use*_*131 5 python xpath lxml

我是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)  
Run Code Online (Sandbox Code Playgroud)

这只打印第一列:(

for i in data:  
    print i.next()
Run Code Online (Sandbox Code Playgroud)

以下仅导入第三行,而不是后续行

tbl = doc.xpath("//body/table[2]//tr[position()>2]")[0]
Run Code Online (Sandbox Code Playgroud)

任何人都知道一个奇特的解决方案,将第3行的所有数据都转换为tbl并将其复制到一个数组中,以便将其处理成一个没有lxml依赖的模块?

先谢谢你的帮助,Alex

int*_*jay 0

您需要使用循环来访问行的数据,如下所示:

for row in data:  
    for col in row:
        print col
Run Code Online (Sandbox Code Playgroud)

像您一样调用一次 next() 将仅访问第一项,这就是您看到一列的原因。

请注意,由于生成器的性质,您只能访问它们一次。如果您将调用更改process_row(row)list(process_row(row)),则生成器将转换为可以重用的列表。

更新:如果您只需要第三行及以上,请使用data[2:]