Python请求库SSL错误:[Errno 2]没有这样的文件或目录

Python requests Library SSL error: [Errno 2] No such file or directory

第一个问题:
我得到以下结果:

File"D:\Anaconda\Lib\site-packages
equests\api.py", line 70, in get
return request('get', url, params=params, **kwargs)

File"D:\Anaconda\Lib\site-packages
equests\api.py", line 56, in
request return session.request(method=method, url=url, **kwargs)

File"D:\Anaconda\Lib\site-packages
equests\sessions.py", line 475,
in request resp = self.send(prep, **send_kwargs)

File"D:\Anaconda\Lib\site-packages
equests\sessions.py", line 596,
in send r = adapter.send(request, **kwargs)

File"D:\Anaconda\Lib\site-packages
equests\adapters.py", line 497,
in send raise SSLError(e, request=request)

requests.exceptions.SSLError: [Errno 2] No such file or directory

这里追溯到一行代码:

1
2
3
4
5
6
7
8
9
10
11
12
import requests, os, bs4, calendar #, sys
import urllib.request

while not year>2016:
    print('Downloading page {}...'.format(url))

    res = requests.get(loginpageURL, verify='false', auth=('username', 'password')) #this is the line that doesn't work
    res = requests.get(url, verify='false') #but I have tried it without that line and this line also doesn't work
    res.raise_for_status()

    soup = bs4.BeautifulSoup(res.text)
    print(soup)

我已经广泛研究了这个问题,并得出结论,它实际上是requests / urllib3库本身的一个问题。

起初,我在这里尝试了verify ='false'修复程序。它没用。这里有人说要安装新的openSSL和certifi,它们似乎已安装在我的系统上并且是最新的。
发现这个bug在这里有很好的写作。我看不到任何解决方案。
它已在github上被识别为已知问题。

根据这个答案,当我试图将verify ='false'更改为verify ='cacert.pem'(我包含在项目目录中)时,它抛出了这个错误:
requests.exceptions.SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:645)

现在我坐在这里只是想让这一个代码片段运行 - 我试图从网站批量下载几百个zip文件 - 尽管库已知问题。我对python比较陌生,但对于网络抓取来说尤其陌生,所以这对我来说是一个陡峭的学习曲线。任何帮助,将不胜感激。我是否需要废除请求?

谢谢!


1
res = requests.get(loginpageURL, verify='false', ...

验证采用布尔值(即True或False)或路径,然后将其用作信任库的路径。 您的规范'false'是一个字符串而不是布尔值,因此它会尝试将文件false用作CA存储。 无法找到此文件,从而导致No such file or directory

要解决此问题,您必须使用verify=False,即使用布尔值。

除了禁用验证是一个坏主意,只应该进行测试或TLS提供的安全性与程序完全无关。 对于像您的情况一样的登录页面,禁用验证可能是一件坏事,因为中间的人可以轻易地嗅探用户名和密码。