Maison  >  Article  >  développement back-end  >  Comment automatiser le téléchargement d'images avec Python : un guide complet

Comment automatiser le téléchargement d'images avec Python : un guide complet

WBOY
WBOYoriginal
2024-08-27 06:05:02661parcourir

How to Automate Image Downloading with Python: A Comprehensive Guide

À l’ère numérique d’aujourd’hui, la gestion et le traitement des images par programmation peuvent vous faire gagner beaucoup de temps et d’efforts. Si vous cherchez à automatiser le processus de téléchargement d’images depuis le Web, vous êtes au bon endroit. Dans cet article, nous allons découvrir un script Python qui fait exactement cela en utilisant l'API Pexels, une source populaire de photos d'archives de haute qualité.

Aperçu
Le script Python fourni ici vous permet de rechercher des images sur Pexels en fonction d'une requête, de les télécharger si elles répondent à certains critères et de les enregistrer sur votre système local. Le script utilise plusieurs bibliothèques et API puissantes, notamment les requêtes, l'API Pillow et Pexels.

Principales fonctionnalités du script
Intégration API : récupérez des images de Pexels à l'aide de leur API.
Filtrage dynamique : sélectionnez les images en fonction de leurs dimensions et de leur orientation.
Simulation de date : bien que l'API Pexels ne prenne pas directement en charge le filtrage basé sur la date, le script le simule en générant une date aléatoire.
Limitation du débit : évitez d'atteindre les limites de débit de l'API avec des délais aléatoires.

Comprendre le code

Importations et configuration

import os
import requests
from PIL import Image
from io import BytesIO
import random
import time
from datetime import datetime, timedelta

Le script commence par l'importation des bibliothèques essentielles. Voici un bref aperçu :

  • les systèmes d'exploitation et les requêtes sont utilisés respectivement pour interagir avec le système de fichiers et effectuer des requêtes HTTP.
  • PIL (Pillow) sert à gérer les opérations sur les images.
  • random, time et datetime sont utilisés pour générer des nombres aléatoires, gérer les retards et travailler avec les dates.
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'

Configurez votre clé API, l'URL de base pour Pexels et spécifiez d'autres paramètres tels que la requête de recherche, les dimensions minimales de l'image, le nombre d'images à télécharger et l'orientation de l'image.

Assurer l'existence du répertoire de sortie

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

Le script vérifie si le répertoire de sortie existe et le crée si nécessaire.

Récupération d'images

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()

Cette fonction envoie une requête à l'API Pexels pour récupérer des images en fonction de la requête de recherche et d'autres paramètres.

Téléchargement et enregistrement d'images

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

Cette fonction gère le téléchargement d'une image à partir de l'URL, la vérification de ses dimensions et de son orientation, et sa sauvegarde si elle répond aux critères.

Génération de dates aléatoires

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

Cette fonction génère une date aléatoire au cours des quatre dernières années. Bien que l'API Pexels ne fournisse pas directement de filtrage basé sur la date, cette date aléatoire simule un tel filtre.

Fonction principale

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

La fonction main() coordonne le processus de récupération, de téléchargement et de sauvegarde des images. Il gère la pagination, vérifie les images en double et impose des délais pour respecter les limites de débit de l'API.

Exécuter le script
Pour exécuter ce script, assurez-vous d'avoir remplacé API_KEY par votre clé API Pexels réelle et d'avoir ajusté les autres paramètres si nécessaire. Enregistrez le script dans un fichier .py et exécutez-le à l'aide d'un interpréteur Python. Les images qui répondent aux critères spécifiés seront enregistrées dans le répertoire de sortie.

Conclusion
L'automatisation des téléchargements d'images peut rationaliser votre flux de travail et garantir que vous disposez d'images de haute qualité. Ce script Python fournit une base solide pour de telles tâches, avec une flexibilité de personnalisation en fonction de vos besoins. Que vous travailliez sur un projet personnel ou que vous intégriez le téléchargement d'images dans une application plus grande, ce script démontre la puissance et la polyvalence de Python dans la gestion de tâches Web.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Créer un chatbot - JO PARIS 4Article suivant:Créer un chatbot - JO PARIS 4