멜론차트 Top100 수집하기
- 수집단계
- html 문서 요청받기
- bs객체화
- 데이터 수집(태그 선택자)
- 반복하여 여러 개의 데이터 수집
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 |
댓글