Python 3.7 - 下载图像 - Urllib.request.urlretrieve 错误

Posted

技术标签:

【中文标题】Python 3.7 - 下载图像 - Urllib.request.urlretrieve 错误【英文标题】:Python 3.7 - Download Image - Urllib.request.urlretrieve Error 【发布时间】:2019-06-25 14:09:00 【问题描述】:

我对编程非常陌生,目前在 Youtube 上学习 python('The New Boston - Python 3') 试图根据视频中显示的代码从互联网下载图像,但弹出错误。 这是代码:

import random
import urllib.request

def download_web_image(url):
    name = random.randrange(1,1000)
    full_name = str(name) + '.gif'  #str convert number to word
    urllib.request.urlretrieve(url, full_name)

download_web_image ('https://images.freeimages.com/images/large-previews/ed3/a-stormy-paradise-1-1563744.jpg')

还有错误:

 Traceback(最近一次调用最后一次):
  文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py”,第 1317 行,在 do_open
    encode_chunked=req.has_header('传输编码'))
  文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py”,第 1229 行,在请求中
    self._send_request(方法、url、正文、标头、encode_chunked)
  _send_request 中的文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py”,第 1275 行
    self.endheaders(正文,encode_chunked=encode_chunked)
  文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py”,第 1224 行,在 endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  _send_output 中的文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py”,第 1016 行
    自我发送(味精)
  文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py”,第 956 行,在发送中
    self.connect()
  文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py”,第 1392 行,在连接中
    服务器主机名=服务器主机名)
  wrap_socket 中的文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py”,第 412 行
    会话=会话
  _create 中的文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py”,第 853 行
    self.do_handshake()
  文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py”,第 1117 行,在 do_handshake 中
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:证书链中的自签名证书 (_ssl.c:1056)

在处理上述异常的过程中,又出现了一个异常:

回溯(最近一次通话最后):
  文件“/Users/isaactai/PycharmProjects/isaacfirst/IMAGEDOWNLOAD.py”,第 10 行,在
    download_web_image ('https://images.freeimages.com/images/large-previews/ed3/a-stormy-paradise-1-1563744.jpg')
  文件“/Users/isaactai/PycharmProjects/isaacfirst/IMAGEDOWNLOAD.py”,第 8 行,在 download_web_image
    urllib.request.urlretrieve(url, full_name)
  文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py”,第 247 行,在 urlretrieve
    使用 contextlib.closing(urlopen(url, data)) 作为 fp:
  文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py”,第 222 行,在 urlopen
    返回 opener.open(url, 数据, 超时)
  文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py”,第 525 行,打开
    响应 = self._open(请求,数据)
  _open 中的文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py”,第 543 行
    '_open',请求)
  _call_chain 中的文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py”,第 503 行
    结果 = 函数(*args)
  https_open 中的文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py”,第 1360 行
    上下文=self._context,check_hostname=self._check_hostname)
  文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py”,第 1319 行,在 do_open
    引发 URLError(err)
urllib.error.URLError:

进程以退出代码 1 结束

我使用的是 PyCharm 2018.3 版本

请帮帮我,谢谢

【问题讨论】:

【参考方案1】:

转到安装 Python 的文件夹。它应该有一个类似于 Python 3.x 的名称,其中 x 是您安装的任何 python 版本。现在双击“安装 Certificates.command”。之前有这个错误,堆栈上的某个人也帮助我修复了它。

我的路径如下: C:\Python33\Tools\Scripts

如果这不起作用,请使用 ssl 包的另一种解决方法:

pip install ssl

在运行代码之前执行此操作。然后将其添加到您的代码中。

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

本质上,这是使您的请求“secure”,因此 HTTPS 站点实际上会接受来自 python 的请求。在尝试访问带有 https 前缀的站点之前,您应该始终这样做。

【讨论】:

以上是关于Python 3.7 - 下载图像 - Urllib.request.urlretrieve 错误的主要内容,如果未能解决你的问题,请参考以下文章

python 3.7 识别图片

linux默认的2.7升级到3.7版本

Windows系统 - python3(3.7以上版本)部署自动化框架robot framework

为啥 Google 删除了运行 Python 3.7 的 App Engine 的 Image API?

[python图像对抗]一tensorflow环境搭建以及验证环境问题

[python图像对抗]一tensorflow环境搭建以及验证环境问题