当前位置: 首页 > news >正文

Python数据解析与图片下载工具:从JSON到本地文件的自动化流程

Python数据解析与图片下载工具:从JSON到本地文件的自动化流程

在日常开发和数据处理中,我们经常需要从JSON数据中提取信息,并根据其中的URL下载相关资源。本文将介绍一个实用的Python工具,它可以解析JSON数据,提取关键信息,并批量下载图片资源,适用于数据采集、内容管理和自动化测试等场景。

一、工具功能概述

这个多功能工具包含三个核心模块:

  1. JSON数据解析:从输入的JSON字符串中提取指定变量的值
  2. 数据格式化展示:以易读的方式展示提取的变量和数据
  3. 图片批量下载:根据提取的URL列表下载图片并保存到本地

通过这三个模块的组合,我们可以轻松实现从数据提取到资源下载的自动化流程。

二、完整代码实现
# -*- coding: utf-8 -*-
import json
import os
import requests
from urllib.parse import urlparse
from tqdm import tqdmdef parse_and_extract_data(input_data):"""解析输入的JSON数据并提取各个变量的值参数:input_data -- 包含JSON数据的字符串返回:包含所有变量及其对应值的字典"""# 将输入的JSON字符串解析为Python字典data_dict = json.loads(input_data)# 提取各个变量的值result = {"biaoqians": data_dict.get("biaoqians", "未找到该变量"),# "数据(data)": data_dict.get("data", "未找到该变量"),"file": data_dict.get("file", "未找到该变量"),"num": data_dict.get("num", "未找到该变量"),# "OCR文字(ocrword)": data_dict.get("ocrword", "未找到该变量"),"output": data_dict.get("output", "未找到该变量"),"pdf_pics": data_dict.get("pdf_pics", "未找到该变量"),"title": data_dict.get("title", "未找到该变量"),"write_status": data_dict.get("write_status", "未找到该变量"),"zhengwen": data_dict.get("zhengwen", "未找到该变量")}return resultdef print_variable_values(variable_dict):"""格式化打印各个变量及其对应的值"""for variable_name, value in variable_dict.items():print(f"\n{variable_name}:\n")# 针对不同类型的数据采用不同的打印格式if isinstance(value, list) and len(value) > 0 and isinstance(value[0], dict):# 复杂列表数据(如data)print(json.dumps(value, ensure_ascii=False, indent=4))elif isinstance(value, list) and len(value) > 0 and isinstance(value[0], str) and len(value[0]) > 100:# 长字符串列表(如ocrword)for i, item in enumerate(value, 1):print(f"第{i}项:\n{item}\n")elif isinstance(value, list):# 普通列表数据print(json.dumps(value, ensure_ascii=False, indent=4))else:# 其他类型数据print(value)def download_images(url_list, save_dir='./downloaded_images', overwrite=False):"""从URL列表下载图片并保存到指定目录参数:url_list (list): 图片URL列表save_dir (str): 保存图片的目录路径overwrite (bool): 是否覆盖已存在的文件"""# 创建保存目录os.makedirs(save_dir, exist_ok=True)# 过滤无效URLvalid_urls = [url for url in url_list if url.strip()]if not valid_urls:print("没有找到有效的图片URL")returnprint(f"开始下载 {len(valid_urls)} 张图片到目录: {save_dir}")# 遍历URL列表并下载图片for url in tqdm(valid_urls, desc="下载进度"):try:# 解析URL获取文件名parsed_url = urlparse(url)filename = os.path.basename(parsed_url.path)# 如果文件名无效,生成一个基于URL的哈希文件名if not filename or '.' not in filename:filename = f"image_{hash(url) & 0xfffffff:08x}.jpg"# 构建完整的保存路径save_path = os.path.join(save_dir, filename)# 检查文件是否已存在if os.path.exists(save_path) and not overwrite:tqdm.write(f"跳过已存在的文件: {filename}")continue# 发送HTTP请求获取图片response = requests.get(url, stream=True, timeout=10)# 检查请求是否成功if response.status_code == 200:# 保存图片到文件with open(save_path, 'wb') as f:for chunk in response.iter_content(1024):f.write(chunk)tqdm.write(f"成功下载: {filename}")else:tqdm.write(f"下载失败: {url} (状态码: {response.status_code})")except Exception as e:tqdm.write(f"下载出错: {url} (错误: {str(e)})")print(f"下载完成! 图片已保存到: {save_dir}")# 使用示例
if __name__ == "__main__":# 从用户输入获取JSON数据input_data = input('请输入JSON数据: ')print(f"接收到的JSON数据:\n{input_data}")# 解析数据并提取变量variable_dict = parse_and_extract_data(input_data)# 打印各个变量及其对应的值print_variable_values(variable_dict)# 提取图片URL列表并下载image_urls = variable_dict['pdf_pics']if isinstance(image_urls, list) and len(image_urls) > 0:download_images(image_urls, save_dir='./downloaded_images')else:print("未找到有效的图片URL列表")
三、核心功能解析
  1. JSON数据解析模块

    • parse_and_extract_data函数通过json.loads将JSON字符串转换为Python字典
    • 使用.get()方法安全地提取指定键的值,避免KeyError异常
    • 可根据需求扩展提取的变量列表,灵活适应不同的数据结构
  2. 数据格式化展示模块

    • print_variable_values函数根据数据类型采用不同的展示方式
    • 对于复杂列表数据(如嵌套字典),使用json.dumps配合缩进参数使其更易读
    • 对于长文本数据,分段展示并添加序号,提高可读性
  3. 图片批量下载模块

    • 支持从URL列表批量下载图片,自动创建保存目录
    • 智能处理URL解析和文件名生成,确保文件命名规范
    • 使用tqdm库提供直观的下载进度显示,支持断点续传(通过overwrite参数控制)
    • 完善的异常处理机制,确保单个URL下载失败不会影响整体流程
