개발 일지✨

[3주차] 지니뮤직 Top50 스크래핑하기

하루 2021. 12. 12. 22:51

과제

지니뮤직의 1~50위 곡을 스크래핑한다.

순위 / 곡 제목 / 가수 를 스크래핑 하면 된다.

 

순위와 곡제목이 깔끔하게 나오지 않을 것이다. 옆에 여백이 있다던가, 다른 글씨도 나온다던가 등.. 

파이썬 문자열 자르기, 파이썬 공백 제거 등을 검색하여 알아보자!

🙋‍♀️ 힌트: 파이썬 내장함수인 strip( ) 을 이용해서 출력해보자!

 

예시

 

🤔 내가 작성한 코드

더보기
import requests
from bs4 import BeautifulSoup

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta

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=D&ymd=20200403&hh=23&rtm=N&pg=1',headers=headers)

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

trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')

for tr in trs:
    rank = tr.select_one('td.number').text.split()[0]
    title = tr.select_one('td.info > a.title.ellipsis').text.strip()
    artist = tr.select_one('td.info > a.artist.ellipsis').text
    print(rank, title, artist)

 

 

🚨 문제와 해결

노래 제목과 가수를 가져오는데에는 문제가 없었는데, rank를 가져왔더니 순위 상승/하강에 대한 텍스트도 같이 딸려왔다.

for tr in trs:
    rank = tr.select_one('td.number').text

그래서 일단 공백을 제거해보았다.

?!

공백을 제거하니 리스트의 형태로 묶여 있는 것을 볼 수 있었다.

그래서 첫번째 순위만 가져오도록 [0]을 해주었더니 해결되었다!

 

강의 해설 코드와 비교해보니 강의에서는 다음과 같이 했다.

rank = tr.select_one('td.number').text[0:2].strip()

1~50위를 출력했으므로 50까지의 숫자가 나오는데 50은 2개의 숫자니까 .text[0:2]로 0번째에서 2번째까지 잘라준 것이라고 한다. 1~9까지는 공백이 생기므로 .strip()을 붙여 공백을 없애준 것이다.

 

🎁 결과

짝짝짝 잘 출력되었다! 👏