본문 바로가기
● 크롤링, 자동화/Selenium

[잔재미] 셀레니움 이미지 크롤링

by 0ver-grow 2021. 2. 8.
반응형

1. Jupyter Notebook에서 셀레니움 설치

!pip install selenium

2. 크롬 드라이버 다운받기

본인 브라우저 사양에 맞는 것을 다운

 

ChromeDriver - WebDriver for Chrome

WebDriver for Chrome

sites.google.com

3. 셀레니움 공홈에서 예시 코드 복붙해서 실행하기

 

2. Getting Started — Selenium Python Bindings 2 documentation

2.2. Example Explained The selenium.webdriver module provides all the WebDriver implementations. Currently supported WebDriver implementations are Firefox, Chrome, IE and Remote. The Keys class provide keys in the keyboard like RETURN, F1, ALT etc. from se

selenium-python.readthedocs.io

이를 다음과 같이 수정해서 실행하자

from selenium import webdriver # 셀레니움 불러오기
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome() # 불러온 webdriver를 통해 다운받은 Chrome드라이버 불러와서 driver변수에 저장
driver.get("http://www.python.org")

'''
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()
'''

실행해주면 다음과 같은 새창이 뜬다.

본격적으로 시작하기

구글이미지창으로 이동 > 검색창에 pycon 입력 > 검색하기

from selenium import webdriver # 셀레니움 불러오기
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome() # 불러온 webdriver를 통해 다운받은 Chrome드라이버 불러와서 driver변수에 저장
driver.get("https://www.google.co.kr/imghp?hl=ko&tab=wi&ogbl") #구글 이미지 검색 주소를 삽입
elem = driver.find_element_by_name("q") # 검색창 태그 찾기
elem.send_keys("pycon") # 검색창에 키워드 입력하기
elem.send_keys(Keys.RETURN) # 검색창 enter 누르기

다운받을 이미지의 공통적인 태그를 확인해보자

동일한 태그의 클래스명을 찾았다.

 

위 클래스명은 띄어쓰기 되어 있다.

이럴 때는 어떻게 클래스명을 지정해야 할까?

.을 쓰면된다.

즉, ".rg_i.Q4LuWd"

 

전체 코드를 보자

from selenium import webdriver # 셀레니움 불러오기
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome() # 불러온 webdriver를 통해 다운받은 Chrome드라이버 불러와서 driver변수에 저장
driver.get("https://www.google.co.kr/imghp?hl=ko&tab=wi&ogbl") #구글 이미지 검색 주소를 삽입
elem = driver.find_element_by_name("q") # 검색창 태그 찾기
elem.send_keys("pycon") # 검색창에 키워드 입력하기
elem.send_keys(Keys.RETURN) # 검색창 enter 누르기
driver.find_elements_by_css_selector(".rg_i.Q4LuWd") # 여러개의 이미지선택하기. 클래스 네임 기준.

이 중 첫번째 이미지를 클릭해보기 위해 다음처럼 수정

driver.find_elements_by_css_selector(".rg_i.Q4LuWd")[0].click()

 

이미지 다운 받기

이제 클릭한 이미지를 다운받아보자

이를 위해 해당 이미지의 공통적인 클래스명을 확인하자

큰 이미지의 경우 공통적으로 다음 클래스명을 가진다.

하지만 이 이미지의 주소인 src도 알아야 다운받을 수 있다.

print(driver.find_elements_by_css_selector(".n3VNCb").get_attribute("src"))

 

 

하지만 이미지를 불러오기까지 로딩시간이 걸리기 떄문에 약간의 대기시간을 줘야한다.

time.sleep(3)

이를 이미지를 클릭하고 src를 불러오는 과정 사이에 넣어주자

 

전체코드

from selenium import webdriver # 셀레니움 불러오기
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome() # 불러온 webdriver를 통해 다운받은 Chrome드라이버 불러와서 driver변수에 저장
driver.get("https://www.google.co.kr/imghp?hl=ko&tab=wi&ogbl") #구글 이미지 검색 주소를 삽입
elem = driver.find_element_by_name("q") # 검색창 태그 찾기
elem.send_keys("pycon") # 검색창에 키워드 입력하기
elem.send_keys(Keys.RETURN) # 검색창 enter 누르기

# 여러개의 이미지 중 첫번째 선택해서 클릭하기. 클래스 네임 기준.
driver.find_elements_by_css_selector(".rg_i.Q4LuWd")[0].click()
# 이미지를 클릭한 뒤 대기시간 주기
time.sleep(3)
# 이미지 주소(src) 다운받기
print(driver.find_elements_by_css_selector(".n3VNCb").get_attribute("src"))

 

문제 발생 : AttributeError: 'list' object has no attribute 'get_attribute'

 

최하단의 코드

print(driver.find_elements_by_css_selector(".n3VNCb").get_attribute("src"))

를 다음과 같이 수정

img = driver.find_elements_by_css_selector(".n3VNCb")
for i in img :
    imgUrl = i.get_attribute("src")

이제 url로 이미지를 다운받는 코드를 찾자

파이썬3용

해당 요소를 넣고 실행 했으나 오류 발생

'\nassert "Python" in driver.title\n\nelem.clear()\n\n\nassert "No results found." not in driver.page_source\ndriver.close()\n'

 

반응형