본문 바로가기
Web Study

음원 차트 크롤링하기

by saoh 2021. 7. 17.

오늘음 음원 차트 크롤링을 해보겠다. 

 

멜론 일간 TOP 100 페이지에 가서 주소를 복사해서 request.get 요청에 넣어준다.

data = requests.get('https://www.melon.com/chart/day/index.htm',headers=headers)

해당 페이지에서 우클릭을 하고 검사를 누르면 다음과 같은 페이지가 뜬다. 

 

 

DevTools

 

곡 순위와 제목, 가수를 출력할 것이기 때문에 내가 필요한 선택자를 찾아야 한다.

 

처음에는 선택자를 하나하나 적었는데 좋은 기능이 있었다.

내가 필요한 부분에 가서 우클릭을 하고 복사 -> selector 복사를 누르면 내가 원하는 선택자가 복사된다.

 

selector copy

각 곡마다 tr로 되어있기 때문에 soup.select를 통해 trs로 묶은 뒤, for 문을 통해 모든 순위의 곡을 출력한다.

trs = soup.select('#frm > div > table > tbody > tr')

 

다음과 같은 구성에서 순위, 곡 제목, 가수명에 해당하는 선택자를 찾아 출력해주면 된다.

 

1위에 대한 html

 

number = tr.select_one('.rank').text
title = tr.select_one('.ellipsis.rank01 > span> a').text
artist = tr.select_one('.ellipsis.rank02 > span > a').text

 

전체 코드

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://www.melon.com/chart/day/index.htm',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

trs = soup.select('#frm > div > table > tbody > tr')

for tr in trs:
    number = tr.select_one('.rank').text
    title = tr.select_one('.ellipsis.rank01 > span > a').text
    artist = tr.select_one('.ellipsis.rank02 > span > a').text
    print(number, title, "-", artist)

 

순위 출력