빅데이터 김교수의 "AI노마드연구소" AI로 열어가는 노마드 세상!

빅데이터 김교수의 "AI노마드연구소" AI로 열어가는 노마드 세상입니다. AI 코딩작성, SNS 분석, AI업무자동화 컨설팅 0507-1419-0222

자세히보기

교육/파이썬빅데이터분석교육

셀레니엄 크룰링(구글 이미지 자동다운로드) 예제

빅데이터 김교수 2022. 5. 12. 15:31

아래 소스는 구글에서 이미지를 입력을 받아서 내 컴퓨터에 저장하는 파이썬 소스 코드입니다.

 

환경설정은 다음시간에 하도록 하고, 우선 소스 코드를 올립니다. 보고 코드 분석을 해 보시기 바랍니다.

 

아래 소스는 크롬브라우즈환경에서 자동화를 통해 큰 이미지를 자동다운받을 수 있도록 작성된 코드입니다. 

 

기본 환경 구성


크롬브라우즈 자동화를 기반으로 크룰링을 수행하기 위해 필요한 라이브러리 설치 방법은 다음과 같습니다. 

1. 셀레니엄 라이브러리 설치

 

!pip install Selenium

!apt-get update # to update ubuntu to correctly run apt install

!apt install chromium-chromedriver
#  셀레니움 확용
from selenium import webdriver

#/content/drive/MyDrive/Colab Notebooks/chromedriver.exe
 

 2. 크롬드라이브 다운로드

 

크롬드라이브 설치는 로컬에서 구동하기 위해 구글에서 "크롬드라이브 다운로드"를 검색하면 다음의 링크가 보입니다. 

https://chromedriver.chromium.org/downloads

 

ChromeDriver - WebDriver for Chrome - Downloads

Current Releases If you are using Chrome version 104, please download ChromeDriver 104.0.5112.29 If you are using Chrome version 103, please download ChromeDriver 103.0.5060.53 If you are using Chrome version 102, please download ChromeDriver 102.0.5005.61

chromedriver.chromium.org

 그중 두 번째 드라이브를 설치하면 됩니다. 컴퓨터환경에 따라 구동여부를 보시고 버전을 바꾸시면 됩니다. 

3. 압축풀기

  해당 파일을  C드라이브 루트에 압축을 풀어주세요!

 

파이참 설정(setting) 화면을 열어주세요

파이참 설정(setting) 화면

 파이참에서 selenium을 설치합니다. 이때, 상단 

셀레니움 비전에 따라 코딩이 달라 올려드립니다. 

 그럼 셀레니엄 버전별 소스를 확인해 보겠습니다. 

 우선, 셀레니엄 4.2 버전 이하에서는 

셀레니엄 4.2 이하 버전

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time #클릭후 이미지로딩 기다리기
import urllib.request
import os

driver = webdriver.Chrome("c:/chromedriver.exe")


driver.get("https://www.google.co.kr/imghp?hl=ko&ogbl") # 구글 이미지 검색창
#elem = driver.find_element_by_name("q") #구를 검색창 name으로 찾기
#elem = driver.find_element_by_class_name("gLFyf.gsfi") # 구글 검색창 클래스롤 찾기
search= input("찾을 이미지를 입력하세요!") #키워드 입력
elem = driver.find_element_by_name("q") # 4.3버전 find_element("name", "q")
elem.send_keys(search) #원하는 키워드 입력
elem.send_keys(Keys.RETURN) # 엔터



# 입력 디렉토리
directory = search + "/"
#save_path = "/Users/danuri/Desktop/images/" + search_term + "/"
#    create_folder_if_not_exists(save_path)


#  디렉토리 생성
if not os.path.exists(directory):
    os.makedirs(directory)
i=0
def createFolder(directory):
    try:
        if not os.path.exists(directory):
            os.makedirs(directory)
    except OSError:
        i+=1
        os.makedirs(directory+str(i))
        print('디렉토리 추가' +str(i))
# 저장 경로 설정



# 이미지 크룰링하기
#images = driver.find_element_by_xpath('//input[@type="image"][@src="/images/btn_next.png"]').click()
#images = driver.find_elements_by_css_selector(".rg_i.Q4LuWd")

images = driver.find_elements_by_css_selector(".rg_i.Q4LuWd")
count = 1

for image in images:
    try:
        image.click()
        time.sleep(2)
        imgUrl = driver.find_element_by_xpath("/html/body/div[2]/c-wiz/div[3]/div[2]/div[3]/div/div/div[3]/div[2]/c-wiz/div/div[1]/div[1]/div[3]/div/a/img").get_attribute('src')
        # // *[ @ id = "Sva75c"] / div / div / div[3] / div[2] / c - wiz / div / div[1] / div[1] / div[3] / div / a / img
        urllib.request.urlretrieve(imgUrl, directory+search + str(count) + ".jpg")

        print("Image saved:"+ search +"_{}.jpg".format(count))

        count += 1
    except:
        pass