四、使用方法与示例
  1. 安装依赖

    pip install requests tqdm
    
  2. 基本使用流程

    python json_parser_and_downloader.py
    
    • 程序会提示输入JSON数据
    • 输入后,程序将解析数据并展示提取的变量
    • 如果JSON中包含pdf_pics字段且为有效URL列表,程序将自动下载图片
  3. 示例JSON输入

    {"title": "示例文档","biaoqians": ["文档", "示例"],"pdf_pics": ["https://example.com/image1.jpg","https://example.com/image2.jpg"],"write_status": "已完成"
    }
    
五、进阶应用场景
  1. 数据采集与整理

    • 结合爬虫获取JSON格式的API响应
    • 自动提取并下载其中的图片资源
    • 用于构建图片数据集或内容管理系统
  2. 批量处理PDF中的图片

    • 结合PDF解析库(如PyMuPDF)提取PDF中的图片URL
    • 通过本工具批量下载这些图片
  3. 自动化测试

    • 在测试环境中,自动下载测试用例需要的图片资源
    • 确保测试环境的一致性和可重复性
六、代码优化方向
  1. 增加配置文件支持

    # 配置文件示例 config.json
    {"save_dir": "./my_images","overwrite": false,"timeout": 30,"extracted_fields": ["biaoqians", "pdf_pics", "title"]
    }
    
  2. 多线程下载加速

    from concurrent.futures import ThreadPoolExecutordef download_image(url, save_dir):# 单个图片下载逻辑...# 多线程下载
    with ThreadPoolExecutor(max_workers=5) as executor:futures = [executor.submit(download_image, url, save_dir) for url in valid_urls]for future in tqdm.as_completed(futures, total=len(valid_urls)):future.result()
    
  3. 增加图片处理功能

    • 下载后自动调整图片尺寸
    • 添加水印或其他特效
    • 格式转换(如JPG→PNG)

通过这个多功能工具,我们可以轻松实现从JSON数据解析到图片资源下载的自动化流程。代码设计模块化,易于扩展,可以根据实际需求添加更多功能,为数据处理和资源管理提供便利。无论是个人项目还是企业级应用,都能从中受益。

http://www.dtcms.com/a/264446.html

相关文章:

  • springboot使用redisTemplate的方法,详细说明
  • 以智能楼宇自动化控制系统为基石,构筑绿色建筑节能增效新标杆
  • cmake笔记
  • 【分明集合】特征函数、关系与运算
  • 【格与代数系统】格与哈斯图
  • 笨方法学python-习题12
  • Sql注入中万能密码order by联合查询利用
  • 应急响应类题练习——玄机第四章 windows实战-emlog
  • Foundation 5 安装使用教程
  • SQL SELECT 语句
  • 在线租房平台源码+springboot+vue3(前后端分离)
  • 应急响应类题练习——玄机第五章 Windows 实战-evtx 文件分析
  • 6.Docker部署ES+kibana
  • Vite 7.0 与 Vue 3.5:前端开发的性能革命与功能升级
  • 【环境配置】Neo4j Community Windows 安装教程
  • HDMI 2.1 FRL协议的流控机制:切片传输(Slicing)和GAP插入
  • LL面试题11
  • 10授权
  • Vue 3 中的 `h` 函数详解
  • Rust征服字节跳动:高并发服务器实战
  • 飞算智造JavaAI:智能编程革命——AI重构Java开发新范式
  • Windows10/11 轻度优化 纯净版,12个版本!
  • 深度学习常见的激活函数
  • 【Python基础】11 Python深度学习生态系统全景解析:从基础框架到专业应用的技术深度剖析(超长版,附多个代码及结果)
  • 【深度学习1】ModernBert学习
  • RNN和LSTM
  • [面试] 手写题-防抖,节流
  • Python应用指南:利用高德地图API获取公交+地铁可达圈(三)
  • 菜谱大全——字符串处理艺术:从文本解析到高效搜索 [特殊字符][特殊字符]
  • 锂离子电池均衡拓扑综述