📕 들어가며


selenium 기본 사용법에서 공약했던 ㅜ.ㅜ

구글 들어가서 원하는 검색어 입력했을 때
나오는 이미지 전부 크롤링 해오는 프로그램
(예) 아이유

크롤링 프로그램이 완성되어 코드 및 결과 공유합니다.













📕 이미지 크롤링 프로젝트


✏️1. 전체 코드


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("크롤링 종료")













✏️2. 실행결과1

실행 결과1 : 아이유 크롤링 646개의 이미지를 6분 57초 만에 가져왔습니다.












✏️3. 실행결과2

실행 결과2 : 네즈코 크롤링 538개의 이미지를 5분 49초 만에 가져왔습니다.






profile
1.01^365

0개의 댓글