본문 바로가기
파이썬/[파이썬을 활용한 웹 크롤링 완벽 가이드]

📌 3. selenium을 이용한 동적 웹페이지 크롤링

by 배불뚝 아저씨 2025. 2. 10.
반응형

1. 이전 강의 리뷰

이전 강의에서는 정적 웹페이지 크롤링을 진행하며, requests와 BeautifulSoup을 활용하여 HTML 데이터를 가져오고 필요한 정보를 추출하는 방법을 배웠습니다.

  • HTTP 요청 및 응답 이해: requests.get()을 이용하여 웹페이지 데이터를 가져오는 방법
  • HTML 구조 분석: BeautifulSoup을 사용하여 원하는 태그 및 클래스 선택
  • CSS 선택자를 활용한 데이터 추출: soup.select()을 이용하여 다양한 요소 가져오기
  • 실전 예제: 뉴스 기사 제목을 가져오고, robots.txt를 확인하는 과정 학습

이번 강의에서는 동적 웹페이지를 다룰 예정입니다. selenium을 활용하여 버튼 클릭, 자동 로그인, 스크롤 내리기 등의 동작을 수행하고 데이터를 수집하는 방법을 익혀봅시다.


2. selenium이란?

selenium은 웹 브라우저를 자동으로 제어할 수 있는 파이썬 라이브러리입니다. requests와 BeautifulSoup으로 접근할 수 없는 자바스크립트 기반 웹페이지를 크롤링하는 데 유용합니다.

✅ selenium을 활용하는 주요 기능

  • 동적 웹페이지 크롤링 (JavaScript로 생성된 콘텐츠 수집)
  • 버튼 클릭, 입력창 자동 입력 등 사용자 조작 자동화
  • 웹사이트 로그인 및 세션 유지
  • 특정 요소가 나타날 때까지 대기 (WebDriverWait)

3. selenium 설치 및 웹 드라이버 설정

✅ 필수 라이브러리 설치

터미널에서 다음 명령어를 실행하여 selenium을 설치합니다.

pip install selenium webdriver-manager

✅ 크롬 드라이버 자동 설치

selenium은 브라우저를 직접 제어하기 위해 웹 드라이버가 필요합니다. webdriver-manager를 사용하면 자동으로 드라이버를 설치할 수 있습니다.

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

# 자동으로 크롬 드라이버 다운로드 및 설정
driver = webdriver.Chrome(ChromeDriverManager().install())

위 코드를 실행하면 크롬 드라이버가 자동으로 다운로드되고 실행됩니다.


4. selenium을 활용한 웹페이지 접근 및 데이터 가져오기

🔹 예제: 네이버 뉴스 페이지에서 기사 제목 가져오기

from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
import time

# 크롬 드라이버 실행
driver = webdriver.Chrome(ChromeDriverManager().install())

# 네이버 뉴스 페이지 열기
driver.get("https://news.naver.com/")
time.sleep(2)  # 페이지 로딩 대기

# 주요 뉴스 기사 제목 가져오기
news_titles = driver.find_elements(By.CLASS_NAME, "cjs_t")
for idx, title in enumerate(news_titles[:5], start=1):
    print(f"{idx}. {title.text}")

# 브라우저 닫기
driver.quit()

반응형

5. 로그인 자동화 (아이디 & 비밀번호 입력)

🔹 예제: 네이버 로그인 자동화

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
import time

# 크롬 드라이버 실행
driver = webdriver.Chrome(ChromeDriverManager().install())

# 네이버 로그인 페이지 열기
driver.get("https://nid.naver.com/nidlogin.login")
time.sleep(2)

# 아이디와 비밀번호 입력
id_box = driver.find_element(By.ID, "id")
pw_box = driver.find_element(By.ID, "pw")
login_button = driver.find_element(By.ID, "log.login")

id_box.send_keys("your_username")  # 여기에 네이버 아이디 입력
pw_box.send_keys("your_password")  # 여기에 네이버 비밀번호 입력
login_button.click()

# 로그인 후 대기
time.sleep(5)

# 브라우저 닫기
driver.quit()

6. 스크롤 내리면서 더 많은 데이터 크롤링하기

🔹 예제: 스크롤 자동 내리기

from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
import time

# 크롬 드라이버 실행
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://news.ycombinator.com/")
time.sleep(2)

# 스크롤을 여러 번 내려서 추가 기사 로드
for _ in range(5):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)

# 크롤링할 데이터 가져오기
titles = driver.find_elements(By.CLASS_NAME, "storylink")
for idx, title in enumerate(titles[:10], start=1):
    print(f"{idx}. {title.text}")

# 브라우저 닫기
driver.quit()

🎯 이번 강의를 마치며

이번 강의에서는 selenium을 활용하여 동적 웹페이지 크롤링을 수행하는 방법을 배웠습니다. 주요 내용은 다음과 같습니다.

  • selenium을 활용하여 웹 브라우저를 자동 제어하는 방법
  • 네이버 뉴스 페이지에서 기사 제목 가져오기 실습
  • 로그인 자동화: 아이디와 비밀번호 입력 후 자동 로그인
  • 스크롤 내리면서 더 많은 데이터 크롤링하는 기법

이제 selenium을 활용하여 복잡한 동적 웹페이지에서도 원하는 데이터를 추출할 수 있습니다! 수고하셨습니다. 


🚀 다음 강의 예고

4부: 크롤링 데이터 정제 및 저장하기

  • pandas를 활용한 크롤링 데이터 가공
  • 정규 표현식(re)을 이용한 텍스트 필터링
  • JSON 및 CSV 파일로 데이터 저장
  • MySQL, SQLite 등 데이터베이스 연동 방법
반응형

댓글