【发布时间】:2021-12-01 09:03:34
【问题描述】:
这里是重现它的代码:
import pandas as pd
url = 'https://info.gesundheitsministerium.gv.at/data/timeline-faelle-bundeslaender.csv'
df = pd.read_csv(url)
它失败并返回以下回溯:
URLError: <urlopen error [SSL: DH_KEY_TOO_SMALL] dh key too small (_ssl.c:1129)>
这是一个link to check 的网址。如果您将链接嵌入 Jupyter 中的降价单元格,则可以从同一浏览器下载。
有什么想法可以让这个“正常工作”吗?
更新:
根据以下 Florin C. 提出的问题,
此解决方案解决了通过请求下载时的问题:
import requests
import urllib3
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'ALL:@SECLEVEL=1'
requests.get(url)
这只是强迫 Pandas 以某种方式做同样的事情。
我的环境:
Python implementation: CPython
Python version : 3.9.7
IPython version : 7.28.0
requests : 2.25.1
seaborn : 0.11.2
json : 2.0.9
numpy : 1.20.3
plotly : 5.4.0
matplotlib: 3.5.0
lightgbm : 3.3.1
pandas : 1.3.4
Watermark: 2.2.0
【问题讨论】:
-
看起来和这个问题一样:stackoverflow.com/questions/38015537/…
-
那是用请求下载,错误是一样的。但是 Pandas 应该能够透明地处理这个问题。
-
在 Ubuntu 18 上运行的 Jupyter 中为我工作。先下载 csv 然后用 pandas 读取它的解决方法是否可以接受?否则,我建议您检查您的 OpenSSL 版本 - 显然该网站接受弱 DH 密钥,但较新的 OpenSSL 不接受。
-
无法重现该问题..
-
这很有趣,因为我的浏览器可以正常处理它(这是一个简单的解决方法),它应该使用与 Pandas 相同的 OS OpenSSL 版本。所以我认为这是关于它如何处理 SSL 的 Pandas 问题。 requests 给出了同样的错误。