[Python] selenium 를 이용한 이미지 크롤링
특정 이미지를 학습 시킬 일이 있어 이미지를 모으는 방법을 찾다가 알아낸 방법으로
이미지 크롤링이란 녀석이다.
홈페이지에 찾고 싶은 검색어를 입력하고 프로그램이 알아서 이미지들을 수집하는 것이라 보면 되겠다.
우선 참고한 곳의 블로그들 :
mjhuh263 님 블로그
그럼 코드 부터!
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import urllib.request
import os
def search_selenium(search_name, search_path, search_limit):
search_url = "https://www.google.co.kr/imghp?hl=ko"
driver = webdriver.Edge(executable_path='msedgedriver.exe')
driver.get(search_url)
elem = driver.find_element_by_name("q")
elem.send_keys(search_name)
elem.send_keys(Keys.RETURN)
SCROLL_PAUSE_TIME = 1
# Get scroll height
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
# Get each image URL and download it
count = 1
images = driver.find_elements_by_css_selector(".rg_i.Q4LuWd")
for image in images:
try:
if search_limit == count:
break
image.click()
time.sleep(3)
img_url = driver.find_element_by_class_name("n3VNCb").get_attribute("src")
urllib.request.urlretrieve(img_url, "Image/" + str(count) + ".jpg")
count = count + 1
except:
pass
# Close driver
driver.close()
if __name__ == "__main__":
search_name = input("검색하고 싶은 키워드 : ")
search_limit = int(input("원하는 이미지 수집 개수 : "))
search_path = "Your Path"
search_selenium(search_name, search_path, search_limit)
다른건 위 주소들의 글들을 참조해서 별 문제가 없었는데 이미지 주소(img_url)를 가져오는
img_url = driver.find_element_by_class_name("n3VNCb").get_attribute("src")
부분에서 계속 오류가 발생하거나 정상 동작을 하지 않았다.
그래서 이미지들 마우스 우 클릭으로 검사에 들어가서 해당 부분을 복사하여 같은 부분을
찾아내어 class 또는 xpath로 해당 이미지 주소를 가져와야한다.
이미지 종류에 따라 해당하는 함수를 사용하여야 한다.
난 바코드 이미지를 찾기위해 소스에서 find_element_by_class_name("n3VNCb")를 사용하였다.
저 부분에서 에러가 나거나 동작을 안하는 사람들은 저 부분을 구분할 수 있는것을 찾아 구현하면 문제가 해결될 것이다.
댓글
댓글 쓰기