Python调用图片下载API失败 如何批量保存图片到本地文件夹
Python批量下载API返回图片的修改方案
原代码存在的问题
- 循环逻辑错误:遍历返回数据时固定读取
data[0]["url"],只会重复获取第一条数据的链接,无法遍历所有图片条目 - 缺少本地目录创建、图片二进制请求、文件写入的核心下载逻辑
- 无异常处理机制,单条链接失效、请求失败时会直接中断整个程序
修改后可直接运行的代码
import os import requests # 配置项 API_URL = "https://www.habbo.es/extradata/public/users/hhes-aafb213bbe8a70df33faa0259cfb5f33/photos" SAVE_FOLDER = "./habbo_images" # 本地保存文件夹路径,可自行修改 # 加基础请求头规避反爬拦截 HEADERS = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } # 创建本地保存文件夹,已存在则不报错 os.makedirs(SAVE_FOLDER, exist_ok=True) # 请求API拿图片列表数据 resp = requests.get(API_URL, headers=HEADERS) resp.raise_for_status() # 请求API失败直接抛出异常 image_list = resp.json() for index, item in enumerate(image_list): try: img_url = item["url"] # 如果返回的是相对路径,就取消下一行的注释补全域名 # if not img_url.startswith("http"): # img_url = "https://www.habbo.es" + img_url # 请求图片二进制内容 img_resp = requests.get(img_url, headers=HEADERS, timeout=10) img_resp.raise_for_status() # 生成本地保存文件名:用序号+url末尾的文件名后缀 file_suffix = img_url.split(".")[-1].split("?")[0] # 去掉url参数拿后缀 save_path = os.path.join(SAVE_FOLDER, f"img_{index}.{file_suffix}") # 写入本地文件 with open(save_path, "wb") as f: f.write(img_resp.content) print(f"下载成功:{save_path}") except Exception as e: print(f"第{index}张图片下载失败,原因:{str(e)}") continue
代码说明
- 可直接修改
SAVE_FOLDER变量的值,自定义图片保存的本地路径 - 如果API返回的图片url是相对路径(没有
http开头),把代码里补全域名的注释打开即可 - 单张图片下载失败时会打印错误信息,不会中断剩余图片的下载任务
- 文件名默认用序号命名,如果需要用url里的原生文件名,可以自行修改文件名生成逻辑
内容的提问来源于stack exchange,提问作者illojuanitow
相关产品推荐
相关产品推荐

