Heim  >  Artikel  >  Backend-Entwicklung  >  So automatisieren Sie das Herunterladen von Bildern mit Python: Eine umfassende Anleitung

So automatisieren Sie das Herunterladen von Bildern mit Python: Eine umfassende Anleitung

WBOY
WBOYOriginal
2024-08-27 06:05:02661Durchsuche

How to Automate Image Downloading with Python: A Comprehensive Guide

Im heutigen digitalen Zeitalter können Sie durch die programmgesteuerte Verwaltung und Verarbeitung von Bildern viel Zeit und Mühe sparen. Wenn Sie den Prozess des Herunterladens von Bildern aus dem Internet automatisieren möchten, sind Sie hier genau richtig. In diesem Artikel beschäftigen wir uns mit einem Python-Skript, das genau das mithilfe der Pexels-API tut – einer beliebten Quelle für hochwertige Stockfotos.

Übersicht
Mit dem hier bereitgestellten Python-Skript können Sie anhand einer Abfrage nach Bildern auf Pexels suchen, diese herunterladen, wenn sie bestimmte Kriterien erfüllen, und sie auf Ihrem lokalen System speichern. Das Skript verwendet mehrere leistungsstarke Bibliotheken und APIs, darunter Requests, Pillow und Pexels API.

Hauptmerkmale des Skripts
API-Integration: Bilder von Pexels über deren API abrufen.
Dynamische Filterung: Wählen Sie Bilder basierend auf ihren Abmessungen und Ausrichtung aus.
Datumssimulation: Obwohl die Pexels-API die datumsbasierte Filterung nicht direkt unterstützt, simuliert das Skript dies, indem es ein zufälliges Datum generiert.
Ratenbegrenzung: Vermeiden Sie das Erreichen von API-Ratenlimits durch zufällige Verzögerungen.

Den Kodex verstehen

Importe und Konfiguration

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

Das Skript beginnt mit dem Importieren wichtiger Bibliotheken. Hier ist ein kurzer Überblick:

  • Betriebssysteme und Anfragen werden für die Interaktion mit dem Dateisystem bzw. für das Senden von HTTP-Anfragen verwendet.
  • PIL (Pillow) dient zur Handhabung von Bildoperationen.
  • Random, Time und Datetime werden zum Generieren von Zufallszahlen, zum Verwalten von Verzögerungen und zum Arbeiten mit Datumsangaben verwendet.
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'

Richten Sie Ihren API-Schlüssel und die Basis-URL für Pexels ein und geben Sie andere Parameter wie Suchabfrage, Mindestbildabmessungen, Anzahl der herunterzuladenden Bilder und Bildausrichtung an.

Sicherstellen, dass das Ausgabeverzeichnis vorhanden ist

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

Das Skript prüft, ob das Ausgabeverzeichnis existiert und erstellt es bei Bedarf.

Bilder abrufen

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

Diese Funktion sendet eine Anfrage an die Pexels-API, um Bilder basierend auf der Suchanfrage und anderen Parametern abzurufen.

Bilder herunterladen und speichern

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

Diese Funktion übernimmt das Herunterladen eines Bildes von der URL, prüft seine Abmessungen und Ausrichtung und speichert es, wenn es die Kriterien erfüllt.

Zufällige Daten generieren

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

Diese Funktion generiert ein zufälliges Datum innerhalb der letzten vier Jahre. Während die Pexels-API keine direkte datumsbasierte Filterung bietet, simuliert dieses zufällige Datum einen solchen Filter.

Hauptfunktion

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

Die Funktion main() koordiniert den Prozess zum Abrufen, Herunterladen und Speichern von Bildern. Es verwaltet die Paginierung, prüft auf doppelte Bilder und erzwingt Verzögerungen, um die Ratenbeschränkungen der API einzuhalten.

Ausführen des Skripts
Um dieses Skript auszuführen, stellen Sie sicher, dass Sie API_KEY durch Ihren tatsächlichen Pexels-API-Schlüssel ersetzt und andere Parameter nach Bedarf angepasst haben. Speichern Sie das Skript in einer .py-Datei und führen Sie es mit einem Python-Interpreter aus. Die Bilder, die die angegebenen Kriterien erfüllen, werden im Ausgabeverzeichnis gespeichert.

Fazit
Durch die Automatisierung von Bilddownloads können Sie Ihren Arbeitsablauf optimieren und sicherstellen, dass Ihnen qualitativ hochwertige Bilder zur Verfügung stehen. Dieses Python-Skript bietet eine solide Grundlage für solche Aufgaben und bietet Flexibilität für die Anpassung an Ihre Bedürfnisse. Unabhängig davon, ob Sie an einem persönlichen Projekt arbeiten oder das Herunterladen von Bildern in eine größere Anwendung integrieren, demonstriert dieses Skript die Leistungsfähigkeit und Vielseitigkeit von Python bei der Bewältigung webbasierter Aufgaben.

Das obige ist der detaillierte Inhalt vonSo automatisieren Sie das Herunterladen von Bildern mit Python: Eine umfassende Anleitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn