조코딩 영상을 보며 이미지 크롤링을 따라 해봤다.
selenium이라는 프레임 워크를 이용해서 크롤링 하는 것임.
크롤링이란 웹페이지 그대로 가져와 데이터를 추출하는 것을 말한다.
그러면 selenium은?
셀레늄(Selenium)은 웹 애플리케이션 테스트를 위한 포터블 프레임워크이다. 셀레늄은 테스트 스크립트 언어를 학습할 필요 없이 기능 테스트를 만들기 위한 플레이백 도구를 제공한다. <위키백과>
블라블라 여기서 중요한 것은 프레임워크 라는것!
어원은 잘 몰르겠지만, 프레임 + 워크 프레임 이라는 틀안에서 일한다 라느 느낌, 예를 들면 프레임이 집 만들기 라면 워크는 만들기 위한 기술들의 집합 정도?
어쨌든 이 크롤링을 따라하면서 느낀 selenium 느낌은 웹사이트를 불러와 그 안에 있는 데이터를 반복적으로 추출 하는데 이것을 자동!으로
한다는 것이 중요 하다는 느낌!
오늘 한 코드
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import urllib.request
driver = webdriver.Chrome("/Users/sun/Documents/selenium/selenium/chromedriver") #driver 변수에 webdriver.chrome 을 저장, 함수 호출 후 변수 저장
driver.get("https://www.google.co.kr/imghp?hl=ko&tab=ri&ogbl") #드라이버(크롬)를 실행 하는데 주소를 가져와서 실행, 함수 호출
elem = driver.find_element_by_name("q") #변수에 검색을 선택
elem.send_keys("강한나") # 검색란에 남주혁이라는 값을 입력, 함수 호출
elem.send_keys(Keys.RETURN) # 엔터기를 누른다, 함수 호출
images = driver.find_elements_by_css_selector(".rg_i.Q4LuWd")#클래스단위로 이미지들을 선택 후 변수 저장
count = 1 #변수 저장
for image in images: # 반복문
try:
image.click()# 다음 실행 화면에서 첫번째 사진을 클릭한다, 함수 호출
time.sleep(2)#사진 클릭시 로딩되는 시간때문에 지연시간을 넣는다, 함수 호출
imgUrl = driver.find_element_by_xpath('/html/body/div[2]/c-wiz/div[3]/div[2]/div[3]/div/div/div[3]/div[2]/c-wiz/div[1]/div[1]/div/div[2]/a/img').get_attribute("src")#클릭시 큰 사진을 선택하고 거기서 src 를 가져온다, 함수 호출 후 변수 저장
urllib.request.urlretrieve(imgUrl, "/Users/sun/Documents/selenium/selenium/save/ %s.jpg" % str(count) )#이미지 저장, 함수 호출
count = count + 1 # 이미지 이름을 1씩증가 해서 1,2,3,4, 이런식으로 저장
except:
pass
driver.close()
뭔가 자동으로 웹사이트를 불러서 데이터를 추출하고 저장하는 복잡한 코드가 필요할거 같았는데..........
쓰여진 문법은 변수 저장... 끽해야 for문..... 그리고 다 함수 호출이 전부....
느낀점 프레임워크를 사용하면 직접 코드를 짤 필요없이 함수 호출 만으로 간단히 만들수 있다!!!
프레임워크 라이브러리를 많이 써봐야 할것 같다.
다음으로 만들어 보고 싶은 것은 자동으로 다수에게 이메일을 전송 하는 코드를 짜보자.
오늘 크롤링이 이루어 지는 것을 상상하다 이것도 되겠다 싶은 생각이 들었다. 함 해보자.
나에겐 구글이 있다!