개발 일지✨
[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()을 붙여 공백을 없애준 것이다.
🎁 결과