티스토리 뷰
이번 포스팅에서는 Selenium을 사용해 ‘다나와’(danawa.com)의 검색 페이지에서 제품 정보를 **자동 수집(크롤링)**하고, 그 데이터를 전처리한 뒤, 마지막으로 Seaborn과 Matplotlib 등을 활용해 시각화·분석하는 과정을 다룹니다.
아래 예시는 무선청소기 키워드를 대상으로 진행되었지만, 웹 구조만 파악하면 다른 키워드(예: 노트북, 스마트폰 등)에도 응용 가능합니다.
1. 데이터 수집 (1_Crawling.py)
(1) Selenium을 통한 검색 페이지 제어
- webdriver.Chrome()으로 크롬 브라우저를 열고, 다나와 검색 결과 URL(무선청소기)로 이동
- driver.page_source를 사용해 HTML을 가져옴
from selenium import webdriver
driver = webdriver.Chrome()
url = "http://search.danawa.com/dsearch.php?query=무선청소기&tab=main"
driver.get(url)
- 여기서는 별도 버튼 클릭 없이 단순 검색 URL로 이동
- 만약 더 많은 페이지를 훑고 싶다면, URL 패턴 분석 후 for문으로 여러 페이지를 방문
(2) BeautifulSoup 파싱 및 상품 정보 추출
- Selenium으로 띄워진 페이지의 HTML을 BeautifulSoup에 넘겨, .select()나 .find() 계열 함수를 이용해 상품명, 가격, 스펙 등을 가져옵니다.
from bs4 import BeautifulSoup
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
# 예) 검색 결과 목록에서 상품명, 스펙, 가격을 추출
# (코드 내부에서 광고 상품 등 예외처리 필요)
(3) 여러 페이지 크롤링
- 실제론 10페이지, 20페이지 등 다나와 검색 결과가 많으므로, URL 패턴(&page=2, &page=3 …)을 분석한 뒤 for문으로 반복할 수 있습니다.
- 크롤링 완료 후에는 pandas로 DataFrame을 만든 뒤, 엑셀(예: danawa_crawling_result.xlsx)로 저장해둡니다.
import pandas as pd
# 예시: 수집된 데이터
# product_list = [ [상품명, 스펙 문자열, 가격], ... ]
df = pd.DataFrame(product_list, columns=["상품명","스펙 목록","가격"])
df.to_excel("danawa_crawling_result.xlsx", index=False)
driver.quit()
여기까지 하면 웹에서 데이터 수집이 완료됩니다.
2. 데이터 전처리 (2_Preprocessing.py)
크롤링 결과에는 여러 형태의 텍스트가 섞여 있습니다. 예를 들어 “흡입력: 140AW / 충전시간: 3시간 …” 식의 긴 스펙 문자열을 분할해서, 분석에 필요한 항목(카테고리, 흡입력, 사용시간 등)만 뽑아내야 합니다.
(1) 상품명을 회사명 + 모델명으로 분할
title = "LG전자 코드제로 A9 A978"
split_info = title.split(' ', 1) # ['LG전자', '코드제로 A9 A978']
company, product = split_info[0], split_info[1]
- 브랜드(회사명)와 제품명을 구분
(2) 스펙 목록 파싱
- 크롤링 때 “핸디/스틱청소기 / 헤파필터 / 흡입력: 140AW / 사용시간: 1시간 …” 형태로 저장된 문자열
- ' / '로 split → 각 항목을 순회하며 사용시간, 흡입력 등 키워드가 있는지 검사
- 예:
- if '사용시간' in spec: use_time = spec.split(' ')[1]
- if '흡입력' in spec: suction = spec.split(' ')[1]
(3) 단위 통일
- 예) “3시간 30분” → 210분, “40분” → 40분 …
- 흡입력의 경우 AW(airwatt), Pa(pascal) 등으로 표기되므로 “1AW == 100Pa” 등 임의 기준으로 변환
- 이를 통해 숫자형 칼럼으로 사용 가능
def convert_time_minute(time_str):
# 예: "3시간 30분" -> 210
# "1시간" -> 60
# "40분" -> 40
# 예외처리는 try/except
...
def get_suction(value):
# "140AW" -> 140, "22000Pa" -> 220
...
(4) 최종 전처리 결과
전처리된 데이터를 다시 엑셀(danawa_data_final.xlsx)로 저장하고, 이제 분석 준비가 끝납니다.
pd_data_final.to_excel("danawa_data_final.xlsx", index=False)
3. 시각화 & 분석 (3_Product_Analysis.py)
마지막 단계에서는 pandas, Matplotlib, Seaborn 등을 활용해 통계량(평균, 최대값 등)과 산점도 등을 그려볼 수 있습니다.
(1) 분석 지표 계산
- mean(), max(), describe() 등을 통해 가격, 흡입력, 사용시간 분포 확인
- 예) “평균 가격보다 낮고, 평균 흡입력 이상이며, 평균 사용시간 이상인 모델” 등을 찾아 가성비 모델로 분류
price_mean = data['가격'].mean()
suction_mean = data['흡입력'].mean()
use_time_mean = data['사용시간'].mean()
condition_data = data[
(data['가격'] <= price_mean) &
(data['흡입력'] >= suction_mean) &
(data['사용시간'] >= use_time_mean)
]
(2) Scatter Plot 시각화
- sns.scatterplot()을 이용해 (흡입력 vs. 사용시간) 좌표에 가격을 size로 나타낼 수 있음
- 중심선(평균선)을 plt.plot()으로 그려서, 사분면 해석이 가능
import seaborn as sns
import matplotlib.pyplot as plt
sns.scatterplot(x='흡입력', y='사용시간', size='가격',
hue='회사명', data=data, sizes=(10,1000))
plt.plot([0, max_suction], [mean_use, mean_use], 'r--')
plt.plot([mean_suction, mean_suction], [0, max_use], 'r--')
plt.show()

