Sangstory

재미있는 일상 블로그

sangstory

#컴퓨터/#코딩

[Python] Selenium 가상환경으로 구글 이미지 싹다 크롤링하기

sangstory 2023. 6. 9. 20:37

selenium 라이브러리 설치

 

pip install selenium

 

Chrome Driver 설치

https://chromedriver.chromium.org/downloads

 

ChromeDriver - WebDriver for Chrome - Downloads

Current Releases If you are using Chrome version 114, please download ChromeDriver 114.0.5735.16 If you are using Chrome version 113, please download ChromeDriver 113.0.5672.63 If you are using Chrome version 112, please download ChromeDriver 112.0.5615.49

chromedriver.chromium.org

 

 

Selenium 실행

 

Terminal에 적기

python -m venv selenium

 

activate 시켜서 selenium 가상 환경에 들어가기

 

.\selenium\Scripts\activate

cd selenium 치고 cd Scripts 치고 activate하는 게 확실함

 

* activate 안될 시 

윈도우 검색창에 'Windows Powershell'을 관리자 권한으로 실행!!

관리자 권한으로 실행 안하면 안됨

실행 후

Set-ExecutionPolicy RemoteSigned 입력

그 다음 y 입력

 

다시 activate 시키면 됨

 

 

selenium 에서 webdriver 불러와서 크롬 사용하기

 

from selenium import webdriver
driver = webdriver.Chrome(executable_path='C:/DataAnalysis/Tensor/chromedriver.exe') # chromedriver 위치 넣기
driver.get("https://www.google.co.kr/imghp?hl=ko&tab=wi&authuser=0&ogbl") # 구글 이미지

 

 

 

본격적으로 구글 이미지를 크롤링하기

 

구글 이미지의 검색창에 입력하기

 

name = 'search name' # 검색어

elem = driver.find_element(By.NAME, "q") # 검색어 name 찾음
elem.send_keys(name) # 검색어를 입력함
elem.send_keys(Keys.RETURN) # 검색어 엔터키

 

구글 창 전체 화면 만들기

 

driver.maximize_window()

 

화면 스크롤 내리기

 

# scroll down
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:
                driver.find_element(By.CSS_SELECTOR, ".mye4qd").click()
            except:
                break
        last_height = new_height

 

원하는 이미지 선택하고 클릭하기

 

driver.find_elements(By.CSS_SELECTOR, ".rg_i.Q4LuWd").click()

이미지의 주소를 불러와서 다운로드 받기

 

이미지의 태그를 찾고 태그에 src 주소를 가져오기

css(class)보다 더 정확한 원본의 사진을 가져오기 위해 xpath를 사용한다.

 

driver.find_elements(
                By.XPATH, 
                '/html/body/div[2]/c-wiz/div[3]/div[2]/div[3]/div[2]/div/div[2]/div[2]/div[2]/c-wiz/div/div/div/div[3]/div[1]/a/img[2]').__getattribute__('src')

 

클릭하고 기다리는 시간 넣어주기

 

import time
time.sleep(3) # 3초 기다림

 

image url을 사용하여 이미지 다운로드하기

 

import urllib.request

urllib.request.urlretrieve(imgUrl, "searchimg.jpg")

 

해도해도 안되다가 마지막에 되긴했는데 이틀은 꼬박 열심히 한 것 같다..ㅎㅎ