使用PYTHON获取Yahoo财经数据

2024-05-18 10:09:31 发布

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

我正在使用以下程序将数据从yahoo finance拉到本地驱动器上的文本文件中。这个程序确实成功地将雅虎财务的数据拉到了我电脑的txt文件中。

为什么这段代码会出现19个“错误”然后成功拉入?

如果要将数据保存到数据库服务器,应该如何处理?

import urllib.request
import time

stockstoPull = 'AMD', 'BAC', 'MSFT', 'TXN', 'GOOG'

def pullData(stock):
    fileLine = stock + '.txt'
    urltovisit = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=1y/csv'
with urllib.request.urlopen(urltovisit) as f:
    sourceCode = f.read(100000).decode('utf-8')
splitSource = sourceCode.split('\n')

for eachLine in splitSource:
    splitLine = eachLine.split('.')
    if len(splitLine) == 5:
        if 'values' not in eachLine:
            saveFile = open(fileLine,'a')
            linetoWrite = eachLine+'\n'
            saveFile.write(linetoWrite)
    else:
        print('Error')

print('Pulled', stock)
print('...')
time.sleep(.5)

for eachStock in stockstoPull:     
    pullData(eachStock)

Tags: 数据inimport程序txttimerequeststock
2条回答

你可以找到一个tutorial用熊猫获取“雅虎财务数据”。

Python数据分析库Pandas拥有自己的远程数据访问选项,可以将Yahoo财务数据作为数据帧立即获取。

注意:注意页面顶部的警告。您需要另外安装一个库,即“pandas_datareader”。查询的结果是一个pandas数据框。

代码是正确的,我只改变了两件事。错误在于拆分线长度小于6。您可以使用sqlite作为数据库。

import urllib.request
import time

stockstoPull = 'AMD', 'BAC', 'MSFT', 'TXN', 'GOOG'

def pullData(stock):
    fileLine = stock + '.txt'
    urltovisit = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=1y/csv'
    with urllib.request.urlopen(urltovisit) as f:
        sourceCode = f.read().decode('utf-8')
    splitSource = sourceCode.split('\n')

    for eachLine in splitSource:
        splitLine = eachLine.split(',') # <---(here ',' instead of '.')
        if len(splitLine) == 6: # <----( here, 6 instead of 5 )
            if 'values' not in eachLine:
                saveFile = open(fileLine,'a')
                linetoWrite = eachLine+'\n'
                saveFile.write(linetoWrite)

    print('Pulled', stock)
    print('...')
    time.sleep(.5)

if __name__=="__main__":
    for eachStock in stockstoPull:     
        pullData(eachStock)

相关问题 更多 >