본문 바로가기
Data Science/문과생도 할 수 있는 웹크롤링

문과생도 할 수 있는 웹 크롤링 (2) - Selenium 사용 준비

by 싸코 2017. 9. 29.

자! 데이터 크롤링 방법을 논하기에 먼저 필요한 도구들을 하나씩 정리하려고 한다. Selenium, Scrapy, Json, Database.... 등등 포스팅을 하면서 정말 필요한 것들만 정리해보도록 하겠다.


2017/09/29 - [Data Science/Python] - 문과생도 할 수 있는 웹 크롤링 (1) - 웹 데이터 크롤링 준비


Selenium 사용 준비

문과생도 할 수 있는 웹 크롤링 (2)

1. Selenium 기본 개념

2. Selenium 설치

3. 브라우저 driver 설치

4. Selenium 시작하기


가장 먼저 Selenium을 다뤄보려고 한다. 데이터 수집 방법은 각 도구들이 하나의 조각으로 모든 조각을 합쳐져 만들어지기 때문에 지금은 그 조각을 맞춰 나가는 것이 제일 중요하며 Selenium은 그 첫 조각이 될 것이다. "문과생도 할 수 있는 웹 크롤링"에서는 BeautifulSoup을 이용한 태깅방식의 크롤링은 다루지 않을 예정이다. 모든 포스팅이 끝나고 수요가 있을 때 추가로 해보겠다.


이전 포스트에서 언급하였던 것처럼 본 크롤링은 사용자가 직접 브라우저를 동작시키는 것과 같은 방법으로 크롤링을 하겠다고 하였다. 그래서 Selenium은 우리에게 가장 중요한 도구이다. Selenium은 브라우저의 동작을 자동화 해주는 프로그램이기 때문에 우리 대신에 컴퓨터가 브라우저를 뒤저가며 자료를 수집해주도록 할 것이다.



1. Selenium 기본 개념

Selenium은 일반적으로 웹 앱을 테스트할 때 주로 사용하는 프레임워크이다. 일종의 자동화 프로그램으로 테스터가 일일이 다 만지지 않아도 자동으로 탐색해주고 원하는 정보를 찾도록 도와준다.


우리는 이 Selenium의 webdriver라는 api를 통해서 firefox/chrome 브라우저를 제어하고자 한다.


앞서 말한 것처럼 브라우저를 직접 동작시킨다는 것은 JavaScript가 동작하면서 비동기적으로 서버로부터 콘텐츠를 가져오거나 숨겨져 있는 콘텐츠를 열거나 하는 등의 작업을 수행함을 의미한다. 외국의 유명한 사이트들은 홈페이지를 사용자가 직접 동작시키지 않으면 정보가 공개되지 않도록 설계되어 있어 태그 기반으로 정보를 가져오거나 하는 등의 방법으로는 정보를 가져오기가 힘들어졌다.


위에서 동기적이라 함은 sync가 맞는다는 말이다. web은 보안 이슈를 포함하여 브라우저와 서버 간의 통신을 동기적으로만 할 수 있도록 처음에는 설계되었다. 하지만 JavaScript를 통해 비동기적으로도(async) 브라우저의 정보를 숨기고 꺼내고 할 수 있는 방법들이 고안되었다. 더 궁금하면 찾아보자 ajax를 검색해보는 것도 좋다.


우리가 사이트를 보면서 콘텐츠를 열고 닫고 넘어가는 등 정보를 불러오는 방식으로 정보를 수집할 수 있도록 Selenium이 대신 해줄 것이다.




2. Selenium 설치

Selenium은 pip나 conda(아나콘다)를 이용해서 설치가 가능하다.

>> pip install selenium
>> conda install -c conda-forge selenium




3. 브라우저 driver 설치

Selenium을 사용하기 위해서는 브라우저 별로 driver를 다운로드 해야 한다. Selenium의 기능중에서는 컴퓨터가 직접 웹 브라우저를 띄운 후 코드를 쳐서 동작시킬 수 있도록 webdriver라는 api를 제공한다. 컴퓨터가 webdriver api로 브라우저를 직접 제어할 수 있도록 도와주는 driver를 설치해주어야 한다. 크롬, 엣지, 파이어폭스, 사파리에서 driver를 제공한다. 자신의 운영체제에 맞는 버전으로 드라이버를 다운받도록 하자. 압축파일은 자신의 편한 작업공간에 저장한다. 필자는 C:\downloads\ 경로에 저장되어 있다. 그렇다. 다운받으면 자동으로 저장되는 경로에 그대로 압축을 풀었다. 필자가 다운로드 받은 chrome driver의 최종 위치는 "C:\downloads\chromedriver"이다.


아래는 브라우저별로 드라이버를 다운로드 받을 수 있는 경로가 정리된 표이다.


Chrome:

https://sites.google.com/a/chromium.org/chromedriver/downloads
Edge:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Firefox:https://github.com/mozilla/geckodriver/releases
Safari:https://webkit.org/blog/6900/webdriver-support-in-safari-10/




여기까지 모두 끝났으면 이제 Selenium을 사용할 준비는 모두 마쳤다. 본격적으로 크롤링을 하기 전에 Selenium으로 진짜 브라우저를 제어할 수 있는지 한 번 해보자




4. Selenium 시작하기

앞으로 실습 언어는 Python 3.6으로, 브라우저는 chrome으로 할 것이다. 
자 이제 Selenium을 한 번 작동시켜보자.

1) selenium 모듈에서 webdriver를 불러온다

2) 다운로드 받아 압축을 해제한 drive 파일 경로를 path 변수에 할당한다

3) webdriver.Chrome(path)로 chromedriver로 크롬 브라우저를 제어할 수 있는 창을 띄운다. 이름은 driver로 했다. 변수명은 원하는 걸로 사용하면 된다.

1
2
3
4
5
6
from selenium import webdriver
 
path = "드라이버 파일 위치"    #ex. C:/downloads/chromedriver.exe
 
#조금만 기다리면 selenium으로 제어할 수 있는 브라우저 새창이 뜬다
driver = webdriver.Chrome(path)
cs


짜잔! 새로운 크롬 창이 떴다! 자동화된 테스트 소프웨어에 의해 제어되고 있다는 말은 Selenium으로 해당 브라우저를 제어할 수 있다는 말과 같다.




4) 우리가 코드로 제어할 수 있는 브라우저를 띄워봤는데 뭐라도 한 번 해봐야 하지 않겠는가. 개발자들의 어머니 '구글님'에게 접속해보자. driver의 get 함수에 사이트주소를 전달한다.


1
2
#webdriver가 google 페이지에 접속하도록 명령
driver.get('https://www.google.com')
cs



성공적으로 접속했다!! 마우스를 사용하지 않고 브라우저를 열고 사이트에 접속할 수 있었다. 이제 검색도 하고 브라우저로 할 수 있는 일은 다 할 수 있는 준비가 되었다.



5) 이제 브라우저를 종료시켜 보자


1
2
#webdriver를 종료하여 창이 사라진다
driver.close()
cs




Selenium으로 브라우저를 사용할 준비는 모두 맞췄다. 이제 Selenium으로 정보를 가져오는 방법을 알아보자.




참고자료

셀레니움 공식 문서: http://www.seleniumhq.org/docs/


2017/09/30 - [Data Science/Python] - 문과생도 할 수 있는 웹 크롤링 (3) - Selenium 실습 기초


댓글