当前位置: 首页 > 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.lryc.cn/news/578944.html

相关文章:

  • 买卖股票的最佳时机--js 算法
  • Nginx、Spring Cloud Gateway 与 Higress 的应用场景及核心区别
  • 从0到1:我的飞算JavaAI实战之旅,效率飙升10倍不是梦!
  • 【Rancher Server + Kubernets】- Nginx-ingress日志持久化至宿主机
  • uniapp项目中node_modules\sass\sass.dart.js的体积过大怎么处理
  • LeetCode[617]合并二叉树
  • 音频调试经验总结
  • 单链表和双向链表
  • Knife4j+Axios+Redis:前后端分离架构下的 API 管理与会话方案
  • 将文件使用base64存入数据库并在微信小程序中实现文件下载
  • 修复手机液晶面板显性横向线性不良定位及相关液晶线路激光修复原理
  • 【安全工具】SQLMap 使用详解:从基础到高级技巧
  • 【深度学习机器学习】Epoch 在深度学习实战中的合理设置指南
  • cmake find_package
  • Minio安装配置,桶权限设置,nginx代理 https minio
  • JAVA学习-练习试用Java实现“人脸识别:使用OpenCV+Java实现人脸检测与识别”
  • 【论文阅读】DeepEyes: Incentivizing “Thinking with Images” via Reinforcement Learning
  • STM32之光敏电阻传感器模块
  • uniapp 滚动tab
  • WPF控件大全:核心属性详解
  • Android-EDLA 解决 GtsMediaRouterTestCases 存在 fail
  • 移动公司Linux运维工程师招聘笔试题
  • 深入解析外观模式(Facade Pattern):简化复杂系统的优雅设计
  • STM32F103RET6 介绍
  • 机器学习:集成学习方法之随机森林(Random Forest)
  • 基于多种机器学习的江苏省二手房价格预测系统的设计与实现【城市全国可换】
  • 【QT】ROS2 Humble联合使用QT教程
  • Qt designer坑-布局内子控件的顺序错乱
  • ABAP+记录一个BDC的BUG修改过程
  • transformers==4.42.0会有一个BUG