반응형

[참고]  https://www.youtube.com/watch?v=1b7pXC1-IbE

셀레니움, 구글 이미지 검색하여 다운로드 하기 

 

글. 수알치 오상문 

 

셀레니움을 이용하여 구글에서 특정 검색어로 검색하고 결과 이미지를 다운로드하는 예제입니다.

 

[참고] By

By.ID                        태그 id 값으로 추출
By.NAME                 태그 name 값으로 추출
By.XPATH                태그 경로로 추출
By.LINK_TEXT        링크 텍스트 값으로 추출
By.PARTIAL_LINK_TEXT  링크 텍스트의 자식 텍스트 값 추출
By.TAG_NAME        태그 이름으로 추출
By.CLASS_NAME   태그 클래스명으로 추출
##By.CSS_SELECTOR CSS 선택자로 추출

 

[소스 코드]

# 구글에서 이미지 검색하여 다운로드하기
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
import urllib.request
SCROLL_PAUSE_TIME = 1
keyword = "수알치"
driver = webdriver.Chrome()
driver.get("https://www.google.co.kr/imghp?hl=ko&tab=wi&authuser=0&ogbl")
elem = driver.find_element(By.NAME, "q")  # find_element_by_name
elem.send_keys("수알치")
elem.send_keys(Keys.RETURN)
# 현재 수직 스크롤 높이
last_height = driver.execute_script("return document.body.scrollHeight")
# 데이터 없을 때까지 반복 로딩 
while True:
    # 아래로 스크롤
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")    
    time.sleep(SCROLL_PAUSE_TIME)
    # 새로운 스크롤 높이 
    new_height = driver.execute_script("return document.body.scrollHeight")
    # 이전과 스크롤 높이가 같다면 더 이상 페이지 로딩 없음 
    if new_height == last_height:
        try:
            driver.find_element(By.CSS_SELECTOR, ".mye4qd").click()  
        except:
            break
    # 스크롤 높이를 현재 값으로 갱신     
    last_height = new_height
images = driver.find_elements(By.CSS_SELECTOR, ".rg_i.Q4LuWd")
print('찾은 이미지 개수:', len(images))
count = 0
# 이미지 리스트에서 하나씩 꺼내기 
for image in images:
    try:
        image.click() # 이미지 요소 클릭 
        time.sleep(2)                                            
        imgUrl = driver.find_element(By.XPATH, '//*[@id="Sva75c"]/div/div/div[3]/div[2]/c-wiz/div/div[1]/div[1]/div[3]/div/a/img').get_attribute("src")
        opener = urllib.request.build_opener()
        opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36')]
        urllib.request.install_opener(opener)
        urllib.request.urlretrieve(imgUrl, keyword+str(count)+".jpg")
        count = count + 1
    except Exception as e:
        print("이미지 선택 또는 저장 에러:", e)
print('다운로드한 이미지 개수:', count)
driver.quit()

 

[실행 결과]

찾은 이미지 개수: 35
다운로드한 이미지 개수: 35

 

[다운로드 파일 목록]

수알치0.jpg

...

수알치34.jpg

 

 

반응형

+ Recent posts