Database

Chapter 5-32. Mini Project : 예스24 베스트셀러 데이터 수집 후 데이터 분석하기(3/7)

Chansman 2025. 3. 24. 19:01

 

📌 개념 정리

이 글에서는 Selenium을 사용해 웹 페이지에서 데이터를 수집하는 기본적인 방법과 프로세스를 설명합니다. Selenium은 웹 브라우저 자동화 도구로, 실제 사용자가 브라우저에서 수행하는 동작을 프로그램적으로 제어할 수 있도록 해줍니다.

특히 웹 페이지에서 특정 데이터를 크롤링할 때 Selenium을 자주 사용하는 이유는:

  • 자바스크립트로 동적 생성된 페이지에서도 데이터를 추출할 수 있음
  • 클릭, 스크롤 등 실제 사용자 액션을 모방하여 데이터를 수집 가능

이러한 특징 덕분에 BeautifulSoup 등 정적 페이지 크롤링 도구의 한계를 극복할 수 있습니다.


🚦 동작 원리 및 구조

다음과 같은 프로세스로 동작합니다:

  1. 웹 드라이버 실행: Selenium의 웹 드라이버를 실행하여 자동화 브라우저를 연다.
  2. 페이지 접속: 원하는 웹 페이지 URL로 이동한다.
  3. HTML 요소 찾기: 페이지의 데이터를 가지고 있는 HTML 요소를 찾아 데이터를 추출한다.
  4. 데이터 정제: 추출된 데이터를 필요한 형태로 변형 및 정제한다.

💻 코드 예시 및 흐름 분석

코드 예시와 상세한 흐름 분석입니다:

# 웹 페이지 접속
browser.get(link_list[0])

# 책 제목 가져오기
title = browser.find_element(By.CLASS_NAME, 'gd_name').text
# 클래스가 'gd_name'인 요소는 책의 제목을 포함하고 있음

# 저자 가져오기
author = browser.find_element(By.CLASS_NAME, 'gd_auth').text
# 클래스가 'gd_auth'인 요소에서 저자명을 가져옴

# 출판사 정보
publisher = browser.find_element(By.CLASS_NAME, 'gd_pub').text
# 출판사 정보를 가지고 있는 요소

# 출간일 가져오기
publishing = browser.find_element(By.CLASS_NAME, 'gd_date').text
# 책이 출간된 날짜 정보를 추출

# 평점 추출하기
rating = browser.find_element(By.CLASS_NAME, 'yes_b').text
# 사용자 평점을 제공하는 요소의 텍스트

# 리뷰 개수 추출
reviews = browser.find_element(By.CLASS_NAME, 'txC_blue').text
# 리뷰 개수를 나타내는 클래스의 텍스트

# 판매량 추출 및 정제
sales = browser.find_element(By.CLASS_NAME, 'gd_sellNum').text.split(" ")[2]
# 판매량 텍스트에서 공백을 기준으로 나눠 3번째 단어만 추출

# 가격 추출 및 정제
price = browser.find_element(By.CLASS_NAME, 'yes_m').text[:-1]
# 가격 끝에 있는 '원' 문자를 제외한 숫자만 가져옴

# 순위 정보 추출
ranking = browser.find_element(By.CLASS_NAME, 'gd_best').find_element(By.TAG_NAME, 'a').text
# 순위 정보를 포함한 하위 링크(a 태그)의 텍스트

ranking_details = browser.find_element(By.CLASS_NAME, 'gd_best').text.split(" | ")
ranking1 = ranking_details[0]
ranking2 = ranking_details[1]
# 전체 순위 정보를 '|' 기준으로 나눠 카테고리별 상세 순위로 나눔

왜 이런 방식으로 데이터를 추출할까요?

  • 대부분 웹 페이지는 특정 클래스명을 기준으로 원하는 정보를 표시합니다. Selenium은 이 클래스명을 통해 쉽고 빠르게 원하는 데이터를 찾을 수 있도록 해줍니니다.
  • 문자열을 split하거나 특정 문자를 제거하는 이유는 추출된 텍스트가 깔끔한 데이터 형식으로 변환되어 사용하기 편리하도록 하기 위함입니다.

🧪 실전 사례

실제 프로젝트에서 활용할 수 있는 사례입니다:

  • 온라인 서점에서 매일 인기 책 정보를 자동으로 수집하여 데이터베이스에 저장
  • 경쟁 사이트와 가격 비교 자동화 시스템 구축
  • 정기적인 상품 리뷰 및 평점 데이터 수집 후 분석 시스템 구축

🧠 고급 팁 및 자주 하는 실수

✔️ 고급 팁

  • 동적 웹페이지에서는 반드시 WebDriverWait을 활용하여 요소가 완전히 로딩될 때까지 기다린 후 데이터를 추출하세요.
  • XPath 또는 CSS Selector를 이용하면 더욱 정확하고 유연한 요소 탐색이 가능합니다.

자주 하는 실수

  • 클래스 이름이 변경될 때마다 코드가 깨질 수 있으므로, 사이트 변경에 대비해 주기적으로 유지 보수를 수행해야 합니다.
  • 단순히 time.sleep()만 사용하면 페이지 로딩이 느릴 때 데이터가 누락될 수 있습니다. 이를 방지하기 위해 꼭 Selenium의 명시적 대기를 활용하세요.

마무리 요약 및 복습 포인트

  • Selenium을 이용하면 복잡하고 동적인 웹사이트에서도 쉽게 데이터를 추출할 수 있습니다.
  • 데이터를 정확히 찾기 위해 클래스명과 같은 HTML 요소를 적극 활용하고, 추출된 데이터를 명확히 정리하여 후속 작업에 편하게 활용해야 합니다.
  • 실제 환경에서는 페이지 로딩 속도, 동적 요소 로딩, 클래스명 변경과 같은 요소를 항상 주의해야 합니다.

이 내용을 바탕으로 여러분의 웹 크롤링 프로젝트를 성공적으로 구축하시길 바랍니다! 🚀