Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写一个python程序,将Yahoo Finance股票报价拉入Excel_Python_Python 2.7_Csv_Finance_Yahoo Finance - Fatal编程技术网

编写一个python程序,将Yahoo Finance股票报价拉入Excel

编写一个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

我已经创建了一个程序,可以从雅虎财经中提取每月的股票信息,并打印出信息列表。我知道我获取信息的方法还不是最好的,但我坚持的部分是获取股票信息并将其写入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
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)