웹개발 종합반 3주차 숙제는 지니뮤직의 1-50위 곡을 스크래핑 해보는 것입니다.
숙제자체는 크게 어렵지 않기 때문에 문제 없이 작성하시지만 실제 해당 페이지를 스크래핑 해보면 한가지 문제가 발생합니다.
해당강의에서 제공한 링크인 2021년 7월 기준 월간차트 1-50위 중 15위에 19금 곡이 있다는 것입니다.
이처럼 19금 표시가 있을 경우 실제 작성된 코드도 다른 곡들과는 조금 다르기 때문에 아래 사진처럼 이 곡에서만 공백이 크게 발생합니다.
해당 공백을 없애고 싶다면 19금 icon에 대한 추가적인 코드가 필요합니다 해당 코드를 추가하여 아래와 같이 작성할 수 있습니다.
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.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20210701',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for tr in trs:
title = tr.select_one('td.info > a.title.ellipsis').text.strip()
if "19금" in title:
title = "19금 " + tr.select_one('td.info > a.title.ellipsis').text.strip().lstrip('19금').strip()
rank = tr.select_one('td.number').text[0:2].strip()
artist = tr.select_one('td.info > a.artist.ellipsis').text
print(rank, title, artist)
혹은 아래 코드처럼 작성도 가능합니다.
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.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20210701',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
songs = soup.select('#body-content > div.newest-list > div > table > tbody> tr')
for song in songs:
rank = song.select_one('td.number').text[0:2].strip()
title = song.select_one('td.info > a.title.ellipsis').text.replace('19금', '').strip()
artist = song.select_one('td.info > a.artist.ellipsis').text
print(rank,title,artist)