2013-10-29 101 views
0

我正在使用以下代碼從NATI中提取PE比率Yahoo!我已經通過crummy的文檔和我'幾乎'理解nextSibling,.content和previousSibling(我懷疑它們與XML和DOM)。我仍然試圖弄清楚,因爲我認爲從長遠來看,使用該代碼將比下面的代碼漂亮。我想知道的是有可能設定一個極限範圍......即, 2:3(僅搜索2到3)。使用BeautifulSoup設置限制

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(open("NATI_front_page.htm")) 
print soup.findAll('td', "yfnc_tabledata1", limit = [2:3]) 

我用下面的代碼,我得到這個:

PS C:\python27\stock_program> python pe_ratio.py 
[<td class="yfnc_tabledata1"><span id="yfs_j10_nati">3.80B</span></td>, <td class="yfnc_tabledata1">3.48B</td>, <td clas 
s="yfnc_tabledata1">49.15</td>] 

不過,我想使我的工作,這樣做沒有錯誤:

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(open("NATI_front_page.htm")) 
print soup.findAll('td', "yfnc_tabledata1", limit = [2:3]) 

並顯示:

49.15 

感謝您的幫助和建議。

+0

如果我理解正確的,你只需要在第二和第三的結果嗎?您始終可以將限制設置爲3並忽略第一個結果。 – Wiwiweb

+0

我想最終將它寫入CSV文件。 –

+0

'import csv' - 參見http://docs.python.org/2/library/csv.html(尤其是頁面底部的示例) – furas

回答

1

的Python 2.x的

import urllib2 
from BeautifulSoup import BeautifulSoup 

page = urllib2.urlopen('http://finance.yahoo.com/q/ks?s=NATI%20Key%20Statistics').read() 

soup = BeautifulSoup(page) 

all_data = soup.findAll('td', "yfnc_tabledata1") 

print all_data[2].getText() 

# or - for more elements 

for element in all_data[0:3]: 
    print element.getText() 

# write to CSV 

import csv 

with open("results.csv", "wb") as f: 
    writer = csv.writer(f) 

    writer.writerow(["header1", "header2", "header3"]) 

    for element in all_data[0:3]: 
     writer.writerow([element.getText(), "column2", "column3"]) 

結果:

47.65 
# or - for more elements 
3.69B 
3.38B 
47.65 

CSV文件:

header1,header2,header3 
3.69B,column2,column3 
3.38B,column2,column3 
47.65,column2,column3