LXML - 解析 tr 标签内的 td 内容

LXML - parse td content within tr tag

我想解析来自雅虎财经 table 的每个单独统计数据以进行格式化 - 在解析整个 table 时,格式很糟糕!!我目前正在使用下面的代码,我将不得不重复 contentA 的 4 行代码,稍微修改一下以检索 table 的每一行中的统计信息。这在下面的 contentB 变量中得到了例证。我拒绝相信这是最有效的方法。有什么建议吗?

from lxml import html   

url = 'http://finance.yahoo.com/q/is?s=MMM+Income+Statement&annual'

tree = html.parse(url)

contentA = tree.xpath("//table[@class='yfnc_tabledata1']/tr[1]/td/table/tr[2]/td[1]")[0].text_content().strip()
contentA1 = tree.xpath("//table[@class='yfnc_tabledata1']/tr[1]/td/table/tr[2]/td[2]")[0].text_content().strip()
contentA2 = tree.xpath("//table[@class='yfnc_tabledata1']/tr[1]/td/table/tr[2]/td[3]")[0].text_content().strip()
contentA3 = tree.xpath("//table[@class='yfnc_tabledata1']/tr[1]/td/table/tr[2]/td[4]")[0].text_content().strip()

contentB = tree.xpath("//table[@class='yfnc_tabledata1']/tr[1]/td/table/tr[3]/td[1]")[0].text_content().strip()
contentB1 = tree.xpath("//table[@class='yfnc_tabledata1']/tr[1]/td/table/tr[3]/td[2]")[0].text_content().strip()
contentB2 = tree.xpath("//table[@class='yfnc_tabledata1']/tr[1]/td/table/tr[3]/td[3]")[0].text_content().strip()
contentG3 = tree.xpath("//table[@class='yfnc_tabledata1']/tr[1]/td/table/tr[3]/td[4]")[0].text_content().strip()

使用rangeformat

for i in range(1,5):
    contentA = tree.xpath("//table[@class='yfnc_tabledata1']/tr[1]/td/table/tr[2]/td[{i}]".format(i=i))[0].text_content().strip()
    print(contentA)

输出

Total Revenue
31,821,000
30,871,000
29,904,000

for i in range(1,5):
    contentB = tree.xpath("//table[@class='yfnc_tabledata1']/tr[1]/td/table/tr[3]/td[{i}]".format(i=i))[0].text_content().strip()
    print(contentB)

输出

Cost of Revenue
16,447,000
16,106,000
15,685,000

编辑

In [22]: d = {}

In [23]: d.setdefault('Revenue', [])
Out[23]: []

In [24]: for i in range(2,5):
   ....:     contentB = tree.xpath("//table[@class='yfnc_tabledata1']/tr[1]/td/table/tr[3]/td[{i}]".format(i=i))[0].text_content().strip()
   ....:     d['Revenue'].append(int(contentB.replace(',', '')))
   ....:     

In [25]: d
Out[25]: {'Revenue': [16447000, 16106000, 15685000]}