일반적으로 웹 사이트는 정적(Static) 사이트와 동적(Dynamic) 사이트로 나뉜다.
requests 같은 라이브러리로 HTML만 가져와도 모든 정보를 볼 수 있다.requests라이브러리는 JavaScript를 실행하지 못하기에 정보가 채워지지 않은 HTML 만 가져올 수 있는데, Selenium 라이브러리를 활용하면 실제 웹 브라우저를 실행시켜 사용자의 행동을 흉내내어 JavaScript를 실행할 수 있게 되어 정보가 담긴 HTML를 불러올 수 있게 된다.Selenium은 원래 웹 브라우저 자동화 도구 이다. 코드를 통해 웹 브라우저에서 사람이 할 수 있는 거의 모든 일(클릭, 스크롤, 텍스트 입력, 창 이동 등)을 제어할 수 있어, 웹 크롤링이나 매크로 제작에도 널리 쓰인다.
그 중 핵심 요소는 WebDriver 인데, 우리가 작성한 코드와 웹 브라우저(Chrome 등) 사이에서 명령을 전달하는 역할을 한다.
Selenium을 활용한 웹 스크래핑의 주요 흐름은 다음과 같다.
우선 Selenium을 사용하기 위해 라이브러리를 설치하여야 한다.
pip install selenium webdriver-manager
다음은 selenium의 간단한 사용법 모음이다.
webdriver.Chrome() : 제어할 Chrome 브라우저를 여는 명령어driver.get("URL") : URL 주소로 이동한다.driver.find_element(By.방식, "값") : 웹 페이지에서 원하는 HTML 요소를 찾는 명령어이다.By.ID : id 속성으로 찾기By.NAME : name 속성으로 찾기By.CSS_SELECTOR : CSS 선택자로 찾기By.XPATH : XPATH 경로로 찾기.send_keys("텍스트") : 찾은 요소에 키보드로 텍스트를 입력한다..click() : 찾은 요소를 마우스로 클릭한다..text : 찾은 요소 안에 있는 텍스트를 가져온다.driver.quit() : 열려있는 모든 브라우저 창을 닫고 종료한다.이제 google에 접속하여서 "경북대학교"를 검색하고 페이지의 title을 가져오는 코드를 작성해보았다.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
print("OPEN BROWSER")
driver.get("http://www.google.com")
print("going to Google")
# 페이지가 로드 될 때까지 대기
time.sleep(2)
# 요소 찾기
search_box = driver.find_element(By.NAME,"q")
print("find search box")
# 요소에 경북대학교 검색하고 엔터
search_box.send_keys("경북대학교")
search_box.send_keys(Keys.RETURN)
print("processing search")
# 페이지가 로드 될 때까지 대기
time.sleep(3)
print(f"Now page title : '{driver.title}'")
driver.quit()
print("close browser")
OPEN BROWSER
going to Google
find search box
processing search
Now page title : 'https://www.google.com/search?q=%EA%B2%BD%EB%B6%819%........
close browser
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://weather.naver.com/today/06170105")
time.sleep(3)
temperature = driver.find_element(By.CSS_SELECTOR, ".card_now_temperature")
location = driver.find_element(By.CSS_SELECTOR, ".location_name")
weather = driver.find_element(By.CSS_SELECTOR, ".card_date_emphasis")
print(f"현재 위치: {location.text}")
print(f"현재 날씨: {weather.text}")
print(f"현재 온도: {temperature.text}")
driver.quit()
현재 위치: 서구 중리동
현재 날씨: 흐림
현재 온도: 27°
Selenium을 활용하여 직접 웹 브라우저로 접근하여 동적 사이트의 정보를 정상적으로 읽는 모습을 볼 수 있다 !!
보이는거처럼 Selenium은 간단한 명령어를 조합하여 웹 브라우저를 제어하는 자동화 도구이다 (매크로..)!! 해당 라이브러리는 확장하여 웹 크롤링 봇으로도 사용할 수 있으니 잘 공부해두면 좋을 듯 하다.