본문 바로가기

카테고리 없음

[파이썬 웹크롤링] selenium이 좋은 이유, 셀레니움은 왜 도움이 되나

웹크롤링을 하다 보면 여러 가지 어려운 상황을 마주치게 됩니다. 대표적인 상황은 다음과 같습니다.

 

- 해당 웹사이트가 프로그램을 통한 접근 허용하지 않는 경우

- 해당 웹사이트가 로그인을 요구하는 경우

- 해당 웹사이트가 동적 웹페이지로 구성되어 있는 경우

 

이런 경우에는 requests 라이브러리만으로 해결하기에는 쉽지 않습니다. 이럴 때 상황을 해결하는 가장 손쉽고 효과적인 방법이 바로 selenium을 이용하는 것입니다.

 

셀레니움이란 

selenium은 웹사이트 테스트를 위한 도구로 브라우저 동작을 자동화할 수 있습니다. 셀레니움을 이용하는 웹크롤링 방식은 바로 이점을 적극적으로 활용하는 것입니다. 프로그래밍으로 브라우저 동작을 제어해서 마치 사람이 이용하는 것 같이 웹페이지를 요청하고 응답을 받아올 수 있습니다.

 

셀레니움 설치 및 준비 

우선 웹 드라이버가 필요합니다. 웹 드라이버는 브라우저 제어에 필요한 도구로 본인이 사용하는 브라우저에 맞춰서 다운로드하면 됩니다. 브라우저의 버전을 확인하신 다음 맞는 드라이버를 선택하면 됩니다.

 

* 크롬

https://chromedriver.chromium.org/downloads

 

Downloads - ChromeDriver - WebDriver for Chrome

WebDriver for Chrome

chromedriver.chromium.org

 

* 파이어폭스

https://github.com/mozilla/geckodriver/releases

 

mozilla/geckodriver

WebDriver for Firefox. Contribute to mozilla/geckodriver development by creating an account on GitHub.

github.com

 

브라우저 창 띄우기 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# 크롬드라이버를 경로를 입력해서 연결합니다.
# 현재 스크립트와 같은 폴더에 있다면 경로를 따로 입력하지 않아도 됩니다.
driver = webdriver.Chrome()

 

위의 코드를 실행했다면 아래 사진처럼 빈 브라우저 창이 나타납니다.

 

 

웹페이지 접근하기 

driver.get('https://www.whatismybrowser.com/')

원하는 웹페이지의 url을 매개변수로 전달하면 됩니다. 이번 예제에서는 브라우저의 정보를 알려주는 웹사이트인 whatismybrowser에 접속했습니다.

 

 

웹서버는 우리가 사람(브라우저)인 것처럼 판단하고 있습니다. 만약 단순히 파이썬 requests 라이브러리만을 이용했다면 서버는 우리가 사람이 아닌 것을 알 수 있습니다.

 

 

브라우저를 제어하는 것의 장점이 바로 이런 것입니다. 사람이 이용하는 것처럼 웹사이트에 접근도 할 수 있고 로그인도 할 수 있습니다.

 

웹페이지 html 코드를 가져와서 BeautifulSoup 객체 만들기 

# 페이지 소스 가져오기
html = driver.page_source
# 라이브러리 가져오기
from bs4 import BeautifulSoup
# 객체 생성
soup = BeautifulSoup(html)

이후부터는 BeautifulSoup의 메서드를 이용해서 원하는 데이터를 수집, 정리하면 됩니다.

 

 

- 이 글은 아나콘다(Anaconda3)가 설치된  주피터 노트북에서 작성되었습니다.