파이썬을 이용한 selenium 사용법 및 동적 웹 스크래핑
- 파이썬/파이썬 프로그래밍
- 2019. 9. 23. 23:39
| selenium(셀레늄)이란
selenium은 주로 웹앱을 테스트하는 웹 프레임워크입니다. 또한 webdriver의 API를 통해 브라우저를 제어하기 때문에 자바스크립트에 의해 동적으로 생성되는 사이트의 데이터를 크롤링할 때 매우 유용하게 사용되는 스크래핑 도구입니다.
| selenium 사용법
selenium은 크롬이나 파이어폭스같은 각 브라우져의 webdriver API를 통해 브라우져를 제어합니다. 따라서 자신이 쓰고자 하는 브라우져의 driver를 다운로드받아서 Java나 C#, Python 같은 프로그래밍 언어를 통해 제어하는 것이 일반적입니다. 여기서는 크롬을 기준으로 사용법을 설명할 예정입니다.
driver를 다운로드 받을 수 있는 곳은 아래와 같습니다. 여기서 주의해야 할 점은 크롬 브라우져의 버전에 맞는 driver를 다운로드 받아야 한다는 것입니다. 브라우져 버전은 메뉴 => 도움말 => Chrome 정보에서 확인할 수 있습니다.
https://chromedriver.chromium.org/downloads
| 파이썬을 통한 selenium 사용법 및 동적 사이트 크롤링 방법
자바스크립트에 기반인 동적 사이트인 네이버 데이터랩의 데이터를 크롤링하는 것을 보여드리겠습니다. 여기서 크롤링할 데이터는 현재 패션의류 검색어 TOP20인 리스트들입니다.
위 TOP20 리스트들은 아래와 같은 자바스크립트에 의해 동적으로 생성된 페이지의 요소에 위치해 있습니다.
프로젝트 구조
| chromedriver.exe
| selenium-example.py
프로젝트 구조는 어떻게 파이썬을 통해 동적 사이트를 크롤링 할 지 보여주기 위해 단순히 하나의 파이썬 파일과 크롬 드라이버만 가지고 있습니다.
selenium-example.py
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
options = Options()
options.headless = True
browser = webdriver.Chrome(executable_path="./chromedriver.exe", options=options)
browser.get("https://datalab.naver.com/shoppingInsight/sCategory.naver")
time.sleep(3)
tag_names = browser.find_element_by_css_selector(".rank_top1000_list").find_elements_by_tag_name("li")
for tag in tag_names:
print(tag.text.split("\n"))
- 위 코드를 실행하기 위해서는 chromedriver가 설치되어 있어야함 과 동시에 selenium 패키지가 설치되어 있어야 합니다.
- Options() 객체를 생성하고 그 정보를 Chrome 드라이버 옵션에 넣는 것을 보실 수 있을 겁니다. 주목해야할 점은 options.headless 옵션입니다. 이것은 브라우져를 렌더링하지 않고 메모리 상에서만 작업이 이루어지도록 하기 위한 옵션입니다. 이 옵션이 추가되지 않았을 때는 PhantomJS를 통해 작업을 했었지만 selenium이 이 옵션을 지원하기 시작함에 따라 PhantomJS는 사장되었습니다.
- time.sleep(3) 코드는 자바스크립트에 의해 페이지 로딩이 완전히 이루어질 때까지 기다리기 위해 삽입하였습니다. 이 방법 외에 WebDriverWait 객체의 expected_conditions 메서드를 통해 해당 요소가 완전히 로딩될때까지 기다리는 방법이 있습니다. 하지만 이 방법은 우아하지만 웹페이지마다 이 조건을 충족시키기가 굉장히 까다로울 때가 있습니다. 따라서 time.sleep 메서드로 잠깐 로딩될 때까지 멈추는 것도 투박하지만 심플한 솔루션이 될 수 있습니다. expected_condition을 통한 방법은 추후에 다른 포스팅에서 다루도록 하겠습니다.
- find_element_by_css_selector 메서드 및 find_elements_by_tag_name 메서드를 통해 선택하고자 하는 TOP 리스트들이 모여있는 <li>들을 선택하는 것을 볼 수 있습니다. webdriver를 통해서 selenium은 css 및 tag를 통해 해당 요소들을 선택할 수 있는 메서드를 제공합니다.
| 결과화면
['1', '원피스']
['2', '가을원피스']
['3', '블라우스']
['4', '후드집업']
['5', '롱원피스']
['6', '나이키바람막이']
['7', '맨투맨']
['8', '나이키맨투맨']
['9', '트렌치코트']
['10', '하객원피스']
['11', '셔츠원피스']
['12', '트위드자켓']
['13', '나이키후드집업']
['14', '후리스']
['15', '니트원피스']
['16', '가디건']
['17', '셀프웨딩드레스']
['18', '레오파드스커트']
['19', '라쉬반']
['20', '써스데이아일랜드원피스']
'파이썬 > 파이썬 프로그래밍' 카테고리의 다른 글
스크래피(scrapy) 설치 및 scrapy 프로젝트 시작하기 (4) | 2019.09.24 |
---|---|
회사 프록시 때문에 pip, npm을 통해 제대로 패키지 다운로드가 안 될 때 (0) | 2019.09.20 |
파이썬 웹 스크래핑할 때 이거 쓰세요. 최고의 파이썬 웹 스크래핑 솔루션 scrapy (0) | 2019.09.19 |
[Python, 파이썬] Call by assignment, mutable, immutable, 파이썬 복사(Python Copy) (0) | 2018.11.25 |
이 글을 공유하기