# 구글이미지+큰거 다운로드
import imp
from lib2to3.pgen2 import driver
from tkinter import BROWSE
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import os
import urllib.request # url 이미지 다운로드 라이브러리
import pyautogui
# 크롬 드라이버 자동 업데이트
from webdriver_manager.chrome import ChromeDriverManager
# 브라우저 자동으로 꺼짐 방지
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
# 불필요한 에러 메시지 삭제
chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"])
# 셀레니움으로 웹브라우저 자동으로 띄우기
# ChromeDriverManager를 통해서 ChromeDriver를 설치하고, Service라는 객체를 만든 뒤, service라는 변수에 저장한다
service = Service(executable_path=ChromeDriverManager().install())
browser = webdriver.Chrome(service=service, options=chrome_options)
if not os.path.exists("파이썬/고양이"):
os.mkdir("파이썬/고양이")
url = "https://www.google.com/search?q=%EA%B3%A0%EC%96%91%EC%9D%B4&prmd=ivsn&sxsrf=ALiCzsZMlAb_fB1ieepQcfla0HAFPCSjlQ:1658683173264&source=lnms&tbm=isch&sa=X&ved=2ahUKEwjD-diqhJL5AhUE-2EKHVGcChoQ_AUoAXoECAIQAQ&biw=819&bih=862&dpr=2"
browser.implicitly_wait(10)
browser.maximize_window()
browser.get(url)
# 무한 스크롤: 동적 사이트에서 자동으로 스크롤을 가장 아래까지 내려주는 알고리즘
# 스크롤을 내리기 전 기본이 되는 높이를 설정
before_h = browser.execute_script('return window.scrollY')
while True:
# 맨 아래로 스크롤을 내린다.
browser.find_element(By.CSS_SELECTOR, 'body').send_keys(Keys.END) # 대부분의 웹페이지는 body 태그가 다 있다. 이걸 이용하고, END를 통해 맨 아래까지 스크롤 내림
# 너무 빠르면 오류가 생기니까 스크롤 사이에 페이지 로딩 시간을 주자.
time.sleep(1)
# 스크롤 후 높이
after_h = browser.execute_script('return window.scrollY')
if after_h == before_h:
break
before_h = after_h
# 이미지 태그를 추출하자
imgs = browser.find_elements(By.CSS_SELECTOR, ".rg_i.Q4LuWd")
for i, img in enumerate(imgs, 1):
img.click()
time.sleep(1)
# 큰 이미지 주소 추출
if i == 1:
target = browser.find_elements(By.CSS_SELECTOR, "img.n3VNCb")[0]
else:
target = browser.find_elements(By.CSS_SELECTOR, "img.n3VNCb")[1]
img_src = target.get_attribute("src")
# HTTP Error 403: Forbidden
opener = urllib.request.build_opener()
opener.addheaders = [("User-Agent", "Mozila/5.0")]
urllib.request.install_opener(opener)
# 이미지 다운로드
urllib.request.urlretrieve(img_src, f"파이썬/고양이/{i}.jpg")