이렇게 나오면 완성 ( 순위 / 곡 제목 / 가수를 스크래핑 )

 

1. 크롤링 준비하기 

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://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)

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

URL만 크롤링할 사이트로 변경 후 print{soup) 잘 나오는 실행 시켜보기

 

밑줄 친 곳 크롤링 copy -> copy selector

 

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)

#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

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

#body-content 크롤링 할 부분 차례대로 넣어 놓기

 

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

for music in musics:
        rank = music.select_one('td.number').text[0:2].strip()
        title = music.select_one('td.info > a.title.ellipsis').text.strip()
        artist = music.select_one('td.info > a.artist.ellipsis').text


        print(rank,title,artist)

musics = soup.select(' ') 부분에 동일한 부분까지 #body ~ tr 까지 복, 붙

 

for문 작성 

rank = music.select_one( ' ' ) 틀린 부분 td부터 복, 붙 동일하게 title, artist도 작성

 

 

 

rank = music.select_one('td.number').text

.text 출력 결과 // 공백과 순위상승 필요 없는 글씨까지 출력 됨

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

.text[0:2] 출력 결과 // 앞에서 두글자만 끊기 // 필요 없는 글씨 삭제되서 출력 // 아직 공백 존재

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

.strip() 으로 공백까지 제거된 모습

 

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')

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

for music in musics:
        rank = music.select_one('td.number').text[0:2].strip()
        title = music.select_one('td.info > a.title.ellipsis').text.strip()
        artist = music.select_one('td.info > a.artist.ellipsis').text


        print(rank, title, artist)

완성본

 

 

 

 

15위 부분에서 19금 공백 확인
19금 아이콘떄문에 저렇게 표시 되는거 같음

for music in musics:
        rank = music.select_one('td.number').text[0:2].strip()
        title = music.select_one('td.info > a.title.ellipsis').text.strip()
        artist = music.select_one('td.info > a.artist.ellipsis').text
        if rank == "15":
            title = title.replace("\n", "");
            title = title.replace("  ", "");

        print(rank, title, artist)

"\n"은 줄바꿈을 ""로 바꿔서 제거해주고 그 아래 부분은 공백을 ""으로 변환해 제거

공백 제거 완료

 

+ Recent posts