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' 카테고리의 다른 글
| 01_Python 파이썬의 출력 (1) | 2023.12.07 |
|---|---|
| Streamlit 가이드:데이터 분석 웹앱 개발부터 실무 활용까지 (2) | 2023.12.03 |
| 인스타그램 자동화 가이드:셀레니움으로 로그인부터 댓글까지 (1) | 2023.12.03 |
| 셀레니움(Selenium) 입문 가이드:설정부터 자동 검색 실습까지 (0) | 2023.12.02 |
| Python 웹 크롤링 완벽 가이드:실전 수집부터 엑셀 데이터화까지 (0) | 2023.12.02 |