웹 스크래핑 (2) - Selenium

Junho_Mun·2025년 9월 7일

1. 동적 사이트에 Selenium 를 사용하는 이유

일반적으로 웹 사이트는 정적(Static) 사이트와 동적(Dynamic) 사이트로 나뉜다.

  • 정적 사이트 : 모든 정보가 HTML 코드 안에 들어있어, requests 같은 라이브러리로 HTML만 가져와도 모든 정보를 볼 수 있다.
  • 동적 사이트 : 뼈대만 있고 내용은 비어있는 HTML 코드만이 있으며, 사용자가 스크롤 하거나 버튼을 클릭하는 등의 행동을 할 때마다 JavaScript가 서버와 통신해 데이터를 채워넣는다.
    이때 requests라이브러리는 JavaScript를 실행하지 못하기에 정보가 채워지지 않은 HTML 만 가져올 수 있는데, Selenium 라이브러리를 활용하면 실제 웹 브라우저를 실행시켜 사용자의 행동을 흉내내어 JavaScript를 실행할 수 있게 되어 정보가 담긴 HTML를 불러올 수 있게 된다.

2. Selenium 이란?

Selenium은 원래 웹 브라우저 자동화 도구 이다. 코드를 통해 웹 브라우저에서 사람이 할 수 있는 거의 모든 일(클릭, 스크롤, 텍스트 입력, 창 이동 등)을 제어할 수 있어, 웹 크롤링이나 매크로 제작에도 널리 쓰인다.

그 중 핵심 요소는 WebDriver 인데, 우리가 작성한 코드와 웹 브라우저(Chrome 등) 사이에서 명령을 전달하는 역할을 한다.
Selenium을 활용한 웹 스크래핑의 주요 흐름은 다음과 같다.

  1. WebDriver 설정 및 브라우저 실행
  2. 페이지 이동
  3. 요소 찾기 및 상호작용
  4. 데이터 추출
  5. 브라우저 종료

우선 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

3. Selenium을 활용하여 오늘 날씨 스크래핑 하기

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은 간단한 명령어를 조합하여 웹 브라우저를 제어하는 자동화 도구이다 (매크로..)!! 해당 라이브러리는 확장하여 웹 크롤링 봇으로도 사용할 수 있으니 잘 공부해두면 좋을 듯 하다.

profile
Bioinformatics and Data science

0개의 댓글