图像自动化保存工具:Python脚本开发指南

news2024/12/24 2:45:00

python_00055.png

引言

在数字化时代,图像已成为信息传递的重要媒介。无论是社交媒体、新闻网站还是电子商务平台,图像的自动化处理和保存都是提升用户体验和工作效率的关键。本文将深入探讨如何使用Python脚本实现从百度图片等搜索引擎批量下载并保存图像文件的高级应用。

技术背景

百度图片是中国最大的图片搜索引擎之一,提供了海量的图像资源。自动化地从百度图片下载图像,不仅可以用于个人收藏,还可以用于数据分析、机器学习等领域。

技术选型

实现百度图片的自动化下载,我们主要使用以下技术栈:

  • Python:一种易于学习和使用的高级编程语言。
  • requests:用于发送HTTP请求的Python库。
  • BeautifulSoup:用于解析HTML和XML文档的Python库。
  • Pillow:Python Imaging Library的一个分支,用于图像处理。
  • osshutil:Python标准库中的模块,用于文件操作。

实现过程

1. 获取图像URL

首先,我们需要从百度图片搜索结果中提取图像URL。这通常涉及到发送HTTP请求和解析HTML响应。

2. 下载图像

获取到图像URL后,我们将使用requests库下载图像。

3. 保存图像

下载完成后,使用Pillow库处理图像并保存到本地文件系统。

4. 异常处理

在整个过程中,加入异常处理机制,确保程序的健壮性。

代码实现

以下是一个简单的Python脚本示例,展示如何实现上述功能:

import os
import requests
from bs4 import BeautifulSoup
from PIL import Image
from io import BytesIO

# 代理服务器设置
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"

# 构建代理信息
proxies = {
    'http': f'http://{proxyHost}:{proxyPort}',
    'https': f'https://{proxyHost}:{proxyPort}'
}

# 由于requests无法直接处理带有认证信息的代理,
# 我们需要创建一个自定义的请求会话,并设置代理认证
session = requests.Session()
session.proxies = proxies
auth = (proxyUser, proxyPass)
session.auth = auth

def search_images(query, save_dir, num_images=10):
    # 百度图片搜索URL
    search_url = f"https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gbk&word={query}"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    }

    # 发送GET请求获取搜索结果
    response = session.get(search_url, headers=headers)  # 使用session发送请求
    soup = BeautifulSoup(response.text, 'html.parser')

    # 解析图像URL
    image_tags = soup.find_all('img', {'class': 'img'})
    image_urls = [img['src'] for img in image_tags if 'src' in img.attrs][:num_images]

    # 保存图像
    for i, url in enumerate(image_urls):
        try:
            # 下载图像
            image_response = session.get(url, headers=headers)  # 使用session发送请求
            image_response.raise_for_status()

            # 使用BytesIO创建一个可读的字节流
            image_stream = BytesIO(image_response.content)

            # 使用Pillow打开图像
            image = Image.open(image_stream)

            # 保存图像到指定目录
            image_filename = f"image_{i + 1}.jpg"
            image_path = os.path.join(save_dir, image_filename)
            image.save(image_path)
            print(f"图像已保存到:{image_path}")

        except requests.RequestException as e:
            print(f"请求错误:{e}")
        except IOError as e:
            print(f"图像处理错误:{e}")

if __name__ == "__main__":
    # 搜索关键词
    query = "风景"
    # 保存目录
    save_dir = "downloaded_images"
    # 确保保存目录存在
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)
    # 搜索并下载图像
    search_images(query, save_dir)

功能扩展

为了提高工具的实用性和用户体验,可以考虑以下功能扩展:

  1. 多关键词搜索:允许用户输入多个关键词,分别进行搜索和下载。
  2. 多页结果处理:支持翻页,获取更多搜索结果。
  3. 图像筛选:根据图像的分辨率、大小等属性进行筛选。
  4. 用户界面:开发图形用户界面,提高易用性。
  5. 定时任务:集成定时任务功能,定期自动执行搜索和下载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1995780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第36集《大佛顶首楞严经》

请大家打开讲义第八十页,子三,明鼻识界即藏性。 蕅益大师讲到,我们修学大乘佛法,有一句话是很重要的。他说:“未开圆解,不应辄论修证。”说一个菩萨你没有真正地大彻大悟开圆顿解,你没有资格谈…

K8s问题案例分析

1.worker节点宕机,请说明一下pod的驱逐流程: k8s有一个节点控制器,节点控制器在一段时间内无法和kubelet通信,那么就会给节点打上unknown 状态,并自动创建NoExecute污点,避免调度器调度新的pod到该节点。同时已经在这…

2024年6月scratch图形化编程等级考试三级真题

202406 青少年软件编程等级考试Scratch三级真题 试卷总分数:100分 考试时长:60 分钟 第 1 题 运行程序后,角色的x坐标是?( ) A:99 B:100 C:199 D:200 正…

Shell 脚本中的循环语句、函数与数组

文章目录 Shell 脚本中的循环语句、函数与数组1. for 循环1.1 for 循环语法结构1.1.1 列表循环1.1.2 不带列表循环1.1.3 类C风格的for循环 1.2 案例1.2.1 打印1-5这5个数字1.2.2 打印5次hello world1.2.3 打印abcde1.2.4 输出0-50之间的偶数 1.3 小技巧:花括号 {} 和…

