Почему pandas_datareader для Google не работает?

Я попытался получить данные из Google Finance с помощью следующего кода:

import pandas_datareader.data as wb
import datetime as dt
start = dt.datetime(2015, 1, 1)
end = dt.datetime(2017, 1, 1)

dt = wb.DataReader('FB', 'google', start, end)
dt.head()

и я получил это.

UnicodeDecodeError: кодек "utf-8" не может декодировать байт 0xa0 в позиции 24697: недопустимый начальный байт

Но если я изменил "google" на "yahoo" (используя вместо этого "yahoo finance"), он работает нормально. Так что с этим не так?

2 ответа

Решение

Здесь есть открытый вопрос.

Ниже приведено быстрое исправление, портирование от источника, очистка от него и внесение нескольких небольших изменений.

Я считаю, что проблема с телом, возвращеннымrequests.get()и чтение результирующих байтов. (Traceback согласен с этим.) Например, попробуйтеdata = requests.get(url).content(получает байты); это не удастся. Ниже, data = requests.get(url).text работает.

Я действительно не проверял это строго, но API Google, кажется, работает хорошо. Например, ссылка на экспорт, сгенерированная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

Редактировать: проблема должна быть исправлена ​​в версии 0.6.0 pandas_datareader. Если нет, пожалуйста, снова откройте его, как запрашивается bashtage.

from pandas_datareader import datagoog = data.DataReader('GOOG', start='2004',nd='2016',data_source='google') # Используйте Yahoo и получите ответ goog.head()enter code here

Другие вопросы по тегам