🏠 메인
파이썬 크롤링 기초 - 음악 차트 크롤링
BeautifulSoup
- html 문서 태그 접근
webdriver
- 브라우저 통한 직접 접근
음악 차트 순위 크롤링
# 벅스 뮤직 차트 스크래핑
import requests # html 문서 텍스트 형태로 가져옴
from bs4 import BeautifulSoup as bs # html 문서 태그 접근 가능하게 변환
import pandas as pd
from selenium import webdriver # 크롤링 불가능한 서비스 가능하게 함 (브라우저 컨트롤)
'''
벅스 차트
'''
html = requests.get('<https://music.bugs.co.kr/chart>')
bsObj = bs(html.text, "html.parser")
titles = bsObj.select('.byChart > tbody > tr th p.title > a')
singers = bsObj.select('.byChart > tbody > tr td p.artist > a')
ranks = bsObj.select('.byChart > tbody > tr td > div > strong')
songData = []
for i in range(0, 100):
title = titles[i].text
singer = singers[i].text
rank = ranks[i].text
songData.append([rank, title, singer])
df = pd.DataFrame(songData, columns=['순위', '타이틀', '가수'])
df
'''
멜론 차트
'''
driver = webdriver.Chrome('chromedriver.exe') # 크롬을 이용해 불러옴
driver.get('<https://www.melon.com/chart/index.htm>')
txt = driver.page_source
html = bs(txt)
titles1 = html.select('tbody .rank01 a')
singers1 = html.select('tbody .rank02 a')
ranks1 = html.select('tbody .rank')
songData1 = []
for i in range(0, 100):
title = titles1[i].text
singer = singers1[i].text
rank = ranks1[i].text
songData1.append([rank, title, singer])
df1 = pd.DataFrame(songData1, columns=['순위', '타이틀', '가수'])
df1
'''
지니 차트
'''
driver = webdriver.Chrome('chromedriver.exe') # 크롬을 이용해 불러옴
driver.get('<https://www.genie.co.kr/chart/top200>')
txt = driver.page_source
html = bs(txt)
titles2 = html.select('tbody .info .title')
singers2 = html.select('tbody .info .artist')
ranks2 = html.select('tbody .number')
songData2 = []
for i in range(0, 50):
title = titles2[i].text.strip()
singer = singers2[i].text.strip()
rank = ranks2[i].text[0:3].strip()
songData2.append([rank, title, singer])
df2 = pd.DataFrame(songData2, columns=['순위', '타이틀', '가수'])
df2
select()
와 find()
- 공통 기능
- 사용
- 괄호 안의 조건에 해당하는 태그를 모두 추출
- 괄호 안의 조건에 해당하는 태그를 하나만 추출
- 차이
.find()
는 참/거짓 조건을 넣어서 필터링 가능
크롤링 연습 1