driver.close

셀레니엄 4.3 이상 버전

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time  # 클릭후 이미지로딩 기다리기
import urllib.request
import os

driver = webdriver.Chrome("c:/chromedriver.exe")

driver.get("https://www.google.co.kr/imghp?hl=ko&ogbl")  # 구글 이미지 검색창
# elem = driver.find_element_by_name("q") #구를 검색창 name으로 찾기
# elem = driver.find_element_by_class_name("gLFyf.gsfi") # 구글 검색창 클래스롤 찾기
search = input("찾을 이미지를 입력하세요!")  # 키워드 입력
elem = driver.find_element("name", "q")# 4.3 수정된 부분

# 4.3버전 find_element("name", "q") # 4.3 수정된 부분
elem.send_keys(search)  # 원하는 키워드 입력
elem.send_keys(Keys.RETURN)  # 엔터

# 입력 디렉토리
directory = search + "/"
# save_path = "/Users/danuri/Desktop/images/" + search_term + "/"
#    create_folder_if_not_exists(save_path) 


#  디렉토리 생성
if not os.path.exists(directory):
    os.makedirs(directory)
i = 0


def createFolder(directory):
    try:
        if not os.path.exists(directory):
            os.makedirs(directory)
    except OSError:
        i += 1
        os.makedirs(directory + str(i))
        print('디렉토리 추가' + str(i))


# 저장 경로 설정


# 이미지 크룰링하기
 
from selenium.webdriver.common.by import By # 4.3 수정된 부분

images = driver.find_elements(By.CSS_SELECTOR, ".rg_i.Q4LuWd") # 4.3 수정된 부분
count = 1



for image in images:
    try:
        image.click()
        time.sleep(2)
        imgUrl = driver.find_element(By.XPATH,"/html/body/div[2]/c-wiz/div[3]/div[2]/div[3]/div/div/div[3]/div[2]/c-wiz/div/div[1]/div[1]/div[3]/div/a/img").get_attribute('src')
        # // *[ @ id = "Sva75c"] / div / div / div[3] / div[2] / c - wiz / div / div[1] / div[1] / div[3] / div / a / img
        urllib.request.urlretrieve(imgUrl, directory + search + str(count) + ".jpg")

        print("Image saved:" + search + "_{}.jpg".format(count))

        count += 1
    except:
        pass

driver.close

코랩환경에서 실행할 경우 소스

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time #클릭후 이미지로딩 기다리기
import urllib.request
import os

# driver = webdriver.Chrome("chromedriver.exe") # 로컬

chrome_options = webdriver.ChromeOptions()

chrome_options.add_argument('--headless') #내부 창을 띄울 수 없으므로 설정

chrome_options.add_argument('--no-sandbox')

chrome_options.add_argument('--disable-dev-shm-usage')

driver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)

driver.get("https://www.google.co.kr/imghp?hl=ko&ogbl") # 구글 이미지 검색창
#elem = driver.find_element_by_name("q") #구를 검색창 name으로 찾기
#elem = driver.find_element_by_class_name("gLFyf.gsfi") # 구글 검색창 클래스롤 찾기
search= input("찾을 이미지를 입력하세요!") #키워드 입력
elem = driver.find_element("name", "q")
elem.send_keys(search) #원하는 키워드 입력
elem.send_keys(Keys.RETURN) # 엔터


# 입력 디렉토리
directory = "/content/drive/MyDrive/Colab Notebooks"+"/"+search + "/"
#save_path = "/Users/danuri/Desktop/images/" + search_term + "/"
#    create_folder_if_not_exists(save_path)


#  디렉토리 생성
if not os.path.exists(directory):
    os.makedirs(directory)



i=0
def createFolder(directory, i=None):
    try:
        if not os.path.exists(directory):
            os.makedirs(directory)
    except OSError:
        i+=1
        os.makedirs(directory+str(i))
        print('디렉토리 추가' +str(i))
# 저장 경로 설정

from selenium.webdriver.common.by import By
images = driver.find_elements(By.CSS_SELECTOR, ".rg_i.Q4LuWd")
count = 1

for image in images:
    try:
        image.click()
        time.sleep(2)
        imgUrl = driver.find_element(By.XPATH, "/html/body/div[2]/c-wiz/div[3]/div[2]/div[3]/div/div/div[3]/div[2]/c-wiz/div/div[1]/div[1]/div[3]/div/a/img").get_attribute('src')
        urllib.request.urlretrieve(imgUrl, directory+search + str(count) + ".jpg") # 입력파일의 이름 변경

        print("Image saved:"+ search +"_{}.jpg".format(count))

        count += 1
    except:
        pass

driver.close()