在当今的数字时代,以编程方式管理和处理图像可以节省您大量的时间和精力。如果您希望自动化从网络下载图像的过程,那么您来对地方了。在本文中,我们将深入研究一个 Python 脚本,该脚本使用 Pexels API(高质量库存照片的流行来源)来执行此操作。
概述
此处提供的 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
脚本首先导入必要的库。这是一个快速概述:
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,并指定其他参数,例如搜索查询、最小图像尺寸、要下载的图像数量和图像方向。
确保输出目录存在
if not os.path.exists(OUTPUT_DIR): os.makedirs(OUTPUT_DIR)
脚本检查输出目录是否存在并在必要时创建它。
获取图像
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 的任务方面的强大功能和多功能性。
以上是如何使用 Python 自动下载图像:综合指南的详细内容。更多信息请关注PHP中文网其他相关文章!