2015-06-14 68 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