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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:57:23