Настройка прокси для pandas_datareader - PullRequest
0 голосов
/ 27 декабря 2018

Система: Anaconda Python 3.6.4 x64 на Win 7 x64

Я пытаюсь использовать pandas_datareader.data за прокси, но не могу изменить мой путь Windows.

Насколько я понимаю, pandas_datareader использует urllib.requests для подключения к соответствующим поставщикам услуг.По умолчанию urllib использует открывающее устройство, которое пытается обнаружить PATH-proxysettings: https://docs.python.org/3.5/howto/urllib2.html#proxies

Я могу заменить открывающее устройство, чтобы заставить его использовать мои указанные настройки прокси, и , насколько я понимаю , это изменяет поведение urllib на глобальном уровне, а не только для данного экземпляра.

Я предполагаю, что использование install_opener ({...}) должно изменить поведение pandas_datareader.Однако я не вижу изменений.

Пример:

import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import style
import pandas as pd
import pandas_datareader.data as web
import urllib

style.use('ggplot')

start = dt.datetime(2015, 1, 1)
end = dt.datetime.now()

# this fails, since no proxy is set
df = web.DataReader("TSLA", 'morningstar', start, end)

# install proxies to opener
proxies = {'http' : 'http://...', 
           'https': 'https://...'}
proxy_support = urllib.request.ProxyHandler(proxies)
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)

# this also fails, why?
df = web.DataReader("TSLA", 'morningstar', start, end)

Может ли кто-нибудь указать мне на мою ошибку?

1 Ответ

0 голосов
/ 08 января 2019

Вот как я это сделал

proxies = {'http': 'http:your proxy:8080'}
headers = {     "Accept":"application/json",
            'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
            "Accept-Encoding":"none",
            "Accept-Language":"en-US,en;q = 0.8",
            "Connection":"keep-alive",
            "Referer":"https://cssspritegenerator.com",
            "User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, 
             like Gecko) Chrome/23.0.1271.64 Safari/537.11"
            }

with requests.Session() as s:
    s.headers = headers
    s.proxies.update(proxies)

gspc = web.DataReader('^GSPC', 'yahoo', start, end, session=s)
...