안녕, 세상!

셀레니움(selenium)으로 크롤링(스크래핑) 본문

It공부/Data science

셀레니움(selenium)으로 크롤링(스크래핑)

dev_Lumin 2021. 2. 5. 22:08

( 본 글의 크롤링은 크롤링이라기보다 스크래핑이 더 가깝습니다.

 보통 사람들이 스크래핑도 크롤링이라고 부르는 경향이 있는 것 같습니다.

 저도 일단 대중적인 표현으로 크롤링이라고 표현하겠습니다만

 이 부분을 염두해주고 봐주시면 감사하겠습니다. )

(1) 셀레니움이란?

셀레니움은 웹 애플리케이션 테스트를 위한 프레임워크입니다.

웹에 하는 명령을 코드화시켜서 작동시킵니다.

다양한 브라우저 작동을 지원하며 크롤링에도 활용됩니다.

현존하는 거의 모든 웹브라우저를 다양한 언어를 통해 제어 가능합니다.

크롤링에서는 정적, 동적 페이지 크롤링으로도 접근이 불가능한 데이터에 접근할 때 유용하게 사용됩니다.

 

필자는 크롬 환경에서 파이썬으로 제어하겠습니다.

(2) 셀레니움 Setting

셀레니움을 사용하려면 사용하려는 브라우저의 웹 드라이버 다운로드가 필요합니다.

크롬 환경에서 할 것이므로 크롬 드라이버 설치가 필요합니다.

chromedriver.chromium.org/downloads

 

Downloads - ChromeDriver - WebDriver for Chrome

WebDriver for Chrome

chromedriver.chromium.org

위의 링크로 접속하면 다양한 크롬 드라이버 버전이 존재하는데

자신에게 맞는 드라이버를 설치해야 합니다.

 

자신의 크롬 버전을 확인하는 방법은 다음과 같습니다.

[도움말] -> [chrome 정보]에 들어가면 조금 기다리면 크롬 정보가 나옵니다.

해당 크롬 버전에 맞는 드라이브를 설치해주면 됩니다.

 

필자의 경우 크롬 버전이 88.0.4324.104입니다.

하지만 크롬 드라이브에는 해당 버전이 없는데 88.0.4324.96을 설치해주면 됩니다.

 

셀레니움은 이 웹 드라이버 API를 제어하는 파이썬 패키지입니다.

 

이제 Jupyter note환경에서 셀리니움을 이용해서 웹 브라우저를 컨트롤해보겠습니다.

 

 

(3) 간단한 브라우저 컨트롤

우선 selenium으로 부터 webdriver을 import 시켜주고

selenium을 사용할 수 있는 chrome창을 생성해줍니다.

from selenium import webdriver
driver = webdriver.Chrome('./chromedriver.exe')

 

위와 같이 셀레니움을 이용할 수 있는 빈 chrome창이 뜹니다.

이제 빈 chrome창에 url를 넣어서 해당 url로 이동하게 코드를 짜고 run 시킵니다.

 

 

url = 'https://www.naver.com'
driver.get(url)

해당 창이 네이버로 이동한 것을 확인할 수 있습니다.

 

① 검색(입력)

이제 네이버에서 특정 단어를 검색할 수 있도록 해보겠습니다.

그러기 위해서 검색창을 접근할 수 있는 주소가 필요한데

셀레니움은 xpath라는 주소로 특정 요소들에 접근할 수 있습니다.

네이버의 검색창 xpath는 다음과 같이 알아낼 수 있습니다.

역시나 개발자 도구(f12)를 사용하여 검색창의 코드가 어디 있는지 알아낸 후

해당 코드에 [오른쪽 마우스] -> [copy] -> [Copy Xpath]로 xpath의 주소를 복사할 수 있습니다.

 

복사한 Xpath경로를 가지고 다음과 같이 코드를 작성하고 run 시킵니다.

key_word = input('키워드를 입력하세요 :')
driver.find_element_by_xpath('//*[@id="query"]').send_keys(f'{key_word}' + '\n')

그러면 네이버 검색창에 자동으로 크롤링이 검색창에 입력되고

검색된 페이지로 이동하는 것을 확인할 수 있습니다. ( '\n'을 같이 써줬기 때문 )

(필자의 경우 입력을 시키게 하고 입력된 값을 네이버 검색창에 입력되고 해당 페이지로 이동시키게 함)

 

driver.find_element_by_xpath(' ') : 영어 그대로 xpath의 요소를 찾아냄

.send_keys(' ') : 괄호 안의 문장을 보냄

\n : 엔터 (검색 창에 검색단어 입력 후 엔터 쳐서 이동하기 위함)

 

 

② 클릭

이번엔 특정 카테고리 요소를 클릭해 보겠습니다.

네이버의 뉴스 카테고리를 클릭시키게 해서 해당 페이지로 이동시키게 해보겠습니다.

마찬가지로 뉴스 버튼의 xpath를 알아냅니다.

다음 코드를 run 시킵니다.

driver.find_element_by_xpath('//*[@id="NM_FAVORITE"]/div[1]/ul[2]/li[2]/a').click() 

그러면 뉴스 버튼을 클릭해서 해당 페이지로 이동이 됩니다.

(진짜 너무 재밌고 신기했어요..... ㅎㅎ)

 

.click() : 해당 xpath의 요소를 클릭시키게 하는 메소드

 

 

이렇게 셀레니움은 웹 브라우저를 컨트롤할 수 있습니다.

(증~말 신기해요!)

 

이를 통해서 웹 상의 정보들을 크롤링할 때 사람이 직접 클릭하거나 입력하는 과정을 자동화해줌으로써

쉽게 크롤링을 할 수 있게 해줍니다.

맨 처음에 말했듯이 정적, 동적 페이지가 크롤링을 하기 힘들 경우 정말 유용하게 사용됩니다.

 

Comments