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

Python3使用urllib.request与random实现图片下载的代码问题求助

代码问题排查
  • 传递给urlretrieve的第一个URL参数没有加引号包裹,Python中字符串必须使用单/双引号标识,直接写链接会触发语法错误
  • 自定义的image_url末尾多拼接了多余的.jpg后缀,原链接的查询参数部分不需要额外加后缀,错误的URL会导致请求404
  • image_url定义行和后面的下载代码没有换行/分号分隔,属于语法错误
  • 导入random模块时多写了括号,导入模块语法为import 模块名,不需要加括号
  • 没有实现从响应头提取正确图片后缀的逻辑,固定后缀不符合需求
  • 多余的文本模式打开图片操作:图片是二进制文件,就算要读取也需要用rb模式,本场景下载后不需要额外打开文件
  • 最后print(4)是硬编码输出,不符合输出随机文件名的需求
正确实现代码

代码同时支持两种需求:自动生成1-1000随机文件名+匹配正确后缀,也可切换为固定保存为4.jpg的模式:

import urllib.request
import random

# 测试用图片链接
image_url = "https://images.theconversation.com/files/377569/original/file-20210107-17-q20ja9.jpg?ixlib=rb-1.1.0&rect=278%2C340%2C4644%2C3098&q=45&auto=format&w=926&fit=clip"

# 方法1:生成随机文件名+自动匹配后缀实现
# 先获取响应头提取图片格式
_, headers = urllib.request.urlretrieve(image_url)
content_type = headers.get("Content-Type")
# 从content-type中提取后缀,比如image/jpeg对应jpg,image/png对应png
suffix = content_type.split("/")[-1]
# 兼容部分特殊格式,比如jpeg统一改为常用的jpg
if suffix == "jpeg":
    suffix = "jpg"
# 生成1-1000的随机文件名
file_name = f"{random.randint(1, 1000)}.{suffix}"
# 下载保存
urllib.request.urlretrieve(image_url, filename=file_name)
print(f"图片下载完成,保存为:{file_name}")

# 方法2:指定固定保存为4.jpg,注释掉方法1打开下面代码即可
# urllib.request.urlretrieve(image_url, filename="4.jpg")
# print("图片下载完成,保存为:4.jpg")

运行后图片会保存在当前脚本的同级目录下,确保网络正常即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:18:01