앞서서 우리가 티처블머신을 가지고 이미지 학습하는 것을 만들어 봤는데요 이제 티처블머신 활용하는 것은 아주 익숙해진 것 같습니다.
하지만 티처블머신을 하면서 느꼈던 점은 결국에는 많은 데이터를 학습 하면 할수록 더욱 더 정확한 결과값을 얻을 수 있다는 건데 문제는 데이터를 수집하는게 정말 어렵다고 생각을 하고 있었습니다.
특히나 이미지를 수집한다는 것, 크롬 브라우저를 통해서 이미지를 검색하고 이미지를 찾아서 이미지 오른쪽 마우스로 클릭 다른이름으로 저장 이러한 작업을 수백 번 반복을 해야만 더욱 더 정확한 결과값을 얻을 수가 있었습니다 사실 티처블머신을 활용을 해서 이미지를 학습시키는 시간보다 이미지를 찾는 시간과 이미지를 검색하는 시간이 훨씬 더 오래 걸릴 수 밖에 없었는데요 우리가 조금 더 간편하게 이미지를 찾기 위해서는 크롤링이란 기술을 활용을 해서 인터넷에서 있는 이미지들을 빠르게 가져다 오는 코드를 작성을 해 주면 됩니다
이번 시간에는 파이썬 활용을 해서 네이버 크롤링을 해 보도록 하려고 합니다. 기존의 다양한 블로그나 유튜브에서 소개하고 있는 네이버 블로그 크롤링 기술 같은 경우에는 네이버에서 크롤링을 할 수 없게끔 나갔기 때문에 안 되는 코드들이 상당히 많습니다 그래서 저는이 트롤링을 하기 위해서 셀레니움이라는 크롤링 방식을 활용을 해서 이미지를 크롤링 할 거고요 수많은 영화배우 그리고 배우들의 데이터를 받아와서 이미지 저장을 해 보도록 하겠습니다 셀레니움이라는 것은 크롬 브라우저 같은 것이라고 보면 되고요 대신 일반 브라우저 대신 다른 브라우저를 열어서 콜링 한다고 볼 수가 있습니다 방식은 아주 간단한데요 내 크롬 드라이버가 설치되어 있는 경로를 찾아서 크롬 브라우저를 열고 검색을 해서 거기에 있는 모든 이미지들을 싹 다 가져오면 됩니다 이때 알아야 될 것이 네이버에 있는 이미지가 어떤 아이디를 가지고 있는지 만 파악 한다면 여러분들이 쉽게 찾을 수 있습니다
우선 파이썬을 사용하기 위해서는 파이썬을 다운받아야 하고요 그다음에 다양한 라이브러리를 추가를 해서 시작을 해 주면 됩니다 그럼 우선 파일썬 설치하는 방법에 대해서 알아보시죠
발산 개발 같은 경우는 아래 블로그에 잘 포스팅 된 글을 퍼 왔습니다 병아리 개발자 님이 만들어준 포스팅입니다
◎ 개발환경??
개발환경을 설정하기에 앞서, 확인하거나 결정할 여러가지가 있습니다. 아래와 같은 사항을 확인해보시죠 ~
1) OS (운영체제) : Window 인지? Linux인지? MacOS인지??
2) Python Interpreter는 뭘 사용할지:
- Interpreter는 프로그래밍 언어의 소스코드를 바로 실행하는 컴퓨터 프로그래밍 또는 환경인데, 컴파일러라고 할 수 있겟습니다.
- 2.x Version을 사용할지?? 3.x Version을 사용할지??는 확인을 해주셔야 됩니다.
다만 현재는 3.x 를 많이 사용하는 추세라고 합니다.
- 대표적으로 Pyhton(파이썬) / Anaconda(아나콘다) / Canopy(캐노피) 를 예를 들 수 있겟습니다.
Python : https://www.python.org
Anaconda : http://www.continuum.io
Canopy : https://www.enthought.com/product/canopy/
3) 코드편집기는 뭘 쓸 것인지??
코드를 어디에다가 작성할지 Tool을 의미하는 건데요, 보통 Python을 설치하기 위해서는
- 메모장
- VI Editor (리눅스 기본 편집 도구)
- Sublime Text / Atom
- 등이 있을 것 같습니다.
저는 TeamLab에서 강의한 내용을 기준으로 학습 하였기 때문에 ~ 이에 맞춰 적용했습니다.
◎ 설치하기
https://conda.io/miniconda.html
미니콘다에 들어가셔서 본인의 운영체제에 맞는 인터프리터를 설치해 주시면 됩니다.
○ 다운 후 -> 실행 -> Just Me -> 원하는 저장 장소 클릭 -> Install -> Finish 순서 설치 합니다.
◎ 실행 확인
CMD창을 열어서 python을 입력해주시면 설치가 잘 되었는지 확인이 됩니다.
파이썬 설치가 완료가 되었으면 이제 아래와 같은 코드를 입력을 해주어서 파이썬을 실행해 주시면 됩니다
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# 웹 애플리케이션의 테스트를 자동화하기 위한 프레임 워크
# 손으로 마우스 클릭해서 데이터를 검색하고 스크롤링 할 수 있다
import os
import time
# 중간마다 sleep를 걸어야 한다.
search_words = {
"영화배우" : ['송강호', '조여정', '이정은', '현빈',
'손예진', '최우식', '이선균', '공유', '김다미', '김혜수', '박소담', '이광수', '장혜진',
'정우성', '이병헌', '박해진', '김민재', '심은경', '안재홍', '이정재', '김남길', '김민희', '김지영',
'이이경', '유재명', '박명훈', '이영애', '전도연', '강하늘', '김무열', '공효진', '한석규', '김동욱',
'이지훈', '이제훈', '조한선', '라미란', '박지훈', '이하늬', '김민석', '정해인', '하정우', '이성민',
'김지수', '박정민', '송지효', '성동일', '이학주', '윤여정'],
"드라마배우" : [
'권나라', '김보라', '안효섭', '서지혜', '김정현', '조병규', '이성경', '남궁민', '오민석', '김혜수',
'한석규', '유재명', '박은빈', '소주연', '주지훈', '김주헌', '김동희', '옥택연', '고수', '이연희', '이시언', '신동욱', '서현진', '진세연', '오정세',
'이성민', '진경', '유태오', '임주환', '심은경', '임원희', '변정수', '주상욱', '윤나무', '이선균', '설인아', '김민규', '조보아',
'이태환', '차예련', '최명길', '김홍파', '최윤소', '정유민', '김흥수', '정려원'
]
}
value = 0
for name in search_words['드라마배우']:
binary = '/Users/geonukkim/Downloads/chromedriver'
# 크롬 웹 브라우저를 열기 위한 크롬 드라이버
# 팬텀 js를 이용하면 백그라운드로 실행 할 수 있음.
browser = webdriver.Chrome(binary)
# 브라우저를 인스턴스화
browser.get("https://search.naver.com/search.naver?where=image&sm=stb_nmr&")
# 네이버의 이미지 검색 url
elem = browser.find_element_by_id("nx_query")
# nx_query는 네이버 이미지 검색에 해당하는 input창 id
search_name = '배우'+name
elem.send_keys(search_name)
elem.submit()
# 스크롤링( 스크롤을 내리는 동작)을 반복할 횟수
for i in range(1, 2):
browser.find_element_by_xpath("//body").send_keys(Keys.END)
# 웹창을 클릭 후 END키를 누르는 동작
# 브라우저 아무데서나 END키 누른다고 페이지가 내려가지 않음
# body를 활성화한 후 스크롤 동작
time.sleep(1)
# 이미지가 로드 되는 시간 5초
# 로드가 되지 않은 상태에서 자장하기 되면 No image로 뜸.
time.sleep(1)
# 네크워크의 속도를 위해 걸어둔 sleep
html = browser.page_source
# 크롬 브라우저에서 현재 불러온 소스 코드를 가져옴
soup = BeautifulSoup(html, "lxml")
# beautiful soup을 사용해서 html 코드를 검색할 수 있도록 설정
def fetch_list_url():
# 이미지를 url이 있는 img 태그의 img클래스로 감
params = []
imgList = soup.find_all("img", class_="_img")
for im in imgList:
# params 리스트 변수에 images url을 담음
params.append(im["src"])
return params
def fetch_detail_url():
dir_name = "./" + search_name + '/'
os.makedirs(dir_name)
params = fetch_list_url()
a = 1
for p in params:
# 다운받을 폴더경로 입력
urllib.request.urlretrieve(p , dir_name + str(a) + ".jpg")
a = a + 1
fetch_detail_url()
# 브라우저 창 닫기
browser.quit()
코드를 다 붙여 넣어 주시고 파이썬 실행 해 주시면 내가 설정한 배우들의 이미지들이 폴더에 잘 정리되어서 들어오는 것을 알 수가 있습니다 제가 오른쪽 마우스 다른 이름으로 저장으로 이미지를 저장 했을 때 시간에 1,000분의 1 이상이 줄어든 것을 알 수가 있습니다. 이 얼마나 놀라운 일이 아닐 수 없습니다 어썸!
그럼 이제 여러분들도 여러분들이 학습시키고 싶은 이미지를 빠르게 찾아올 수 있습니다 저와 같은 방법으로 이미지를 빠르게 찾아오셔서 여러분이 만들고 싶은 어플리케이션 꼭 만드셨으면 좋겠습니다 그리고 제 하단에 댓글에 글을 남겨 주시면 더욱 더 즐거울 것 같습니다.