2015-06-14 95 views
2

为了格式化的目的,我想解析雅虎财务表中的每个单独统计信息 - 解析整个表格时,格式很糟糕!我目前正在使用下面的代码,我将不得不重复4行contentA代码稍作修改,以检索表格每行内的统计信息。这在下面的contentB变量中有例子。我拒绝相信这是最有效的方式。有什么建议么?LXML - 解析tr标签内的td内容

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() 

回答

2

使用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]} 
+0

优秀! 10分为你:-D –

+0

我将如何自由格式化每个返回的变量?例如,我想要一本字典,其中 总收入:'31,821,000','30,871,000','29,904,000' –

+1

@AranFreel请参阅我的EDIT – styvane