프로젝트

[ 프로젝트 ] 프로젝트 관련 스터디 _크롤링_ 셀레니움_기초

박찬영 2021. 6. 29. 16:39

저번 글에서는 bs4의 기본적인 크롤링 구조를 살펴봤습니다. 아주 기본적인 것입니다.

이번에는 다른 라이브러리 셀레니움에 대해서 구조를 살펴보겠습니다. 

 

셀레니움은 웹페이지의 다양한 기능들을 원격으로 테스트하는 프레임워크로 만들어졌습니다. 

 

셀레니움 역시 bs4와 전체적인 프레임은 비슷합니다. 

 

간단하게 예시를 살펴봅시다. 

 

셀레니움을 사용하기 위해서는 사용자가 사용하는 웹 드라이버가 필요합니다. 

 

저는 크롬을 사용하기 때문에 크롬 드라이버를 사용합니다.  (크롬 드라이버 설치)

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

#드라이버 생성 설치 경로 정확하게 기재 (드라이버 로드)
chromedriver = '/Users/chanyoung_park/Downloads/chromedriver'
#드라이버 사용하겠다.
driver = webdriver.Chrome(chromedriver)

라이브러리를 임포트해주고 설치한 웹 드라이버 경로로 driver를 지정해줍니다. 

#크롤링할 사이트 호출
driver.get("http://www.python.org")

#Selenium은 웹 테스트를 위한 프레임워크로 다음과 같은 방식으로 웹테스트를 진행함(참고)
assert "Python" in driver.title #제대로 열려있는지 확인하려면 파이썬 문구가 없으면 에러를 내라 .... 

driver.get을 통해서 url을 가져와 사이트를 호출합니다. 

 

assert "" in 구문은 호출한 python 사이트가 제대로 열렸는지 확인하기 위해서 사이트의 title 정보에 "Python"이 없으면 에러를 return하는 구문입니다. 

 

이렇게 웹 페이지 호출에 성공했으면 다양한 방법으로 원하는 데이터에 접근합니다. 

주요 함수는 다음과 같습니다.

- find_element_by_name() : 최초 발견한 name으로 가져오기 
- find_elements_by_name() : name이 동일한 모든 리스트 가져오기
- find_element_by_tag_name() : tag name 
- find_elements_by_tag_name() : every tag name
- find_element_by_id
- find_element_by_class_name
- find_element_by_css_selector
- find_element_by_xpath

 

또한 셀레니움은 웹 페이지의 검색창 또는 클릭 등 다양한 액션 이벤트를 수행할 수 있습니다.

elem = driver.find_element_by_name("q")


# input text 초기화
elem.clear()
# 키 이벤트 전송
elem.send_keys("python")
#엔터 입력
elem.send_keys(Keys.RETURN)

위 명령을 실행하게 되면 파이썬 홈페이지 검색창을 찾고 - 검색창을 초기화하고 - "python"을 입력하고 - 엔터키를 누릅니다. 

 

이런식으로 셀레니움은 웹 드라이버를 통해서 웹 페이지에 접근하여 다양한 액션들을 수행하면서 원하는 데이터를 수집할 수 있습니다.