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:
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!