본문 바로가기
Python

파이썬 크롤링 requests, BeautifulSoup 멜론 Top100 차트 데이터 수집

by wanttosleep1111 2023. 1. 18.

파이썬 크롤링 멜론 requests, BeautifulSoup Top100 차트 데이터 수집

 

▶ 목표

  • 가수명(singer_lst), 곡명(song_lst) 수집
  • 랭킹, 가수명, 곡명을 저장할 수 있는 딕셔너리 생성 {'랭킹':rank_lst, '가수명':singer_lst, '곡명':song_lst}
  • pandas를 이용해서 DataFrame 생성하고 엑셀 파일 형식으로 저장

① 멜론 탑100 차트에 접근하여 파이썬 객체 형식으로 가져오기

# pandas, requests, BeautifulSoup 불러오기
import pandas as pd
import requests as req
from bs4 import BeautifulSoup as bs
# header 만들기
header = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}

 

# url, header, response 확인
url = 'https://www.melon.com/chart/index.htm'
res = req.get(url, headers=header)
res

# 파이썬 객체 데이터로 변환
html = bs(res.text,'lxml')
html

 

② 1위~100위 곡명 크롤링하기

F12 개발자도구를 이용해서 곡명이 있는 태그 확인

# 1~100 곡명 크롤링해보기
# song_lst 에 txt만 담아보기
# 클래스명이나 아이디명에 공백은 .으로 대체

# 곡명 데이터에 접근
song = html.select('.ellipsis.rank01>span>a')
# 가져온 곡명 데이터의 text만 for문(for comprehension 방식)을 이용해서 담기
song_lst = [i.text for i in song]
song_lst

 

③ 1위~100위까지 가수명 크롤링하기

 

※ 가수명의 경우 한 곡을 여러 가수가 같이 부를 수 있기 때문에 데이터를 가져올 때 span태그가 있는 쪽으로 접근

singer = html.select('.ellipsis.rank02>span')
singer_lst = [i.text for i in singer]

 

④ 랭킹 리스트를 생성하고 각 리스트의 길이 확인

rank_lst = [i+1 for i in range(len(song_lst))]
print(len(rank_lst))
print(len(singer_lst))
print(len(song_lst))

 

⑤ 딕셔너리 형태로 생성하고 데이터 프레임 만들기

top100 = {'랭킹':rank_lst, '가수명':singer_lst, '곡명':song_lst}
top100_df = pd.DataFrame(top100)
top100_df

 

⑥ 엑셀 형식으로 저장하기

# 엑셀 형식으로 기본 폴더에 index번호가 안들어가게 생성
top100_df.to_excel('./멜론탑100차트.xlsx', index=False)

댓글