공개 문제는 here입니다.
아래의 간단한 수정 사항은 소스에서 포팅하여 페어링하고 약간 수정하는 것입니다.
나는 requests.get()
에 의해 반환 된 본문과 결과 바이트를 읽는 것이 문제라고 생각합니다. (역 추적은 이에 동의합니다.) 예를 들어, data = requests.get(url).content
(바이트 가져 오기); 이 작업은 실패합니다. 아래에서 data = requests.get(url).text
이 작동합니다.
이 엄격한 테스트를 거치지는 않았지만 Google API는 정상적으로 작동하는 것처럼 보입니다. 예를 들어 url
에 의해 생성 된 내보내기 링크는 현재 정상적으로 작동합니다.
import datetime
import requests
from io import StringIO
from pandas.io.common import urlencode
import pandas as pd
BASE = 'http://finance.google.com/finance/historical'
def get_params(symbol, start, end):
params = {
'q': symbol,
'startdate': start.strftime('%Y/%m/%d'),
'enddate': end.strftime('%Y/%m/%d'),
'output': "csv"
}
return params
def build_url(symbol, start, end):
params = get_params(symbol, start, end)
return BASE + '?' + urlencode(params)
start = datetime.datetime(2010, 1, 1)
end = datetime.datetime.today()
sym = 'SPY'
url = build_url(sym, start, end)
data = requests.get(url).text
data = pd.read_csv(StringIO(data), index_col='Date', parse_dates=True)
print(data.head())
# Open High Low Close Volume
# Date
# 2017-11-30 263.76 266.05 263.67 265.01 127894389
# 2017-11-29 263.02 263.63 262.20 262.71 77512102
# 2017-11-28 260.76 262.90 260.66 262.87 98971719
# 2017-11-27 260.41 260.75 260.00 260.23 52274922
# 2017-11-24 260.32 260.48 260.16 260.36 27856514
편집 : 문제는 pandas_datareader의 0.6.0 버전에서 수정되어야합니다. 그렇지 않은 경우 as bashtage requested을 다시 열어주세요.
나는 오늘 밤까지 비슷한 오류가 발생했지만 오늘까지 작동 한 스크립트에 주식 목록을 제공하고 있습니다. 아래 링크는이 변경과 관련이있을 수 있습니다. https://github.com/rsvp/fecon235/issues/7#issuecomment-332572738 –