[Week 03] 지니뮤직 웹스크래핑하기

다른 부분은 어렵지 않았으나, 노래 제목을 떼 올 때 어려웠다.
예를 들면 노래 제목만 나와야 하는 상황에, "19금" 단어+공백이 함께 출력되기 때문...
이 부분은 if 문을 사용해 title 안에 '19금' 단어가 있을 경우, .strip을 사용해 단어를 제거해주고, title을 재 정의해주는 방법을 사용했다.

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&rtm=N',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')
# 순위 셀렉트
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.number

# 노래 제목 셀렉트
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis

# 가수 이름 셀렉트
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.artist.ellipsis

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

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

    title = tr.select_one('td.info > a.title.ellipsis').text.strip()
    if "19금" in title:
        title = title.strip("19금")
        title = title.strip()

    artist = tr.select_one('a.artist.ellipsis').text


    doc = {
        'rank' : rank,
        'title' : title,
        'artist' : artist
    }
    db.ranking.insert_one(doc)

좋은 웹페이지 즐겨찾기