编写一个python程序,将Yahoo财经股票报价拉入Ex

2024-10-06 07:45:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了一个程序,能够从雅虎财经每月的股票信息和打印出信息列表。我知道我获取信息的方法还不是最好的,但我所坚持的是获取股票信息并将其写入csv文件。到目前为止,我有权将每个字符放入一个csv文件中。在

import requests
from urllib2 import urlopen
import csv
import pandas as pd
from pandas import DataFrame
import datetime
import pandas.io.data

YahooUrl = 'http://ichart.yahoo.com/table.csv?s='
start_month = 1 - 1
start_day = 1
start_year = 2010

end_month = 12 - 1
end_day = 31
end_year = 2014

Start_ApiMonth = '&a=%s' %(start_month)
Start_ApiDay = '&b=%s' %(start_day)
Start_ApiYear = '&c=%s' %(start_year)

End_ApiMonth = '&d=%s' %(end_month)
End_ApiDay = '&e=%s' %(end_day)
End_ApiYear = '&f=%s' %(end_year)

interval = 'm'

ApiInterval = '&g=%s' %(interval)

ApiStatic = '&ignore=.csv'

Ticker = raw_input("What is the ticker > ")

Website = urlopen(YahooUrl + Ticker + Start_ApiMonth + Start_ApiDay +         Start_ApiYear + End_ApiMonth + End_ApiDay + End_ApiYear + ApiInterval +  ApiStatic)
Info = Website.read()

output = open('output.csv','wb')
wr = csv.writer(output, dialect='excel')
for item in Info:
    wr.writerow(item)
print Info

Tags: csvimportinfo信息pandasyearstartend
1条回答
网友
1楼 · 发布于 2024-10-06 07:45:12

read()返回一个字符串,因此Info是一个字符串。对字符串的迭代将导致迭代组成字符串的每个字符:

>>> for c in 'abcd':
...     print c
a
b
c
d

因此,您的代码将把每个字符写到csv文件的单独一行。

您接收的数据实际上已经是CSV格式的。以下是股票YHOO的前几行:

^{pr2}$

所以只需保存文件即可:

with open('{}.csv'.format(Ticker),'wb') as output:
    output.write(Website.read())

这将把数据写入一个名为stock name后跟.csv扩展名的文件,例如YHOO.csv


更新

下面的代码演示如何下载和合并多个股票的数据。输出文件现在需要一个额外的字段来标识股票-Stock ID。这将作为标题行和详细信息行的第一个CSV字段插入。标头仅发射一次。

import requests

yahoo_url = 'http://ichart.yahoo.com/table.csv'
params = {'a': 0, 'b': 1, 'c': 2010, 'd': 11, 'e': 31, 'f': 2014, 'g': 'm', 'ignore': '.csv'}
stock_ids = ['AAPL', 'GOOG', 'YHOO']
with open('output.csv', 'wb') as output:
    header_written = False
    for stock_id in stock_ids:
        params['s'] = stock_id
        r = requests.get(yahoo_url, params=params)
        lines = r.iter_lines()
        header = next(lines)
        if not header_written:
            output.write('Stock ID,{}\n'.format(header))
            header_written = True
        output.writelines('{},{}\n'.format(stock_id, line) for line in lines)

相关问题 更多 >