스파르타코딩_왕초보시작반 3주차

3주차 과제 중 지니뮤직의 1~50위 곡 스크래핑을 하는 것이 있었다.

곡 제목, 가수 이름은 쉽게 가져올 수 있었다. 하지만 순위를 스크래핑하는 과정에서 많은 여백이 나왔다.

이런식으로....

여백을 제거하는 .strip() 명령어를 써도 그런다. 이유는 순위에서 text를 가져오면 뒤에 있는 상승인지 하락인지 하는 텍스트도 가져오기 때문이다. 이러한 상황에서는 스플릿해서 앞의 몇글자만 가져와야만 했다.

그래서 코드를

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

이렇게 짜야한다.text[0:2]는 텍스트에서 0시작점에서 2번째꺼까지 가져온다는 것이다. 나머지는 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[0:2].strip()
    song = tr.select_one('td.info > a.title.ellipsis').text.strip()
    artist = tr.select_one('td.info > a.artist.ellipsis').text.strip()
    print(rank,song,artist)

좋은 웹페이지 즐겨찾기