[3주차 숙제] 지니뮤직 19금 공백 없애기

DevNoteKeeper·2023년 4월 18일
2
post-custom-banner

웹개발 종합반 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)

</해결방법>

profile
강의에서 주로 질문하는 내용에 대한 답변과 각종 오류 해결방법에 대해 알려드립니다.
post-custom-banner

0개의 댓글