使用Python实现调用API获取图片存储到本地的方法

2025-05-23 15:50

本文主要是介绍使用Python实现调用API获取图片存储到本地的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接...

使用Python实现调用API获取图片存储到本地

使用Python实现调用API获取图片存储到本地的方法

1、项目概述

开发一个自动化工具,用于从jsON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接调用API获取的文件完全一致。

2、核心功能

自动编程解析含嵌套结构的JSON输入文件

API请求模拟引擎

精确复现Postman请求行为

支持自动重定向跟踪

禁用自动解压缩(保留原始二进制流)

3、环境准备

# 安装依赖
pip install requests python-magic-bin==0.4.24  # Windows
pip install requests python-magic           # linux/MACOS

编辑input.json文件格式:

[
  {
    "postimage": "{...}",
    "preimage": "{...}",
    "original_image_id": "6cd6187a-a20e-f011-998a-000d3www.chinasem.cnac8927d"
  },
  // 更多数据条目...
]

4、代码实现

import json
import requests
import base64
import os
import mimetypes
# 配置参数
INPUT_JSON = "input.json"  # 输入的JSON文件路径
OUTPUT_DIR = "raw_images"   # 图片输出目录(修改目录以示区别)
API_URL = "https://prod-53.southeastasia.logic.azure.com:443/workflows/8de920a489c7490a9e2207bd538ce964/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=qO01WQl5tzdzeGpeVid43SpndovXbq4G7QO0NWcz7B8"
def determine_image_type(base64_str):
    """通过数据URI或魔术数字检测图片类型"""
    try:
        # 处理数据URI格式
        if base64_str.startswith("data:image/"):
            mime_type = base64_str.split(";")[0].split(":")[1]
            return mimetypes.guess_extension(mime_type) or ".png"
        # 通过魔术数字检测原始二进制格式
        decoded = base64.b64decode(base64_str)
        if decoded.startswith(b'\xff\xd8\xff'):
            return ".jpg"
        elif decoded.startswith(b'\x89PNG\r\n\x1a\n'):
            return ".png"
        elif decoded.startswith(b'GIF87a') or decoded.starChina编程tswith(b'GIF89a'):
            return ".gif"
        elif decoded.startswith(b'RIFF') and decoded[8:12] == b'WEBP':
            return ".webp"
    except Exception:
        pass
    return ".bin"  # 未知类型
def process_images():
    # 创建输出目录
    os.makedirs(OUTPUT_DIR, exist_ok=True)
    # 读取JSON文件
    try:
      jEAPwo  with open(INPUT_JSON, 'r', encoding='utf-8') as f:
            data = json.load(f)
    except Exception as e:
        print(f"读取JSON文件失败: {e}")
        return
    # 遍历处理每个条目
    for id编程China编程x, item in enumerate(data, 1):
        image_id = item.get("original_image_id")
        if not image_id:
            print(f"条目 {idx} 缺少original_image_id,已跳过")
            continue
        print(f"正在处理 ({idx}/{len(data)}): {image_id}")
        # 调用API
        try:
            response = requests.post(
                API_URL,
                json={"EntityGuid": image_id},
                headers={"Content-Type": "application/json"},
                timeout=60  # 延长超时时间
            )
            print(f"响应状态码: {response.status_code}")
            response.raise_for_status()
        except requests.exceptions.RequestException as e:
            print(f"API调用失败: {str(e)[:200]}")  # 显示部分错误信息
            continue
        # 处理base64数据
        try:
            base64_str = response.text
            # 检测并分割数据URI
            if "," in base64_str:
                header, payload = base64_str.split(",", 1)
                file_ext = determine_image_type(header)
                base64_str = payload
            else:
                decoded = base64.b64decode(base64_str)
                file_ext = determine_image_type(base64_str)
            # 解码base64
            image_data = base64.b64decode(base64_str)
            # 生成文件名(保留原始格式)
            output_path = os.path.join(OUTPUT_DIR, f"{image_id}{file_ext}")
            # 保存原始二进制数据
            with open(output_path, "wb") as f:
                f.write(image_data)
            print(f"原始图片已保存至: {output_path} ({len(image_data):,} bytes)")
        except Exception as e:
            print(f"处理失败: {str(e)[:200]}")
if __name__ == "__main__":
    process_images()

5、结果查看

使用Python实现调用API获取图片存储到本地的方法

补充:python 图片抓取 并保存到本地

import requests
from bs4 import BeautifulSoup
from PIL import Image
import os 
from io import BytesIO
import time
url = "http://www.yestone.com/gallery/1501754333627"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/55.0.2883.87 Safari/537.36"}
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.content, 'html.parser')
items = soup.find('div',class_='images-list')
folder_path = './photo'
# html = requests.get('http://st2.cdn.yestone.com/thumbs/2704315/vector/11688/116887226/api_thumb_450.jpg')
# html = requests.get('/_nuxt/img/4c1a746.jpg')
# print(html.content)
# image = Image.open(BytesIO(html.content))
# image.save(folder_path+"/aaa.jpg")
# print(items.find_all('img'))
# exit()
if os.path.exists(folder_path) == False:
   os.makedirs(folder_path)
for index, item in enumerate(items.find_all('img')):
    if item:
        html = requests.get(item.get('src'))
        img_name = str(index + 1) + '.jpg'
        image = Image.open(BytesIO(html.content))
        image.save(folder_path+"/"+img_name)
        print('第%d张图片下载完成' % (index + 1))
        time.sleep(1)  # 自定义延时
print('抓取完成')

到此这篇关于使用Python实现调用API获取图片存储到本地的文章就介绍到这了,更多相关python 获取图片存储到本地内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于使用Python实现调用API获取图片存储到本地的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154748

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码