ホームページ >バックエンド開発 >Python チュートリアル >Python で画像のダウンロードを自動化する方法: 包括的なガイド

Python で画像のダウンロードを自動化する方法: 包括的なガイド

WBOY
WBOYオリジナル
2024-08-27 06:05:02765ブラウズ

How to Automate Image Downloading with Python: A Comprehensive Guide

今日のデジタル時代では、画像をプログラムで管理および処理することで、時間と労力を大幅に節約できます。 Web から画像をダウンロードするプロセスを自動化したい場合は、ここが最適な場所です。この記事では、高品質のストック写真の人気のソースである Pexels API を使用して、まさにそれを行う Python スクリプトについて詳しく説明します。

概要
ここで提供されている Python スクリプトを使用すると、クエリに基づいて Pexels 上の画像を検索し、特定の基準を満たしている場合はダウンロードし、ローカル システムに保存できます。このスクリプトは、リクエスト、Pillow、Pexels API など、いくつかの強力なライブラリと 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 とリクエストは、それぞれファイル システムとの対話と HTTP リクエストの作成に使用されます。
  • PIL (ピロー) は画像操作を処理するためのものです。
  • 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 キー、Pexel のベース 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

この関数は、過去 4 年間内のランダムな日付を生成します。 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 スクリプトは、ニーズに基づいてカスタマイズできる柔軟性を備えた、このようなタスクの強固な基盤を提供します。個人的なプロジェクトに取り組んでいる場合でも、画像のダウンロードを大規模なアプリケーションに統合している場合でも、このスクリプトは Web ベースのタスクを処理する際の Python の能力と多用途性を示しています。

以上がPython で画像のダウンロードを自動化する方法: 包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。