Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Mengautomasikan Muat Turun Imej dengan Python: Panduan Komprehensif

Cara Mengautomasikan Muat Turun Imej dengan Python: Panduan Komprehensif

WBOY
WBOYasal
2024-08-27 06:05:02738semak imbas

How to Automate Image Downloading with Python: A Comprehensive Guide

Dalam era digital hari ini, mengurus dan memproses imej secara pemrograman boleh menjimatkan banyak masa dan usaha anda. Jika anda ingin mengautomasikan proses memuat turun imej daripada web, anda telah datang ke tempat yang betul. Dalam artikel ini, kita akan menyelami skrip Python yang melakukan perkara itu menggunakan API Pexels — sumber popular foto stok berkualiti tinggi.

Ikhtisar
Skrip Python yang disediakan di sini membolehkan anda mencari imej pada Pexels berdasarkan pertanyaan, memuat turunnya jika ia memenuhi kriteria tertentu dan menyimpannya ke sistem setempat anda. Skrip menggunakan beberapa perpustakaan dan API yang berkuasa, termasuk permintaan, Bantal dan API Pexels.

Ciri Utama Skrip
Penyepaduan API: Ambil imej daripada Pexels menggunakan API mereka.
Penapisan Dinamik: Pilih imej berdasarkan dimensi dan orientasinya.
Simulasi Tarikh: Walaupun API Pexels tidak menyokong penapisan berasaskan tarikh secara langsung, skrip mensimulasikan ini dengan menjana tarikh rawak.
Pengehadan Kadar: Elakkan daripada mencapai had kadar API dengan kelewatan rawak.

Memahami Kod

Import dan Konfigurasi

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

Skrip bermula dengan mengimport perpustakaan penting. Berikut ialah ringkasan ringkas:

  • os dan permintaan digunakan untuk berinteraksi dengan sistem fail dan membuat permintaan HTTP, masing-masing.
  • PIL (Bantal) adalah untuk mengendalikan operasi imej.
  • rawak, masa dan masa tarikh digunakan untuk menjana nombor rawak, mengurus kelewatan dan bekerja dengan tarikh.
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'

Sediakan kunci API anda, URL asas untuk Pexels dan tentukan parameter lain seperti pertanyaan carian, dimensi imej minimum, bilangan imej untuk dimuat turun dan orientasi imej.

Memastikan Direktori Output Wujud

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

Skrip menyemak sama ada direktori output wujud dan menciptanya jika perlu.

Mengambil Imej

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

Fungsi ini menghantar permintaan kepada API Pexels untuk mengambil imej berdasarkan pertanyaan carian dan parameter lain.

Memuat Turun dan Menyimpan Imej

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

Fungsi ini mengendalikan muat turun imej daripada URL, menyemak dimensi dan orientasinya serta menyimpannya jika ia memenuhi kriteria.

Menjana Tarikh Rawak

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

Fungsi ini menjana tarikh rawak dalam tempoh empat tahun yang lalu. Walaupun API Pexels tidak menyediakan penapisan berasaskan tarikh secara langsung, tarikh rawak ini mensimulasikan penapis sedemikian.

Fungsi Utama

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

Fungsi utama() menyelaraskan proses pengambilan, muat turun dan penyimpanan imej. Ia mengurus penomboran, menyemak imej pendua dan menguatkuasakan kelewatan untuk menghormati had kadar API.

Menjalankan Skrip
Untuk menjalankan skrip ini, pastikan anda telah menggantikan API_KEY dengan kunci API Pexels sebenar anda dan melaraskan parameter lain mengikut keperluan. Simpan skrip dalam fail .py dan laksanakannya menggunakan penterjemah Python. Imej yang memenuhi kriteria yang ditetapkan akan disimpan dalam direktori output.

Kesimpulan
Mengautomasikan muat turun imej boleh memperkemas aliran kerja anda dan memastikan anda mempunyai imej berkualiti tinggi yang boleh anda gunakan. Skrip Python ini menyediakan asas yang kukuh untuk tugasan sedemikian, dengan fleksibiliti untuk penyesuaian berdasarkan keperluan anda. Sama ada anda sedang mengusahakan projek peribadi atau menyepadukan muat turun imej ke dalam aplikasi yang lebih besar, skrip ini menunjukkan kuasa dan serba boleh Python dalam mengendalikan tugas berasaskan web.

Atas ialah kandungan terperinci Cara Mengautomasikan Muat Turun Imej dengan Python: Panduan Komprehensif. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Cipta bot sembang - JO PARIS 4Artikel seterusnya:Cipta bot sembang - JO PARIS 4