力扣爆刷第171天之TOP200五连刷121-125(跳跃游戏、买卖股票、旋转链表)

力扣爆刷第171天之TOP200五连刷121-125(跳跃游戏、买卖股票、旋转链表) 文章目录 力扣爆刷第171天之TOP200五连刷121-125(跳跃游戏、买卖股票、旋转链表)一、55. 跳跃游戏二、123. 买卖股票的最佳时机 III三、排序奇升偶降链表四、…

【mysql 第四篇章】bin log 的作用是啥呢?

一、redo Log 介绍 redo log 是一种偏向物理性质的重做日志,因为他里面记录类似的这样的东西,“对那个数据也中的什么记录,做了个什么修改”。它是 InnoDB 存储引擎特有的东西。 二、bin Log 日志 bin log 叫做归档日志,它里面…

pytorch多GPU训练简明教程

1. Torch 的两种并行化模型封装 1.1 DataParallel DataParallel 是 PyTorch 提供的一种数据并行方法,用于在单台机器上的多个 GPU 上进行模型训练。它通过将输入数据划分成多个子部分(mini-batches),并将这些子部分分配给不同的 G…

软件测试面试200问(含答案+文档)

1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自己&…

旋转图像

旋转图像 思路: 第一意识是找一个数学规律,一个公式可以找到对应的位置。 唉 想不出 没啥思路 看题解了。 一看就懂了 规律就是。。。。。。:原来第 i 行第 j 列的元素 在旋转后 会在第 j 行倒数第i列。 这种题目做少了,多做…

正点原子安装buildroot构建根文件系统

1:何为 buildroot? 1.1:buildroot 简介 在《第三篇 系统移植篇》我们最后讲解了如何使用 busybox 构建文件系统,busybox 仅仅 只是帮我们构建好了一些常用的命令和文件,像 lib 库、/etc 目录下的一些文件都需要我们自…

初识Spring、SpringIOC

Spring 一、什么是Spring框架?(重要) ---对Spring的理解 记忆关键字:1.核心思想(IOC、AOP) 2.作用(解耦、简化) 3.简单描述框架组成 答:定义:Spring是一个轻量级的控制反转(IoC)和…

SpringBoot中解决文件application.properties中文注释乱码的问题

如图看到中文注释乱码 很影响代码的阅读 原因是字符编码使用了ISO-8859-1 这里演示如何在idea里面把ISO-8859-1改为UTF-8 点击右上角设置 搜索框输入UTF-8 把默认的改成UTF-8就行了 可以看到中文注释正常显示 希望能够点点赞和收藏!!

猫咪浮毛大作战!希喂、安德迈宠物空气净化器PK,实测数据大公开

宠物空气净化器作为宠物领域的新产品,凭借自身独特的功能受到铲屎官们的喜爱,越来越多的商家关注到这个市场。然而,市面上品牌逐渐增多,质量却参差不齐,一些不良商家以次充好,容易让消费者陷入消费陷阱。因…

PHYS_OPT_MODIFIED

当对原始单元执行物理优化时,PHYS_OPT_MODIFIED 更新单元的属性以反映对单元执行的优化。什么时候? 对同一单元格执行多次优化,PHYS_OPT_MODIFIED值 包含按发生顺序排列的优化列表。 架构支持 所有架构。 适用对象 PHYS_OPT_MODIFIED属性放置…

Linux嵌入式学习——C++学习(2)

一、标识符的作用域和可见性 (一)作用域 1、全局作用域 在函数外部声明的变量和函数具有全局作用域。这些变量和函数在程序的任何地方都可以被访问。 2.局部作用域 在函数内部、循环体内部或条件语句内部声明的变量具有局部作用域。这些变量只能在其…

<数据集>航拍屋顶识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:3516张 标注数量(xml文件个数):3516 标注数量(txt文件个数):3516 标注类别数:1 标注类别名称:[roof] 序号类别名称图片数框数1roof351643938 使用标注工具&#xf…

模具3D打印:成本缩减与产能提升的新引擎

近年来,3D打印技术,特别是在航空航天、汽车制造、生物医疗等前沿领域,已成为复杂结构件研发与生产的关键技术。针对广大制造企业而言,评估金属3D打印技术的经济效能,即其能否有效助力企业成本控制与产能提升&#xff0…

魔众文库系统v7.0.0版本推荐店铺功能,管理菜单逻辑优化

推荐店铺功能,管理菜单逻辑优化 [新功能] RandomImageProvider 逻辑升级重构,支持更丰富的随机图片生成 [新功能] 资源篮订单参数字段 [新功能] 首页推荐店铺功能,需要在后台 文库系统 → 文库店铺 开启推荐 [系统优化] Grid 快捷编辑请求…

Yolo-World初步使用

Yolo v8目前已经支持Yolo-World,整理一下初步使用步骤。 使用步骤 1 先下载Yolo-World的pt文件,下载地址:GitHub - AILab-CVC/YOLO-World: [CVPR 2024] Real-Time Open-Vocabulary Object Detection 官网应该是点这里(有个笑脸…

C++入门:C语言到C++的过渡

前言:C——为弥补C缺陷而生的语言 C起源于 1979 年,当时 Bjarne Stroustrup 在贝尔实验室工作,面对复杂软件开发任务,他感到 C 语言在表达能力、可维护性和可扩展性方面存在不足。 1983 年,Bjarne Stroustrup 在 C 语言…