>  기사  >  백엔드 개발  >  Python으로 이미지 다운로드를 자동화하는 방법: 종합 가이드

Python으로 이미지 다운로드를 자동화하는 방법: 종합 가이드

WBOY
WBOY원래의
2024-08-27 06:05:02762검색

How to Automate Image Downloading with Python: A Comprehensive Guide

오늘날의 디지털 시대에 프로그래밍 방식으로 이미지를 관리하고 처리하면 상당한 시간과 노력을 절약할 수 있습니다. 웹에서 이미지를 다운로드하는 프로세스를 자동화하려는 경우 올바른 위치에 오셨습니다. 이 기사에서는 인기 있는 고품질 스톡 사진 소스인 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

스크립트는 필수 라이브러리를 가져오는 것으로 시작됩니다. 간단한 요약은 다음과 같습니다.

  • os와 요청은 각각 파일 시스템과 상호작용하고 HTTP 요청을 하는 데 사용됩니다.
  • PIL(Pillow)은 이미지 작업을 처리하기 위한 것입니다.
  • random, time 및 datetime은 난수 생성, 지연 관리 및 날짜 작업에 사용됩니다.
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 키, Pexels용 기본 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 스크립트는 필요에 따라 사용자 정의할 수 있는 유연성과 함께 이러한 작업을 위한 견고한 기반을 제공합니다. 개인 프로젝트 작업을 하든, 이미지 다운로드를 더 큰 애플리케이션에 통합하든, 이 스크립트는 웹 기반 작업을 처리하는 데 있어 Python의 강력함과 다양성을 보여줍니다.

위 내용은 Python으로 이미지 다운로드를 자동화하는 방법: 종합 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.