Why Not SW CAMP 5기/수업 기록

[2월 3주차-2/18(2)]MelOn, Bugs, Genie 크롤링 후 Excel 파일로 저장 및 통합 🎵

rubii 2025. 2. 18. 13:48

웹 크롤링을 활용하여 MelOn, Bugs, Genie의 실시간 음악 차트 데이터를 수집하고, 이를 Excel 파일로 저장한 후 하나의 파일로 통합하는 방법을 소개한다.


1️⃣ MelOn 차트 크롤링 🎶

MelOn의 실시간 차트 데이터를 크롤링하여 엑셀 파일로 저장한다.

from bs4 import BeautifulSoup
from selenium import webdriver
import pandas as pd

# 크롬 브라우저 실행
driver = webdriver.Chrome()
url = 'http://www.melon.com/chart/index.htm'
driver.get(url)
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')

# 데이터 저장 리스트 생성
song_data = []
rank = 1

# 노래 정보 가져오기
songs = soup.select('table > tbody > tr')
for song in songs:
    title = song.select('div.rank01 > span > a')[0].text
    singer = song.select('div.rank02 > span > a')[0].text
    song_data.append(['Melon', rank, title, singer])
    rank += 1

# DataFrame 생성 및 저장
columns = ['서비스', '순위', '타이틀', '가수']
pd_data = pd.DataFrame(song_data, columns=columns)
pd_data.to_excel('./files/melon.xlsx', index=False)

2️⃣ Bugs 차트 크롤링 🎵

Bugs의 실시간 차트 데이터를 크롤링하여 엑셀 파일로 저장한다.

from bs4 import BeautifulSoup
from selenium import webdriver
import pandas as pd

# 크롬 브라우저 실행
driver = webdriver.Chrome()
url = 'http://music.bugs.co.kr/chart'
driver.get(url)
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')

# 데이터 저장 리스트 생성
song_data = []
rank = 1

# 노래 정보 가져오기
songs = soup.select('table.byChart > tbody > tr')
for song in songs:
    title = song.select('p.title > a')[0].text
    singer = song.select('p.artist > a')[0].text
    song_data.append(['Bugs', rank, title, singer])
    rank += 1

# DataFrame 생성 및 저장
columns = ['서비스', '순위', '타이틀', '가수']
pd_data = pd.DataFrame(song_data, columns=columns)
pd_data.to_excel('./files/bugs.xlsx', index=False)

3️⃣ Genie 차트 크롤링 🎼

Genie의 실시간 차트 데이터를 크롤링하여 엑셀 파일로 저장한다.

from bs4 import BeautifulSoup
from selenium import webdriver
import pandas as pd

# 크롬 브라우저 실행
driver = webdriver.Chrome()

# Genie 차트 URL (1~50위 & 51~100위 분리)
url1 = 'http://www.genie.co.kr/chart/top200'
driver.get(url1)
html1 = driver.page_source
soup1 = BeautifulSoup(html1, 'html.parser')

url2 = 'https://www.genie.co.kr/chart/top200?ditc=D&ymd=20250218&hh=11&rtm=Y&pg=2'
driver.get(url2)
html2 = driver.page_source
soup2 = BeautifulSoup(html2, 'html.parser')

# 데이터 저장 리스트 생성
song_data = []
rank = 1

# 1~50위 크롤링
songs1 = soup1.select('table > tbody> tr')
for song in songs1:
    title = song.select('td.info > a.title')[0].text.strip()
    singer = song.select('td.info > a.artist')[0].text
    song_data.append(['Genie', rank, title, singer])
    rank += 1

# 51~100위 크롤링
songs2 = soup2.select('table > tbody> tr')
for song in songs2:
    title = song.select('td.info > a.title')[0].text.strip()
    singer = song.select('td.info > a.artist')[0].text
    song_data.append(['Genie', rank, title, singer])
    rank += 1

# DataFrame 생성 및 저장
columns = ['서비스', '순위', '타이틀', '가수']
pd_data = pd.DataFrame(song_data, columns=columns)
pd_data.to_excel('./files/genie.xlsx', index=False)

4️⃣ 크롤링한 엑셀 파일 통합 📊

MelOn, Bugs, Genie에서 가져온 데이터를 하나의 Excel 파일로 합친다.

import pandas as pd

# 크롤링한 엑셀 파일 리스트
excel_names = ['./files/melon.xlsx', './files/bugs.xlsx', './files/genie.xlsx']

# 데이터프레임 초기화
appended_data = pd.DataFrame()

# 각 파일을 읽어와 하나의 데이터프레임으로 합치기
for name in excel_names:
    pd_data = pd.read_excel(name)
    appended_data = pd.concat([appended_data, pd_data], ignore_index=True)

# 샘플 출력
appended_data.sample(5)
'''
       서비스  순위          타이틀          가수
3    Melon   4     Whiplash       aespa
274  Genie  75  미안해 미워해 사랑해       Crush
66   Melon  67     미치게 그리워서         황가람
272  Genie  73   earthquake  지수 (JISOO)
101   Bugs   2     ATTITUDE   IVE (아이브)
'''

# 통합 데이터 엑셀 저장
appended_data.to_excel('./files/total.xlsx', index=False)

🎯 정리 📌

MelOn, Bugs, Genie의 실시간 차트 데이터를 크롤링
각 데이터를 DataFrame으로 변환하여 Excel로 저장
저장된 개별 Excel 파일을 하나로 합쳐 최종 파일 생성

이제 한 번에 음악 차트 데이터를 분석하고 활용할 수 있다! 🚀