使用Python urllib下载图片无报错但无法打开,求排查原因
问题原因及解决方案
你的问题出在对整个URL进行了不必要的URL编码,导致请求的地址实际上是错误的,服务器返回的不是图片数据,所以下载后的文件无法打开。
具体分析:
原URL https://szaniterplaza.hu/images/itempic/Grohe_Euroeco_bidé_csaptelep_32737_000_32737000.jpg 本身就是合法的URL格式,其中的下划线、点、连字符都是URL允许的合法字符。但你用 urllib.parse.quote 处理整个URL后,会把这些合法字符也转换成百分号编码(比如下划线_会变成%5F),导致服务器无法识别这个修改后的URL,返回的内容根本不是图片,自然无法打开。
修正后的代码:
只需要去掉多余的URL编码步骤,直接使用原始URL下载即可:
import urllib.request url = 'https://szaniterplaza.hu/images/itempic/Grohe_Euroeco_bidé_csaptelep_32737_000_32737000.jpg' urllib.request.urlretrieve(url, './image.jpg')
补充说明:
如果以后遇到URL中确实包含特殊字符(比如中文、空格)的情况,也不要对整个URL编码,应该只编码URL的路径部分或者查询参数部分,保留协议(https://)和域名部分不变。比如可以拆分URL后单独编码路径:
from urllib.parse import quote, urlparse, urlunparse original_url = 'https://example.com/路径含特殊字符.jpg' parsed = urlparse(original_url) encoded_path = quote(parsed.path) encoded_url = urlunparse((parsed.scheme, parsed.netloc, encoded_path, parsed.params, parsed.query, parsed.fragment)) urllib.request.urlretrieve(encoded_url, './image.jpg')
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

