0

0

如何使用 Python 自动下载图像:综合指南

PHPz

PHPz

发布时间:2024-08-26 08:00:02

|

950人浏览过

|

来源于dev.to

转载

如何使用 python 自动下载图像:综合指南

在当今的数字时代,以编程方式管理和处理图像可以为您节省大量的时间和精力。如果您希望自动化从网络下载图像的过程,那么您来对地方了。在本文中,我们将深入研究一个使用 pexels api(高质量库存照片的流行来源)来完成此操作的 python 脚本。

概述
此处提供的 python 脚本允许您根据查询在 pexels 上搜索图像,如果满足特定条件则下载它们,并将它们保存到本地系统。该脚本使用了多个强大的库和 api,包括 requests、pillow 和 pexels api。

脚本的主要特点
api 集成:使用 api 从 pexels 获取图像。
动态过滤:根据尺寸和方向选择图像。
日期模拟:虽然 pexels api 不直接支持基于日期的过滤,但脚本通过生成随机日期来模拟这一点。
速率限制:避免因随机延迟而达到 api 速率限制。

理解代码

导入和配置

import os
import requests
from pil import image
from io import bytesio
import random
import time
from datetime import datetime, timedelta

脚本首先导入必要的库。这是一个快速概述:

  • os 和 requests 分别用于与文件系统交互和发出 http 请求。
  • pil(pillow)用于处理图像操作。
  • random、time 和 datetime 用于生成随机数、管理延迟和处理日期。
api_key = '...'  # replace with your actual pexels api key
base_url = 'https://api.pexels.com/v1/search'
output_dir = 'output'
search_query = 'subaru forester'
min_width = 1080
min_height = 1920
num_images = 16
orientation = 'vertical'

设置您的 api 密钥、pexels 的基本 url,并指定其他参数,例如搜索查询、最小图像尺寸、要下载的图像数量和图像方向。

立即学习Python免费学习笔记(深入)”;

确保输出目录存在

if not os.path.exists(output_dir):
    os.makedirs(output_dir)

脚本检查输出目录是否存在,并在必要时创建它。

获取图像

Cutout.Pro
Cutout.Pro

AI驱动的视觉设计平台

下载
def get_images(query, page=1, per_page=15):
    params = {
        'query': query,
        'page': page,
        'per_page': per_page
    }
    response = requests.get(base_url, headers=headers, params=params)
    response.raise_for_status()
    return response.json()

此函数向 pexels api 发送请求,以根据搜索查询和其他参数获取图像。

下载和保存图像

def download_and_save_image(url, filename):
    response = requests.get(url)
    response.raise_for_status()
    img = image.open(bytesio(response.content))
    if img.width >= min_width and img.height >= min_height:
        if orientation == 'vertical' and (img.height / img.width > 1.4):
            img.save(filename)
            print(f'saved {filename}')
            return 1
        elif orientation == 'horizontal' and (img.width / img.height > 1.4):
            img.save(filename)
            print(f'saved {filename}')
            return 1
    return 0

此函数处理从 url 下载图像,检查其尺寸和方向,如果符合条件则保存它。

生成随机日期

def generate_random_date():
    end_date = datetime.now()
    start_date = end_date - timedelta(days=4*365)
    random_date = start_date + timedelta(days=random.randint(0, 4*365))
    return random_date

该函数生成过去四年内的随机日期。虽然 pexels api 不直接提供基于日期的过滤,但这个随机日期模拟了这样的过滤器。

主要功能

def main():
    images_downloaded = 0
    page = 1
    seen_images = set()
    target_date = generate_random_date()
    print(f"Target date for filtering: {target_date.strftime('%Y-%m-%d')}")


while images_downloaded < NUM_IMAGES:
        data = get_images(SEARCH_QUERY, page)
        photos = data.get('photos', [])
        if not photos:
            print('No more photos found.')
            break
        random.shuffle(photos)  # Shuffle to get a more random selection
        for photo in photos:
            if images_downloaded >= NUM_IMAGES:
                break
            image_url = photo['src']['original']
            photo_date = datetime.strptime(photo['created_at'], '%Y-%m-%dT%H:%M:%S%z') if 'created_at' in photo else datetime.now()
            if photo_date > target_date and image_url not in seen_images:
                filename = os.path.join(OUTPUT_DIR, f'image_{images_downloaded + 1}.jpg')
                if download_and_save_image(image_url, filename):
                    images_downloaded += 1
                    seen_images.add(image_url)
        page += 1
        time.sleep(random.uniform(1, 2))  # Sleep to avoid hitting API rate limits

main() 函数协调图像获取、下载和保存过程。它管理分页、检查重复图像并强制延迟以遵守 api 的速率限制。

运行脚本
要运行此脚本,请确保您已将 api_key 替换为实际的 pexels api 密钥,并根据需要调整其他参数。将脚本保存在 .py 文件中并使用 python 解释器执行它。符合指定条件的图像将保存在输出目录中。

结论
自动图像下载可以简化您的工作流程并确保您拥有高质量的图像。该 python 脚本为此类任务提供了坚实的基础,并且可以根据您的需求灵活地进行自定义。无论您是在处理个人项目还是将图像下载集成到更大的应用程序中,此脚本都展示了 python 在处理基于 web 的任务方面的强大功能和多功能性。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

498

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

453

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

3634

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2927

2024.08.16

PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

67

2025.12.13

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

88

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

272

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

59

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号