오늘음 음원 차트 크롤링을 해보겠다.
멜론 일간 TOP 100 페이지에 가서 주소를 복사해서 request.get 요청에 넣어준다.
data = requests.get('https://www.melon.com/chart/day/index.htm',headers=headers)
해당 페이지에서 우클릭을 하고 검사를 누르면 다음과 같은 페이지가 뜬다.
곡 순위와 제목, 가수를 출력할 것이기 때문에 내가 필요한 선택자를 찾아야 한다.
처음에는 선택자를 하나하나 적었는데 좋은 기능이 있었다.
내가 필요한 부분에 가서 우클릭을 하고 복사 -> selector 복사를 누르면 내가 원하는 선택자가 복사된다.
각 곡마다 tr로 되어있기 때문에 soup.select를 통해 trs로 묶은 뒤, for 문을 통해 모든 순위의 곡을 출력한다.
trs = soup.select('#frm > div > table > tbody > tr')
다음과 같은 구성에서 순위, 곡 제목, 가수명에 해당하는 선택자를 찾아 출력해주면 된다.
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)