0

我正在使用以下代码从Yahoo!上的 NATI 中提取 PE 比率!我已经阅读了 crummy 的文档,并且“几乎”了解 nextSibling、.content 和 previousSibling(我怀疑它们与 XML 和 DOM 有关)。我仍在试图弄清楚,因为我认为从长远来看,使用该代码将比下面的代码更漂亮。我想知道的是可以设置一个范围限制......即2:3(仅搜索2到3)。

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

提前感谢您的帮助和建议。

4

1 回答 1

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
于 2013-10-29T00:51:49.767 回答