본문 바로가기

나 취준생/파이썬

구글 이미지 크롤링

320x100

웹에 있는 사진을 크롤링 하는 방법 ( 구글 이미지 )


셀레니움을 써서 마치 손으로 클릭해서 이미지를 저장하듯 저장을 하는데

컴퓨터를 시켜서 이 과정을 자동화 시키는 방법으로 스크롤링을 한다.


< 구글 이미지 스크롤링 준비 >


1. 크롬 웹브라우저가 설치 되어있어야 한다.

2. c 드라이브 밑에 chromedriver 폴더를 생성하고, chromedriver.exe를 넣는다.

3. c 드라이브 밑에 gimages 폴더를 생성한다.

4. 다운 받을 이미지의 키워드를 결정한다.

5. 아나콘다 프롬프트 창을 열고 selenium을 설치

conda install selenium 또는 pip install selenium 을 입력하면 설치가 진행된다.


----------------------------------------------------------------------------------------

# 밑 코드 쭉 긁어서 바로 사용 가능


import urllib.request # 웹 url을 파이썬이 인식 할 수 있게하는 패키지

from  bs4 import BeautifulSoup # html에서 데이터 검색을 용이하게 하는 패키지

from selenium import webdriver  


# selenium : 웹 애플리케이션의 테스트를 자동화하기 위한 프레임 워크 

# 손으로 클릭하는것을  컴퓨터가 대신하면서 스크롤링하게 하는 패키지


from selenium.webdriver.common.keys import Keys

import time       # 중간중간 sleep 을 걸어야 해서 time 모듈 import



########################### url 받아오기 ###########################


binary = 'C:\chromedriver\chromedriver.exe'    # 크롬 드라이버 사용

browser = webdriver.Chrome(binary)    # 브라우져를 인스턴스화

browser.get("https://www.google.co.kr/imghp?hl=ko&tab=wi&ei=l1AdWbegOcra8QXvtr-4Cw&ved=0EKouCBUoAQ") # 구글의 이미지 검색 url 받아옴(아무것도 안 쳤을때의 url)



#검색창에 해당하는 html코드를 찾아서 elem 클래스 부분에 입력 ( 사이트에서 크롬 관리자 모드 사용해서 검색 )



# elem = browser.find_elements_by_id('gLFyf gsfi') # Tip : f12누른후 커서를 검색창에 올려두고 id를 찾으면 best, id가 없으면 class로

elem = browser.find_element_by_xpath("//*[@class='gLFyf gsfi']")  # 위의 코드대로 하거나 이렇게 하거나 둘 중 하나 select



# 검색어 입력 파트


elem.send_keys("짱구 훈이") # 여기에 스크롤링하고싶은 검색어를 입력

elem.submit() # 웹에서의 submit 은 엔터의 역할을 함



# 반복문


# 스크롤을 내리려면 브라우져 이미지 검색결과 부분(바디부분)에 마우스 클릭 한번 하고 End키를 눌러야함


for i in range(1, 6): # 5번 스크롤 내려가게 구현된 상태 range(1,5)

    browser.find_element_by_xpath("//body").send_keys(Keys.END)

    time.sleep(10)          # END 키 누르고 내려가는데 시간이 걸려서 sleep 해줌 / 키보드 end키를 총 5번 누르는데 end 1번누르고 10초 쉼

time.sleep(10)                      # 네트워크 느릴까봐 안정성 위해 sleep 해줌(이거 안하면 하얀색 이미지가 다운받아질 수 있음.)

html = browser.page_source         # 크롬브라우져에서 현재 불러온 소스 가져옴

soup = BeautifulSoup(html, "lxml") # html 코드를 검색할 수 있도록 설정

browser.find_element_by_xpath("//*[@class='mye4qd']").click()  # 여기가 결과 더 보기 코드


# 그림 파일 저장


### 검색한 구글 이미지의 url을 따오는 코드 ###


def fetch_list_url():

    params = []

    imgList = soup.find_all("img", class_="rg_i Q4LuWd")  # 구글 이미지 url 이 있는 img 태그의 _img 클래스에 가서 (f12로 확인가능.)

    for im in imgList:

        try :

            params.append(im["src"])                   # params 리스트에 image url 을 담음.

        except KeyError:                                  # 이미지의 상세 url 의 값이 있는 src 가 없을 경우

            params.append(im["data-src"])            # 이미지의 상세 url 의 값이 있는 src 가 없을 경우 data-src 로 가져오게

    return params


def fetch_detail_url():

    params = fetch_list_url()

    for idx,p in enumerate(params,1):    # enumerate 는 리스트의 모든 요소를 인덱스와 쌍으로 추출

        urllib.request.urlretrieve(p, "C:/gimages2/" + str(idx) + "_google.jpg")    # 다운받을 폴더경로 입력


fetch_detail_url()


browser.quit()    # 끝나면 브라우져 닫기





반응형

'나 취준생 > 파이썬' 카테고리의 다른 글

MYSQL, 파이썬 연동  (0) 2020.12.21
오라클과 파이썬 연동하기  (0) 2020.12.21
감정 분석 + 워드 클라우드  (0) 2020.12.18
워드 클라우드 그리기  (0) 2020.12.18
웹 스크롤링 연습 (더 나은미래 신문)  (0) 2020.12.18