-
[2월 3주차-2/18(3)]📊 YouTube 채널 랭킹 크롤링 및 데이터 분석Why Not SW CAMP 5기/수업 기록 2025. 2. 18. 16:01
YouTube 채널 랭킹 데이터를 크롤링하여 구독자 수, 조회 수, 동영상 수를 수집하고, Excel 파일로 저장한 후 시각화하는 과정을 소개한다. 🚀
1️⃣ YouTube 채널 랭킹 크롤링 🕵️♂️
Selenium을 이용해 YouTube 랭킹 사이트(10페이지) 데이터를 크롤링한다.
# 라이브러리 불러오기 from selenium import webdriver from bs4 import BeautifulSoup import pandas as pd import time import re # 크롬 브라우저 실행 browser = webdriver.Chrome() # 결과 저장 리스트 results = [] # [title, category, subscriber, view, video] # 1~10페이지 크롤링 for page in range(1, 11): url = f'https://youtube-rank.com/board/bbs/board.php?bo_table=youtube&page={page}' browser.get(url) # 2초 대기 time.sleep(2) # HTML 가져오기 html = browser.page_source soup = BeautifulSoup(html, 'html.parser') # 채널 리스트 추출 channel_list = soup.select('form > table > tbody > tr') for channel in channel_list: # 채널명 추출 (특수문자 제거) title = re.sub(r'[^\w\s가-힣]', '', channel.select('h1 > a')[0].text.strip()) # 카테고리 추출 category = channel.select('p.category')[0].text.strip() # 구독자 수 추출 subscriber = channel.select('.subscriber_cnt')[0].text # 조회 수 추출 view = channel.select('.view_cnt')[0].text # 동영상 수 추출 video = channel.select('.video_cnt')[0].text data = [title, category, subscriber, view, video] results.append(data) # 데이터프레임 생성 및 Excel 저장 df = pd.DataFrame(results, columns=['title', 'category', 'subscriber', 'view', 'video']) df.to_excel('./files/youtube_rank.xlsx', index=False)✅ YouTube 랭킹 사이트에서 1~10페이지 데이터를 크롤링하여 엑셀 파일로 저장!
df.head() ''' title category subscriber view video 0 BLACKPINK [음악/댄스/가수] 9590만 378억7825만 604개 1 김프로KIMPRO [BJ/인물/연예인] 8690만 547억3689만 2,979개 2 BANGTANTV [음악/댄스/가수] 7980만 244억0527만 2,699개 3 HYBE LABELS [음악/댄스/가수] 7650만 380억8129만 2,294개 4 Mark Rober [미분류] 6430만 102억4266만 196개 '''
2️⃣ Excel 저장 오류 해결 ⚠️
특수문자가 포함된 경우, Excel에서 "cannot be used in worksheets." 오류가 발생할 수 있다. 이를 해결하기 위해 한글, 영문, 숫자, 공백을 제외한 모든 특수문자를 제거해야 한다.
✅ 해결 방법: re.sub() 사용
import re # 특수문자 제거 clean_text = re.sub(r'[^\w\s가-힣]', '', text)📌 r'[^\w\s가-힣]'의 의미:
- \w → 영문, 숫자, _ 포함
- \s → 공백(space, tab, 줄바꿈 포함)
- 가-힣 → 한글 범위
- ^ → 부정(NOT), 즉 위의 문자들을 제외한 나머지 제거
✅ Excel 저장 오류 없이 클린한 데이터를 저장 가능!
3️⃣ YouTube 데이터 분석 및 시각화 📊
Excel 파일을 불러와 카테고리별 구독자 수와 채널 수를 분석하고 시각화한다.
import pandas as pd import matplotlib.pyplot as plt from matplotlib import font_manager, rc import platform # 한글 폰트 설정 if platform.system() == 'Darwin': rc('font', family='AppleGothic') elif platform.system() == 'Windows': path = 'c:/Windows/Fonts/malgun.ttf' font_name = font_manager.FontProperties(fname=path).get_name() rc('font', family=font_name) else: print("sorry") # 데이터 불러오기 df = pd.read_excel('./files/youtube_rank.xlsx') df.head()📌 데이터 예시
title category subscriber view video 0 BLACKPINK [음악/댄스/가수] 9590만 378억7825만 604개 1 김프로KIMPRO [BJ/인물/연예인] 8690만 547억3689만 2,979개 2 BANGTANTV [음악/댄스/가수] 7980만 244억0527만 2,699개
4️⃣ 데이터 변환 및 분석 🔍
구독자 수를 정수형 데이터로 변환하여 분석한다.
df['replaced_subscriber'] = df['subscriber'].str.replace('만', '0000').astype('int')📌 구독자 수, 채널 수 피봇 테이블 생성
pivot_df = df.pivot_table(index='category', values='replaced_subscriber', aggfunc=['sum', 'count']) pivot_df.columns = ['subscriber_sum', 'category_count'] pivot_df = pivot_df.reset_index()📌 정렬된 데이터 예시
category subscriber_sum category_count 0 [음악/댄스/가수] 888860000 139 1 [미분류] 782960000 240 2 [키즈/어린이] 464780000 131
5️⃣ 카테고리별 구독자 수 및 채널 수 시각화 📈


# 카테고리별 구독자 수 파이차트 plt.figure(figsize=(12,6)) plt.pie(pivot_df['subscriber_sum'], labels=pivot_df['category'], autopct='%1.1f%%') plt.title('카테고리별 구독자 수') plt.show() # 카테고리별 채널 수 파이차트 plt.figure(figsize=(12,6)) plt.pie(pivot_df['category_count'], labels=pivot_df['category'], autopct='%1.1f%%') plt.title('카테고리별 채널 수') plt.show()✅ 카테고리별 구독자 수와 채널 수를 직관적으로 확인 가능!
🎯 최종 정리 📌
✅ YouTube 랭킹 사이트에서 10페이지 크롤링
✅ Excel 저장 오류(✅ **Excel 저장 오류(\x08` 문제) 해결
✅ 카테고리별 구독자 수 및 채널 수 분석
✅ Matplotlib을 활용한 데이터 시각화이제 YouTube 채널 데이터를 한눈에 분석하고 활용할 수 있다! 🚀
'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[2월 3주차-2/19]왜 우리 동네에는 스타벅스가 없을까? (0) 2025.02.20 [2월 3주차-2/18(4)]📊 월별 외국인 관광객 데이터 전처리 및 통합 분석 (0) 2025.02.19 [2월 3주차-2/18(2)]MelOn, Bugs, Genie 크롤링 후 Excel 파일로 저장 및 통합 🎵 (1) 2025.02.18 [2월 3주차-2/18(1)]웹 스크래핑과 Selenium을 활용한 크롤링 가이드 🚀 (1) 2025.02.18 [2월 3주차-2/17(2)]📊 파이썬 웹 스크래핑으로 삼성전자 주가 데이터 분석하기 (1) 2025.02.17