You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用urllib.request()获取指定uniq_id产品的图片并展示

完整实现方案:获取指定产品图片并展示

问题说明

现有存储产品数据的字典列表,需通过urllib.request获取uniq_id为123987的产品图片并展示,初始代码存在键名错误(误用product_image_urls,实际应为image_urls),且未完成后续获取和展示逻辑。

完整实现步骤及代码

核心修正与实现逻辑

首先修正URL定位的键名错误,利用uniq_id的唯一性高效获取目标URL,再通过urllib.request拉取图片数据,最后用PIL打开并展示,同时添加异常处理避免程序崩溃:

import urllib.request
from PIL import Image
from io import BytesIO

# 产品数据字典列表
products_dicts = [
  {
    "uniq_id": "123987",
    "sku": "123",
    "name": "ABC",
    "cat": "DEF",
    "cat_tree": "A|B|C",
    "image_urls": "http://sitecom/image1.tif"
  },
  {
    "uniq_id": "987123",
    "sku": "987",
    "name": "GHI",
    "cat": "JKL",
    "cat_tree": "Z|Y|X",
    "image_urls": "http://sitecom/img/image2.tif"
  }
]

try:
    # 精准定位目标产品的图片URL
    target_image_url = next(x["image_urls"] for x in products_dicts if x["uniq_id"] == "123987")
    
    # 发送网络请求获取图片二进制数据
    with urllib.request.urlopen(target_image_url) as response:
        image_data = response.read()
    
    # 将二进制数据转为类文件对象,供PIL读取
    image = Image.open(BytesIO(image_data))
    
    # 调用系统默认工具展示图片
    image.show()
    
except StopIteration:
    print("未找到uniq_id为123987的产品")
except urllib.error.URLError as e:
    print(f"获取图片失败:{e.reason}")
except Exception as e:
    print(f"处理图片时出错:{str(e)}")

关键细节说明

  • 用next()替代列表推导式:更高效获取唯一匹配的URL,若无匹配项会抛出StopIteration,便于捕获「无目标产品」的场景
  • BytesIO的作用:将网络拉取的二进制数据转为PIL可识别的类文件对象
  • 多场景异常处理:覆盖「无匹配产品」「网络连接失败」「图片格式损坏」等常见错误,提升代码健壮性

内容的提问来源于stack exchange,提问作者PyStoel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:46:30