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()
使用range
和format
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]}
我想解析来自雅虎财经 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()
使用range
和format
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]}