정말 많은 구글링, 클론코딩, 등등 다해봤지만 안되는게 너무 많고
모르겠고, 미치겠고, 왜안되는지 못찾겠고~
하.지.만
엄 - 청난 시행착오끝에 크롤링 코드 완성
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import os
import time
import urllib.request
# webdriver_manager는 오류가 계속 발생해서 사용하지않았음.
search_keys = ["검색키워드1", "검색키워드2", "..."]
# option도 오류가 계속 발생해서 사용하지않음.
driver = webdriver.Chrome()
driver.get('https://www.google.co.kr/imghp')
driver.implicitly_wait(time_to_wait=5) #time.sleep과의 차이점을 찾아보세요
driver.maximize_window() # 창 최대화
for search_key in search_keys:
keyElement = driver.find_element(By.NAME, 'q') # 검색찾기(?)
keyElement.clear() # 검색창 비우기 (다음 키워드 검색 위해서)
keyElement.send_keys(search_key)
keyElement.send_keys(Keys.RETURN)
# 휠 내리기에 대한 두가지 방법을 찾았는데 하나는 바디를 기준으로 휠을 내리는것.
# 다른 하나는 높이를 계산해서 끝까지 내리는 방법(?)
# 나는 첫번째 방법을 채택함
# 예전버전은 find_element_by_ID ~~ 였다면
# import By를 통해서 더 쉽게 조작할수있게 되었다(고 한다)
bodyElement = driver.find_element(By.TAG_NAME, 'body')
time.sleep(1)
for i in range(30):
bodyElement.send_keys(Keys.PAGE_DOWN)
time.sleep(0.5)
# SCROLL_PAUSE_TIME = 1.0
# 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.XPATH, '//*[@id="islrg"]/div[1]/div/a[1]')
folder_name = search_key
if not os.path.isdir(folder_name):
os.mkdir(folder_name)
# 썸네일 이미지가 아니라 클릭시 나타나는 원본이미지를 크롤링하기 위한 코드
image_count = 1
for image in images:
image.click()
time.sleep(0.25)
heightImages = driver.find_element(By.CSS_SELECTOR, '#Sva75c > div.DyeYj > div > div.dFMRD > div.pxAole > div.tvh9oe.BIB1wf > c-wiz > div > div > div > div.n4hgof > div.MAtCL.PUxBg > a > img')
realImage = heightImages.get_attribute('src')
try:
urllib.request.urlretrieve(realImage, folder_name + '/' + search_key + '.' + str(image_count) + '.jpg')
image_count += 1
except:
pass
driver.back()
driver.close()
처음엔 무작정 다른사람들이 작성한 코드들을 복사해서 붙여넣고 왜 안되는지 이유도 몰랐지만
계속 비교해보고 씹뜯맛즐 하다보니 내 입맛대로 코드가 완성되었다.
정답은 없겠지만 크롤링도 실력인듯
크롤링이 끝나면 디지털 라벨링을 시작해야한다..