我正在尝试复制他在2013年作为教程上传的Sentdex的股票筛选器(https://www.youtube.com/watch?v=Y4GHgJjIQnk)。不幸的是,从那时起,许多事情都发生了变化,因此需要对他提出的代码进行细微的调整。我把不能正常工作的那部分代码贴在下面。如果任何人感兴趣,可以通过上面的链接获得完整的代码。
代码本质上是原始的代码,但关于yahoo url方法有一些小的例外,如下所示:
import urllib.request
import time
import datetime
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import matplotlib.dates as mdates
import mpl_finance
from mpl_finance import candlestick_ohlc
import matplotlib
import pylab..。
def graphData(stock,MA1,MA2):
'''
Use this to dynamically pull a stock:
'''
try:
print('Currently Pulling',stock)
urlToVisit = 'https://query1.finance.yahoo.com/v8/finance/chart/'+stock+'?interval=2m'
stockFile =[]
try:
sourceCode = urllib.request.urlopen(urlToVisit).read().decode()
splitSource = sourceCode.split('\n')
for eachLine in splitSource:
splitLine = eachLine.split(',')
if len(splitLine)==6:
if 'values' not in eachLine:
stockFile.append(eachLine)
except Exception as e:
print(str(e), 'failed to organize pulled data.')
except Exception as e:
print(str(e), 'failed to pull pricing data')
try:
date, closep, highp, lowp, openp, volume = np.loadtxt(stockFile,delimiter=',', unpack=True, converters={0: bytespdate2num('%Y%m%d')})我得到的输出如下:
Currently Pulling ABT
UserWarning: loadtxt: Empty input file: "[]"
date, closep, highp, lowp, openp, volume = np.loadtxt(stockFile,delimiter=',', unpack=True, converters={0: bytespdate2num('%Y%m%d')})
list assignment index out of range
Currently Pulling ABBV
main loop list assignment index out of range在所有相关导入之后指定的sp500列表中的所有滚动条的...etc。
你知道哪里出问题了吗?我试图从中提取信息的链接如下:https://query1.finance.yahoo.com/v8/finance/chart/AAPL?interval=2m
发布于 2019-04-14 00:43:52
更准确地说,问题出在您处理来自Yahoo的响应的方式上:
因为雅虎的输出已经是json格式的,所以它并不像你想的那样,最好也是最简单的处理输出的方法是使用json.loads():
import urllib.request
import time
import datetime
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import matplotlib.dates as mdates
import mpl_finance
from mpl_finance import candlestick_ohlc
import matplotlib
import pylab, json
...
def graphData(stock,MA1,MA2):
'''
Use this to dynamically pull a stock:
'''
try:
print('Currently Pulling',stock)
urlToVisit = 'https://query1.finance.yahoo.com/v8/finance/chart/'+stock+'?interval=2m'
print(urlToVisit)
stockFile =[]
try:
sourceCode = urllib.request.urlopen(urlToVisit).read().decode()
sourceCode = json.loads(sourceCode)
print(sourceCode['chart']['result'][0]['indicators']['quote'][0].keys())
#dict_keys(['low', 'close', 'open', 'high', 'volume'])
...只需浏览
json.loads返回的嵌套字典,就可以按您喜欢的顺序获取任何数据:
stock = "FB"
print('Currently Pulling',stock)
urlToVisit = 'https://query1.finance.yahoo.com/v8/finance/chart/'+stock+'?interval=2m'
print(urlToVisit)
stockFile =[]
sourceCode = urllib.request.urlopen(urlToVisit).read().decode()
sourceCode = json.loads(sourceCode)
resp_ = {}
resp_ = sourceCode['chart']['result'][0]['indicators']['quote'][0]
resp_['timestamp'] = sourceCode['chart']['result'][0]['timestamp']
print(resp_.keys())
#dict_keys(['close', 'open', 'timestamp', 'volume', 'high', 'low'])以及每个值的时间戳。
https://stackoverflow.com/questions/55667573
复制相似问题