selenium 기본 사용법에서 공약했던 ㅜ.ㅜ
구글 들어가서
원하는 검색어 입력
했을 때
나오는 이미지 전부 크롤링 해오는 프로그램
(예) 아이유
크롤링 프로그램이 완성되어 코드 및 결과 공유합니다.
from selenium import webdriver # 동적 사이트 수집
from webdriver_manager.chrome import ChromeDriverManager # 크롬 드라이버 설치
from selenium.webdriver.chrome.service import Service # 자동적 접근
from selenium.webdriver.chrome.options import Options # 크롬 드라이버 옵션 지정
from selenium.webdriver.common.by import By # find_element 함수 쉽게 쓰기 위함
import time # 필요 시 시간 지연 시키기 위해 사용
import urllib.request # img url 기반으로 이미지 저장 코드
import os # 이미지 저장될 폴더 만들어주는 코드
from tqdm.notebook import tqdm # 반복문 진행상황 표시하기 위함
# 이미지 검색할 keyword 입력
key = input("이미지 찾을 대상을 입력해주세요.")
# 이미지 저장할 폴더 이름 만들기
folder_name = key + time.strftime('%Y%m%d%H%M%S')
# 이미지 저장될 폴더 생성
os.mkdir(folder_name)
# 크롬 드라이버 설치
driver= webdriver.Chrome(service=Service(ChromeDriverManager().install()))
# 구글 사이트 이동
driver.get('https://www.google.com/?hl=ko')
driver.implicitly_wait(20)
# 검색창에 keyword 입력
driver.find_element(By.CLASS_NAME,"gLFyf").send_keys(key)
# 검색 버튼 클릭
driver.find_element(By.XPATH,"/html/body/div[1]/div[3]/form/div[1]/div[1]/div[4]/center/input[1]").click()
driver.implicitly_wait(20)
# 이미지 버튼 클릭
driver.find_element(By.XPATH,'//*[@id="hdtb-msb"]/div[1]/div/div[2]/a').click()
driver.implicitly_wait(20)
# 스크롤 끝까지 쭉 내리기
SCROLL_PAUSE_TIME = 1
# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
# Scroll down to bottom
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Wait to load page
time.sleep(SCROLL_PAUSE_TIME)
# Calculate new scroll height and compare with last scroll height
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
try:
time.sleep(SCROLL_PAUSE_TIME)
driver.find_element(By.CLASS_NAME,'mye4qd').click()
except: break
last_height = new_height
# 스크롤 다시 제일 위로 옮기기
# (이유는 모르겠지만 이렇게 해야 동작을 하더라구요..
# 너무 궁금해서 그런데 아시는 분 꼭 알려주세요 ㅜㅜ.)
driver.execute_script("window.scrollTo(0, 0)")
driver.implicitly_wait(20)
# 이미지 링크들
links = driver.find_elements(By.CSS_SELECTOR,'div[jsaction="cFWHmd:s370ud;"]')
# 이미지 링크들 반복문 돌려서
# 이미지를 특정 폴더에 저장하는 코드
for i, link in tqdm(enumerate(links)):
link.click()
driver.implicitly_wait(20)
imgUrl = driver.find_element(By.CSS_SELECTOR, 'img[jsaction="load:XAeZkd;"]').get_attribute("src")
urllib.request.urlretrieve(imgUrl, f"./{folder_name}/{i+1}.jpg")
# 크롤링 끝나면 크롬 드라이버 종료
driver.close()
print("크롤링 종료")
실행 결과1 : 아이유 크롤링 646개의 이미지를 6분 57초 만에 가져왔습니다.
실행 결과2 : 네즈코 크롤링 538개의 이미지를 5분 49초 만에 가져왔습니다.