프로그래밍 실습/Python

파이썬 셀레니움 이미지 크롤링 코드 총 정리 (python selenium image download code)

봄 비 2023. 6. 8. 01:06

 

2023.06.08년에 작성된 코드로 현재 지원하지 않는 함수 등이 포함될 수 있습니다.

 

이 코드는 Naver에서 '춘식이'를 검색하고, 그 이미지를 다운로드 합니다.

 

#모듈 불러오기
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import urllib.request
import urllib

# 브라우저 꺼짐 방지 옵션
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

# 크롬 브라우저 열기
driver = webdriver.Chrome(options=chrome_options)

# 윈도우 최대화
driver.maximize_window()

#네이버 검색으로 가기
driver.get("https://www.naver.com/")

#검색창 선택하기
elem = driver.find_element(By.NAME, "query")

#춘식이 검색하고 엔터키 누르기
elem.send_keys("춘식이")
elem.send_keys(Keys.RETURN)

#이미지탭 누르기
imgtap = driver.find_element(By.XPATH, '/html/body/div[3]/div[1]/div/div[2]/div[1]/div/ul/li[2]/a')
imgtap.click()

#끝까지 스크롤 내리기
while True:
    # 현재 화면의 높이 저장
    last_height = driver.execute_script("return document.body.scrollHeight")

    # 스크롤을 끝까지 내리는 JavaScript 실행
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    # 스크롤 동작 후 로딩 대기
    time.sleep(2)

    # 새로운 높이 계산
    new_height = driver.execute_script("return document.body.scrollHeight")

    # 더 이상 스크롤이 되지 않으면 반복 종료
    if new_height == last_height:
        break

# 이미지 요소가 나올 때 까지 대기할 시간(초)
wait_time = 10

# WebDriverWait 객체 생성
wait = WebDriverWait(driver, wait_time)

# 이미지 요소가 나타날 때까지 대기
images = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "._image._listImage")))

# 이미지가 존재하는 경우
if len(images) > 0:
    #images 리스트의 각 요소에 대해 반복문을 실행
    for i, image in enumerate(images):
        #i가 10보다 크거나 같으면 반복문을 종료
        if i >= 10:
            break
        #첫번째 이미지를 클릭하고, 2초동안 대기
        image.click()
        time.sleep(2)
        #큰 이미지의  XPath로 요소를 찾고, 해당 요소의 "src" 속성 값을 가져오기
        imgUrl = driver.find_element(By.XPATH, '/html/body/div[3]/div[2]/div/div[1]/section[2]/div/div[2]/div/div/div[1]/div[1]/div/div/div[1]/div[1]/img').get_attribute("src")
        #urllib.request.urlretrieve() 함수를 사용하여 imgUrl에 지정된 이미지 URL을 다운로드하고, "image{i+1}.jpg"라는 이름으로 저장
        urllib.request.urlretrieve(imgUrl, f"image{i+1}.jpg")

#브라우저 닫기
driver.close()

 

 

코드 작동 영상

코드 작동영상도 함께 첨부합니다.

 

코드는 개발환경과 시기에 따라서 구동이 안될 수 있습니다.
주석을 달아놓았지만 더 자세한 설명을 원하시면 블로그의 시리즈를 확인해주시면 되겠습니다.