从 yfinance 调用 "download" 后出现 SSL 错误

SSL error after "download" call from yfinance

我在 Spyder (Python 3.7) 中安装了 yfinance,但是当我进行基本调用时,例如:

import yfinance as yf


df_yahoo = yf.download('AAPL', 
                       start='2000-01-01', 
                       end='2010-12-31',
                       progress=False)

print(df_yahoo)

我收到一条错误消息:

Exception in thread Thread-9: Traceback (most recent call last):
File "c:\users\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 672, in urlopen chunked=chunked, File "c:\users/miniconda3\lib\site-packages\urllib3\connectionpool.py", line 376, in _make_request self._validate_conn(conn) File "c:\users\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 994, in validate_conn conn.connect() File "c:\users\miniconda3\lib\site-packages\urllib3\connection.py", line 360, in connect ssl_context=context, File "c:\users\miniconda3\lib\site-packages\urllib3\util\ssl.py", line 370, in ssl_wrap_socket return context.wrap_socket(sock, server_hostname=server_hostname) File "c:\users\miniconda3\lib\ssl.py", line 423, in wrap_socket session=session File "c:\users\miniconda3\lib\ssl.py", line 870, in _create self.do_handshake() File "c:\users\miniconda3\lib\ssl.py", line 1139, in do_handshake self._sslobj.do_handshake() ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1076)

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "c:\users\miniconda3\lib\site-packages\requests\adapters.py", line 449, in send timeout=timeout File "c:\users\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 720, in urlopen method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2] File "c:\users\miniconda3\lib\site-packages\urllib3\util\retry.py", line 436, in increment raise MaxRetryError(_pool, url, error or ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='query1.finance.yahoo.com', port=443): Max retries exceeded with url: /v8/finance/chart/AAPL?period1=946681200&period2=1293750000&interval=1d&includePrePost=False&events=div%2Csplits (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1076)')))

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "c:\users\miniconda3\lib\threading.py", line 926, in _bootstrap_inner self.run() File "c:\users\miniconda3\lib\threading.py", line 870, in run self._target(*self._args, **self.kwargs) File "c:\users\miniconda3\lib\site-packages\multitasking_init.py", line 102, in _run_via_pool return callee(*args, **kwargs) File "c:\users\miniconda3\lib\site-packages\yfinance\multi.py", line 167, in _download_one_threaded actions, period, interval, prepost, proxy, rounding) File "c:\users\miniconda3\lib\site-packages\yfinance\multi.py", line 182, in _download_one rounding=rounding, many=True) File "c:\users\miniconda3\lib\site-packages\yfinance\base.py", line 150, in history data = _requests.get(url=url, params=params, proxies=proxy) File "c:\users\miniconda3\lib\site-packages\requests\api.py", line 76, in get return request('get', url, params=params, **kwargs) File "c:\users\miniconda3\lib\site-packages\requests\api.py", line 61, in request return session.request(method=method, url=url, **kwargs) File "c:\users\miniconda3\lib\site-packages\requests\sessions.py", line 530, in request resp = self.send(prep, **send_kwargs) File "c:\users\miniconda3\lib\site-packages\requests\sessions.py", line 643, in send r = adapter.send(request, **kwargs) File "c:\users\miniconda3\lib\site-packages\requests\adapters.py", line 514, in send raise SSLError(e, request=request) requests.exceptions.SSLError: HTTPSConnectionPool(host='query1.finance.yahoo.com', port=443): Max retries exceeded with url: /v8/finance/chart/AAPL?period1=946681200&period2=1293750000&interval=1d&includePrePost=False&events=div%2Csplits (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1076)')))

此外,Spyder 似乎陷入了某种循环,我必须手动中断它。

有人可以帮我吗?

非常感谢

我相信问题来自外部来源,也许雅虎财经宕机了?我试过 运行 你的代码,对我来说效果很好。 (PyCharm, Python 3.7)

在 MacOS Big Sur 上,您需要在 Python 3.9.

中安装证书
cd /Applications/Python\ 3.9/
./Install\ Certificates.command