编写一个python程序,将Yahoo Finance股票报价拉入Excel
我已经创建了一个程序,可以从雅虎财经中提取每月的股票信息,并打印出信息列表。我知道我获取信息的方法还不是最好的,但我坚持的部分是获取股票信息并将其写入csv文件。到目前为止,我所拥有的权限将每个单独的字符放入csv文件中编写一个python程序,将Yahoo Finance股票报价拉入Excel,python,python-2.7,csv,finance,yahoo-finance,Python,Python 2.7,Csv,Finance,Yahoo Finance,我已经创建了一个程序,可以从雅虎财经中提取每月的股票信息,并打印出信息列表。我知道我获取信息的方法还不是最好的,但我坚持的部分是获取股票信息并将其写入csv文件。到目前为止,我所拥有的权限将每个单独的字符放入csv文件中 import requests from urllib2 import urlopen import csv import pandas as pd from pandas import DataFrame import datetime import pandas.io.da
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
read()
返回一个字符串,因此Info
是一个字符串。对字符串的迭代会导致对组成该字符串的每个字符进行迭代:
>>> for c in 'abcd':
... print c
a
b
c
d
因此,您的代码将在csv文件中自己的行中写入每个字符
您接收的数据实际上已经是CSV格式。以下是YHOO股票的前几行:
Date,Open,High,Low,Close,Volume,Adj Close
2014-12-01,51.43,51.68,48.290001,50.509998,16328900,50.509998
2014-11-03,46.049999,52.619999,45.740002,51.740002,25212400,51.740002
这将把数据写入一个名为的文件,文件名后面跟着.csv
扩展名,例如YHOO.csv
更新 下面的代码显示了如何下载和合并多个股票的数据。输出文件现在需要一个附加字段来标识股票-
股票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)
urlopen
返回一个文件;艾克物体read()
返回单个字符串-您需要解析该字符串以将其拆分为相关字段。您应该包括一个print(Info)
的示例-如果它不是太长或只是其中的一部分(让我们了解其结构),请尝试自己解析它。pandas
有内置工具从Yahoo Finance提取数据,请参阅以获取概述。使用pandas
API,您的手工操作应该少很多。我感谢您的帮助。那很有效!我很好奇是否有办法将多个股票信息写入excel。比如说,我把代码改为拉入AAPL和GOOG,我想把它写进一个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)