Eggs Sunny Side Up
본문 바로가기
Web/Crawling

멜론차트 TOP100 수집하기

by guswn100059 2023. 4. 5.

멜론차트 Top100 수집하기

  • 수집단계
    1. html 문서 요청받기
    2. bs객체화
    3. 데이터 수집(태그 선택자)
    4. 반복하여 여러 개의 데이터 수집
import requests as req # 서버와의 요청 및 응답을 위한 라이브러리
from bs4 import BeautifulSoup as bs # 컴퓨터가 이해하기 쉬운 객체로 변경해주는 라이브러리
# 1. html 문서 요청받기(headers 작업)
url = 'https://www.melon.com/chart/index.htm' # 잘못된 접근
req.get(url)

# 우회접속
h = {'User-Agent' :'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'}
res = req.get(url, headers=h)
res.text
# 2. bs 객체화 = bs(parsing할 html 문서, 'parsing 방법')
soup = bs(res.text, 'lxml')
soup

 

데이터 수집

  • 노래제목
  • 가수(아티스트)
# 노래제목 수집
# 내가 원하는 데이터만 가져오려면 -> 선택자
# 선택자 이름 안에 공백은 자손선택자를 의미. 그래서 rank01을 자손이라고 생각해버린 것
# 그러므로 공백은(.)온점으로 표시해야함!
soup.select('div.ellipsis.rank01>span>a')
song = soup.select('div.ellipsis.rank01>span>a')
song
len(song)
# 가수 이름 수집하기
singer = soup.select('div.rank02') # 틀린 코드
print(len(singer))
print(singer[38].text)

=> 가수 이름이 2명으로 카운트되기 때문에 위 코드는 사용X

# 올바른 가수 이름 수집방법
singer = soup.select('span.checkEllipsis') # 맞는 코드
print(len(singer))
print(singer[38].text)

 

내가 한 데이터 정제)

# 데이터 정제
singer1 = []
for i in range(len(singer)) :
    singer1.append([song[i].text, singer[i].text])
print(singer1)

 

선생님의 데이터 정제방법)

import pandas as pd
songlist = []
singerlist = []

for i in range(len(song)) :
    songlist.append(song[i].text)
    
for i in range(len(singer)) :
    singerlist.append(singer[i].text)
# 데이터프레임 형식으로 만들어보자
songlist = []
singerlist = []
ranklist = []

for i in range(len(song)) :
    songlist.append(song[i].text)
    singerlist.append(singer[i].text)
    ranklist.append(i+1)

dic = {'노래 제목':songlist, '아티스트':singerlist, '순위':ranklist}
melon = pd.DataFrame(dic)
melon.set_index('순위', inplace=True)

 

melon

# DataFrame csv 파일로 만들어주기!
melon.to_csv('멜론차트.txt', encoding = 'euc-kr')
# 경로 : C:\Users\SMHRD\Crawling

'Web > Crawling' 카테고리의 다른 글

Gmarket 상품정보 수집  (0) 2023.04.10
한솥도시락 data 크롤링  (0) 2023.04.09
selenium 라이브러리  (0) 2023.04.09
웹페이지 데이터 수집  (0) 2023.04.06
크롤링 기초  (0) 2023.04.05

댓글