鱼C论坛

 找回密码
 立即注册
查看: 2147|回复: 2

[已解决]请教,爬豆瓣接口时报错requests.exceptions.SSLError

[复制链接]
发表于 2017-3-9 15:35:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
win7 python3.4
爬豆瓣电影接口 https://api.douban.com/v2/movie/in_theaters?city=%E5%B9%BF%E5%B7%9E
有时候能爬,有时候又会报错

错误信息:
  1. Traceback (most recent call last):
  2.   File "C:\Python34\requests\packages\urllib3\connectionpool.py", line 589, in urlopen
  3.     self._prepare_proxy(conn)
  4.   File "C:\Python34\requests\packages\urllib3\connectionpool.py", line 797, in _prepare_proxy
  5.     conn.connect()
  6.   File "C:\Python34\requests\packages\urllib3\connection.py", line 289, in connect
  7.     ssl_version=resolved_ssl_version)
  8.   File "C:\Python34\requests\packages\urllib3\util\ssl_.py", line 308, in ssl_wrap_socket
  9.     return context.wrap_socket(sock, server_hostname=server_hostname)
  10.   File "C:\Python34\lib\ssl.py", line 364, in wrap_socket
  11.     _context=self)
  12.   File "C:\Python34\lib\ssl.py", line 578, in __init__
  13.     self.do_handshake()
  14.   File "C:\Python34\lib\ssl.py", line 805, in do_handshake
  15.     self._sslobj.do_handshake()
  16. ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)

  17. During handling of the above exception, another exception occurred:

  18. Traceback (most recent call last):
  19.   File "C:\Python34\requests\adapters.py", line 417, in send
  20.     timeout=timeout
  21.   File "C:\Python34\requests\packages\urllib3\connectionpool.py", line 621, in urlopen
  22.     raise SSLError(e)
  23. requests.packages.urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)

  24. During handling of the above exception, another exception occurred:

  25. Traceback (most recent call last):
  26.   File "C:\Users\Administrator\Desktop\run\run_movie.py", line 17, in <module>
  27.     run()
  28.   File "C:\Users\Administrator\Desktop\run\run_movie.py", line 11, in run
  29.     movie.remark.run()
  30.   File "C:\Users\Administrator\Desktop\run\movie\remark.py", line 24, in run
  31.     web = requests.get(u)
  32.   File "C:\Python34\requests\api.py", line 70, in get
  33.     return request('get', url, params=params, **kwargs)
  34.   File "C:\Python34\requests\api.py", line 56, in request
  35.     return session.request(method=method, url=url, **kwargs)
  36.   File "C:\Python34\requests\sessions.py", line 471, in request
  37.     resp = self.send(prep, **send_kwargs)
  38.   File "C:\Python34\requests\sessions.py", line 581, in send
  39.     r = adapter.send(request, **kwargs)
  40.   File "C:\Python34\requests\adapters.py", line 491, in send
  41.     raise SSLError(e, request=request)
  42. requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)
复制代码



是不是请求的时候没有带上证书导致的呢?
网上找了一下,有一段不太懂


您也可以通过验证一个私人证书CA_BUNDLE文件的路径。您还可以设置环境变量的REQUESTS_CA_BUNDLE。

如果你设置验证设置为False,也可以忽略验证SSL证书。

>>> requests.get('https://kennethreitz.com',cert=('/path/server.crt', '/path/key'))

<Response [200]>


cert=('/path/server.crt', '/path/key')  这里的crt key,怎样才能找到本机对应豆瓣的crt和key呢 这个路径格式不太懂  请指教一下
最佳答案
2017-3-9 22:07:20
从报错看是证书验证失败,可以关闭证书验证 verify=False
对某一特定站的爬虫建议用session来写,
session只进行一次TCP连接,可以有效的爬取。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-9 16:52:02 | 显示全部楼层
这个接口应该不是公开的,采用了SSL加密方式,如果需要连接这个接口服务需要有证书文件crt和公钥key,之前只搞过客户端的SSL连接,当时还是用别人封装的代码进行的认证连接的
你没有对应的认证应该是连接会被拒绝的
豆瓣应该是拒绝爬虫的,采用这些认证拒绝你这种非法链接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-9 22:07:20 | 显示全部楼层    本楼为最佳答案   
从报错看是证书验证失败,可以关闭证书验证 verify=False
对某一特定站的爬虫建议用session来写,
session只进行一次TCP连接,可以有效的爬取。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 00:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表