########################### 그림파일 저장 ########################### def fetch_list_url(soup, keyword) : # 이미지에 대한 상세 url을 params list에 담는 함수
import urllib.request # 파이썬에서 웹의 url을 인식할 수 있게 하는 모듈 from bs4 import BeautifulSoup from tqdm.notebook import tqdm
params = []
# 구글 이미지 url 이 있는 img 태그의 _img 클래스에 가서 imgList = soup.find_all("img", class_ = "rg_i Q4LuWd")
for im in tqdm(imgList, desc = keyword + '이미지 url 추출 진행도') : try : params.append(im["src"]) # params 리스트에 image url 을 담음
except KeyError: params.append(im["data-src"]) # scr에서 못 가져오면 data-src에서 가져옴
return params # 이미지의 상세 url 의 값이 있는 src 가 없을 경우 data-src 로 가져옴
def fetch_detail_url(soup, keyword) : # 상세 url의 이미지들을 우리 컴퓨터에 다운로드 받는 함수
import urllib.request # 파이썬에서 웹의 url을 인식할 수 있게 하는 모듈 from bs4 import BeautifulSoup from selenium import webdriver # 웹 애플리케이션의 테스트를 자동화하기 위한 프레임 워크 from selenium.webdriver.common.keys import Keys from tqdm.notebook import tqdm
params = fetch_list_url(soup, keyword)
# params 리스트의 요소를 하나씩 가져오는데 번호를 1번부터 부여해서 가져옴 for idx, p in enumerate(tqdm(params, desc = keyword + '이미지 다운로드 진행도'), 1) : # 다운받을 폴더경로 입력 urllib.request.urlretrieve(p, "C:/GoogleImages/" + keyword + str(idx) + ".jpg")
# enumerate 는 리스트의 모든 요소를 인덱스와 쌍으로 추출하는 함수
def scroll_image(keyword = None) :
import urllib.request # 파이썬에서 웹의 url을 인식할 수 있게 하는 모듈 from bs4 import BeautifulSoup from selenium import webdriver # 웹 애플리케이션의 테스트를 자동화하기 위한 프레임 워크 from selenium.webdriver.common.keys import Keys import time # 중간중간 sleep 을 걸어야 해서 time 모듈 import from tqdm.notebook import tqdm
while True : try : if keyword == None : keyword = str(input('검색어를 입력하세요 : '))
if type(keyword) != str or keyword == '' : print("'%s'은(는) 잘못된 검색어입니다. 다시 입력하세요." %(str(keyword))) keyword = None continue break
except ValueError : print('잘못된 검색어입니다. 다시 입력하세요.') keyword = None continue
########################### url 받아오기 ###########################
# 웹브라우져로 크롬을 사용할거라서 크롬 드라이버를 다운받아 위의 위치에 둔다 # 팬텀 js로 하면 백그라운드로 실행할 수 있음 binary = 'C:\\data\\chromedriver_win32\\chromedriver.exe'
# 브라우져를 인스턴스화 browser = webdriver.Chrome(binary)
# 구글의 이미지 검색 url 받아옴(키워드를 아무것도 안 쳤을때의 url) browser.get("https://www.google.co.kr/imghp?hl=ko&tab=wi&ei=l1AdWbegOcra8QXvtr-4Cw&ved=0EKouCBUoAQ") # 구글의 이미지 검색에 해당하는 input 창의 id 가 ' ? ' 임(검색창에 해당하는 html코드를 찾아서 elem 사용하도록 설정) # input창 찾는 방법은 원노트에 있음
#elem = browser.find_elements_by_class_name('gLFyf gsfi')
# 검색창에 검색 키워드를 넣기 위해서 웹 페이지의 검색창의 클래스 이름을 찾아서 # 검색창에 해당되는 부분이 어디다라고 알려주는 elem 객체 생성 elem = browser.find_element_by_xpath("//*[@class='gLFyf gsfi']")
########################### 검색어 입력 ###########################
# elem 이 input 창과 연결되어 스스로 햄버거를 검색 elem.send_keys(keyword)
# 웹에서의 submit 은 엔터의 역할을 함 elem.submit()
########################### 반복할 횟수 ###########################
# 스크롤을 내리려면 브라우져 이미지 검색결과 부분(바디부분)에 마우스 클릭 한번 하고 End키를 눌러야함 for i in tqdm(range(5), desc = keyword + ' 이미지 검색 진행도') : browser.find_element_by_xpath("//body").send_keys(Keys.END) time.sleep(5) # END 키 누르고 내려가는데 시간이 걸려서 sleep 해줌
time.sleep(5) # 네트워크 느릴까봐 안정성 위해 sleep 해줌 html = browser.page_source # 크롬브라우져에서 현재 불러온 소스 가져옴 soup = BeautifulSoup(html, "lxml") # html 코드를 검색할 수 있도록 설정
fetch_detail_url(soup, keyword)
# 끝나면 브라우져 닫기 browser.quit() |