본문 바로가기
DataScience/Crawling

Crawling 구글자동검색이미지다운

by leopard4 2023. 3. 6.

1.필요한 라이브러리를 그냥많이 불러온다

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import pandas as pd
import numpy as np
import csv
import os
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.alert import Alert # 경고창
from selenium.webdriver.chrome.options import Options # 크롬 드라이버 자동 설치
from selenium.webdriver.chrome.service import Service # 크롬 드라이버 자동 설치
from webdriver_manager.chrome import ChromeDriverManager # 크롬 드라이버 자동 설치
 
2.
# 구글 드라이버를 사용하기 위한 설정
options = webdriver.ChromeOptions() # 크롬 옵션 객체 생성
options.add_argument("headless") # 창 숨기기
options.add_argument('window-size=1920x1080') # 창 크기 설정
options.add_argument("disable-gpu") # GPU 사용 안함
options.add_argument("lang=ko_KR") # 언어 설정

 

3.유의* 가져온 url 주소가 https 형식이 아닌 data:base64 형식이라고 가정하고 진행함

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) # 크롬 드라이버 객체 생성

keyword = input('검색어를 입력하면 이미지를 저장합니다: ')

# 구글 검색창에 내가입력한 keyword 검색한다.
driver.find_element(By.NAME, 'q').send_keys(keyword)
driver.find_element(By.NAME, 'q').send_keys(Keys.ENTER)

# 사진 검색
driver.find_element(By.LINK_TEXT, '이미지').click() # link_text는 링크 텍스트를 찾는다.

# # 1번째 이미지 클릭
# driver.find_element(By.CSS_SELECTOR, 'img.rg_i.Q4LuWd').click() # css_selector는 css 선택자를 찾는다.

# 1번째 이미지의 링크 주소를 가져온다.
img = driver.find_element(By.CSS_SELECTOR, 'img.rg_i.Q4LuWd')
img_src = img.get_attribute('src')

# base64로 인코딩된 주소가 img_src에 저장되어 있다.
# 디코딩을 한다
import base64
img_data = base64.b64decode(img_src.split(',')[1])  # split(',')[1]은 base64로 인코딩된 이미지만 가져온다.

# myimages폴더가 없으면 생성한다.
if not os.path.exists('myimages'): # os.path.exists는 폴더가 있는지 확인한다.
    os.makedirs('myimages') # os.makedirs는 폴더를 생성한다.

# 디코딩된 이미지를 저장한다.
with open(f'myimages/{keyword}.png', 'wb') as f: # wb는 write binary
    f.write(img_data)