이렇게 그리면, 한눈에 흡입력-사용시간 상에서 어떤 제품이 고성능인지, 가격은 어느 정도인지 알 수 있습니다.
4. 확장 아이디어
- 크롤링 범위 확대: 여러 키워드(“노트북”, “모니터” 등)에 대해 같은 구조로 데이터를 모을 수 있음
- 데이터 병합: 브랜드별로 추가 정보를 가져와, 매출/리뷰/별점 데이터와 연계 가능
- 머신러닝/클러스터링: 스펙(흡입력, 소비전력, 브러시 종류, 가격 등)으로 모델들을 분류/군집화
- UI 대시보드: Streamlit, Dash 등을 써서 웹 환경에서 필터/정렬을 편리하게 제공
마무리
오늘 오전 수업에서는 이렇게 “1_Crawling.py → 2_Preprocessing.py → 3_Product_Analysis.py” 세 단계로,
- 웹 크롤링 (Selenium + BeautifulSoup)
- 데이터 전처리 (텍스트 파싱, 단위 변환)
- 시각화 & 간단 통계 (가성비 모델 찾기, Scatter Plot)
을 실습했습니다.
핵심 요점은:
- Selenium으로 동적 페이지(검색 결과 등)를 열고, BeautifulSoup으로 필요한 태그만 뽑아내기
- 수집된 텍스트(스펙 문자열)를 꼼꼼하게 파싱해서 숫자형 데이터로 전처리 (단위 통일)
- pandas DataFrame에서 통계/조건 필터/시각화를 통해 가치 있는 분석 결과 도출
이 과정을 숙지하면, 이후 다른 사이트(가격 비교, 리뷰 플랫폼, 중고거래 등)에서도 비슷한 로직을 재사용해 원하는 정보를 자동화하고, 분석~시각화까지 손쉽게 연결해 볼 수 있습니다.
'LG U+ Why Not SW 부트캠프 5기' 카테고리의 다른 글
| 시계열 데이터 분석 및 전처리 (0) | 2025.02.21 |
|---|---|
| 데이터 전처리 및 병원 노쇼(No-show) 분석 (1) | 2025.02.21 |
| 파이썬 기반 웹 크롤링 & 시각화 프로젝트: Selenium + Folium 사례 (1) | 2025.02.20 |
| 웹 스크래핑과 유튜브 데이터 분석을 활용한 데이터 수집 및 시각화 (0) | 2025.02.18 |
| 한글을 표기하기 위한 글꼴 변경(윈도우, macOS에 대해 각각 처리) (0) | 2025.02.18 |
