import requests as req
res = req.get("https://www.melon.com")
res
#<Response [406]> 에러코드 발생
head = {'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'}
req.get("https://www.melon.com",headers =head)
#<Response [200]> 정상 요청, 응답 완료
res = req.get("https://https://www.melon.com/chart/index.htm",headers = head)
from bs4 import BeautifulSoup as bs
soup = bs(res.text,"lxml")
title = soup.select("div.ellipsis rank01 > span > a")
#클래스가 두 개라면 공백이 생기게 되는데 공백을 없애고 .로 이어준다.
song = soup.select("div.ellipsis.rank01 > span > a")
singer = soup.select("div.ellipsis.rank02 > a")
데이터의 개수가 정해진 경우에는 반드시 데이터 검증이 필요하다. 데이터의 길이, 데이터의 중복여부를 확인하자
song_list = []
singer_list = []
for i in range(len(song)):
song_list.append(song[i].text)
singer_list.append(singer[i].text)
import pandas as pd
dic = {"가수이름" : singer_list, "노래제목" : song_list}
melon = pd.DataFrame(dic)
melon
melon.to_csv("멜론차트.csv", encoding="euc-kr")