본문 바로가기
기초 및 언어/▶ python

Python 셀레니움 가이드:픽사베이 이미지 대량 수집 및 자동 저장

by 류딩이 2023. 12. 3.
Web Crawling & Automation 2026

Python 셀레니움 가이드:
픽사베이 이미지 대량 수집 및 자동 저장

픽사베이(Pixabay)란?

픽사베이(Pixabay)는 저작권이 없는 고품질의 이미지, 비디오, 음악 등을 공유하는 세계적인 스톡 콘텐츠 커뮤니티입니다. 전 세계 작가들이 기부한 수백만 개의 자료를 보유하고 있어 크롤링 학습 및 데이터 사이언스용 데이터셋 수집에 매우 유용한 사이트입니다.

주요 특징 및 라이선스

  • 무료 사용: 대부분의 콘텐츠를 상업적 목적으로도 무료로 사용할 수 있습니다.
  • 출처 표기 불필요: 작가에 대한 별도의 출처를 밝히지 않아도 됩니다. (권장사항이나 의무는 아님)
  • 다양한 포맷: 사진뿐만 아니라 벡터 그래픽, 일러스트레이션, GIF 등을 지원합니다.

단일 이미지 수집 및 로컬 저장

셀레니움을 사용하여 웹 페이지를 열고, 특정 XPath를 이용해 단일 이미지의 URL을 추출한 뒤 로컬 파일로 저장하는 기초 단계입니다.

 
 
 
import chromedriver_autoinstaller
from selenium import webdriver
from urllib.request import Request, urlopen
import ssl

# SSL 인증 오류 방지
ssl._create_default_https_context = ssl._create_unverified_context

driver = webdriver.Chrome()
url = 'https://pixabay.com/ko/images/search/음식/'
driver.get(url)

# 이미지 URL 추출 및 저장
image_xpath = '/html/body/div[1]/div[1]/div/div[2]/div[3]/div/div/div[1]/div[1]/div/a/img'
image_url = driver.find_element('xpath', image_xpath).get_attribute('src')

# 파일 저장
image_byte = Request(image_url, headers={'User-Agent':'Mozilla/5.0'})
with open('pic.jpg', 'wb') as f:
    f.write(urlopen(image_byte).read())

여러 이미지 동시 수집 로직

특정 영역 내의 모든 이미지를 리스트화하여 반복문을 통해 한 번에 내려받는 효율적인 방법입니다.

 
 
 
from selenium.webdriver.common.by import By

image_area = driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/div/div[2]/div[3]/div')
image_elements = image_area.find_elements(By.TAG_NAME, 'img')

image_urls = []
for el in image_elements:
    url = el.get_attribute('data-lazy-src') or el.get_attribute('src')
    image_urls.append(url)

for i, img_url in enumerate(image_urls):
    req = Request(img_url, headers={'User-Agent':'Mozilla/5.0'})
    with open(f'pic{i}.jpg', 'wb') as f:
        f.write(urlopen(req).read())

함수 리팩토링 및 다중 페이지 수집

키워드와 페이지 수를 매개변수로 받아 자동 폴더 생성 및 저장을 수행하는 최종 자동화 함수입니다.

 
 
 
import os

def crawl_and_save_image(keyword, pages):
    if not os.path.exists(keyword):
        os.mkdir(keyword)
        
    for p in range(1, pages + 1):
        target_url = f'https://pixabay.com/ko/images/search/{keyword}/?pagi={p}'
        driver.get(target_url)
        # 이미지 수집 및 저장 로직 수행...

crawl_and_save_image('음식', 2)

주의사항: 크롤링 시 웹사이트의 robots.txt 규약을 준수하고, 과도한 요청으로 서버에 부하를 주지 않도록 time.sleep()을 적절히 사용하세요.

기초 및 언어 > python

Copyright 2026. All Rights Reserved.

TOP