ホームページ >バックエンド開発 >Python チュートリアル >Python で画像のダウンロードを自動化する方法: 包括的なガイド
今日のデジタル時代では、画像をプログラムで管理および処理することで、時間と労力を大幅に節約できます。 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
スクリプトは、必須ライブラリのインポートから始まります。以下に簡単にまとめます:
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 サイトの他の関連記事を参照してください。