【问题标题】:Can't load website using requests in Python [duplicate]无法使用 Python 中的请求加载网站 [重复]
【发布时间】:2017-05-25 01:58:18
【问题描述】:

我正在使用 Python,我正在尝试抓取这个网站: https://online.ratb.ro/info/browsers.aspx

但我收到此错误:

Traceback(最近一次调用最后一次):
文件 “C:\Users\pinguluk\Desktop\Proiecte GIT\RATB Scraper\test2.py”,行 3、在
test = requests.get('https://online.ratb.ro/info/browsers.aspx')
文件“C:\Python27\lib\site-packages\requests\api.py”,第 72 行, 在得到
return request('get', url, params=params, **kwargs)
文件“C:\Python27\lib\site-packages\requests\api.py”,第 58 行,在请求中
return session.request(method=method, url=url, **kwargs)
文件“C:\Python27\lib\site-packages\requests\sessions.py”,第 518 行, 请求中
resp = self.send(prep, **send_kwargs)
文件“C:\Python27\lib\site-packages\requests\sessions.py”,第 639 行,在 发送
r = adapter.send(request, **kwargs)
文件“C:\Python27\lib\site-packages\requests\adapters.py”,第 512 行,在 发送
引发 SSLError(e, request=request)
requests.exceptions.SSLError: ("糟糕的握手: SysCallError(-1, '意外的 EOF')",)

已安装的模块:

['appdirs==1.4.3', 'asn1crypto==0.22.0', 'attrs==16.3.0', '自动==0.5.0','beautifulsoup4==4.5.3','cairocffi==0.8.0', 'certifi==2017.4.17', 'cffi==1.10.0', 'colorama==0.3.9', '不断==15.1.0','密码学==1.8.1','cssselect==1.0.1', 'cycler==0.10.0', 'distributedlock==1.2', 'django-annoying==0.10.3', 'django-oauth-tokens==0.6.3', 'django-taggit==0.22.1', 'django==1.11.1', 'enum34==1.1.6', 'facepy==1.0.8', 'functools32==3.2.3.post2', '期货==3.1.1', 'gevent==1.2.1', 'greenlet==0.4.12', 'grequests==0.3.0', 'html5lib==0.999999999', 'htmlparser==0.0.2', 'httplib2==0.10.3', 'idna==2.5', '增量==16.10.1', 'ipaddress==1.0.18', 'lazyme==0.0.10', 'lxml==3.7.3', 'matplotlib==2.0.2', 'mechanize==0.3.3', 'ndg-httpsclient==0.4.2', 'numpy==1.12.1', 'oauthlib==2.0.2', 'olefile==0.44', 'opencv-python==3.2.0.7', '包装==16.8', 'parsel==1.1.0', '枕头==4.0.0', 'pip==9.0.1', 'py2exe==0.6.9', 'pyandoc==0.0.1', 'pyasn1-modules==0.0.8', 'pyasn1==0.2.3', 'pycairo-gtk==1.10.0', 'pycparser==2.17', 'pygtk==2.22.0', 'pyhook==1.5.1',​​ 'pynput==1.3.2', 'pyopenssl==17.0.0', 'pyparsing==2.2.0', 'pypiwin32==219', 'pyquery==1.2.17', 'python-dateutil==2.6.0'、'python-memcached==1.58'、'pytz==2017.2'、 'pywin32==221', 'queuelib==1.4.2', 'requests-futures==0.9.7', 'requests-oauthlib==0.8.0', 'requests-toolbelt==0.8.0', 'requests==2.14.2', 'restclient==0.11.0', 'robobrowser==0.5.3', 'selenium==3.4.1', '服务身份==16.0.0', 'setuptools==35.0.2', 'simplejson==3.10.0', '六==1.10.0', 'twitter==1.17.0', 'twitterfollowbot==2.0.2', 'urllib3==1.21.1', 'w3lib==1.17.0', 'webencodings==0.5.1',​​ 'werkzeug==0.12.1', 'wheel==0.29.0', 'zope.interface==4.3.3']

谢谢。

【问题讨论】:

  • 这是与Requests failing to connect to a TLS server 类似的问题,并且将密码显式设置为 3DES 的相同解决方案应该可以工作。
  • @SteffenUllrich 非常感谢!现在它可以工作了(在 Python 3 上)。只是一个问题,如何为 Python 2 版本配置它?
  • 这对我也适用于 Python 2。但可能是您使用的 openssl 版本不支持 3DES,例如 openssl 1.1.0。检查ssl.OPENSSL_VERSION。在这种情况下,您需要使用 3DES 支持来重建它。

标签: python python-2.7 ssl python-requests


【解决方案1】:

我认为您将很难解决这个问题,因为您尝试“抓取”的服务器的配置非常糟糕 (ssllabs.com gave it a grade F) 并且可能请求甚至不支持任何密码套件,因为它们都是不安全的。可能有creating a custom HTTPAdapter 的选项,所以你可以试试。

【讨论】:

  • 感谢有关 sslabs 的提示!我设法使用python 3(我使用的是2.7)让它工作,我使用了这个方法,现在它工作了! stackoverflow.com/questions/44141655/…
  • 是的,这与我的建议类似 :) 如上所述,如果你想“正确”地做到这一点,你最终会编写自定义 HTTPAdapter...
【解决方案2】:

您可以尝试使用: requests.get(url, verify=False) 如果您不需要检查 SSL 证书的真实性。

【讨论】:

猜你喜欢
  • 2021-12-30
  • 2012-06-24
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
相关资源
最近更新 更多