본문 바로가기
Web/Crawling

[Web] 웹 크롤링, 스크래핑 BeautifulSoup - 음원 차트 출력

by skwkiix 2023. 8. 8.
728x90

BeautifulSoup 활용

Beautiful Soup은 웹 스크래핑을 쉽게 수행할 수 있도록 도와주는 파이썬 라이브러리이다.
HTML 및 XML 문서를 파싱하고, 문서 내부의 데이터를 추출하거나 조작하는 데 사용된다.

음악 차트 실시간 스크래핑

1) 라이브러리 준비

  • [터미널] 라이브러리 설치
pip install bs4
pip install lxml

Beautifulsoup4(bs4) : 웹 스크래핑을 위한 라이브러리

lxml : 파이썬용 xml, html를 처리하는 라이브러리

 

> 웹 스크래핑에 필요한 두 라이브러리를 설치한다.

 

  • 라이브러리 임포트
import requests
from bs4 import BeautifulSoup

 설치한 라이브러리를 임포트 해준다.


2) 음악 차트 불러오기

  • 실시간 순위 차트 html 파악하기

table element
p element

 

  • 구조
<table class = "list_trackList byChart">
<tbody>
<tr>
<p class = 'title'><a> 제목 </a></p>

 

  • p element 가 잘 출력되는지 테스트 한다.
import requests
from bs4 import BeautifulSoup
​

url = "https://music.bugs.co.kr/chart"
res = requests.get(url)
res.raise_for_status()
​
soup = BeautifulSoup(res.text, "lxml")
tbody = soup.find('tbody')
​
​
p = tbody.find_all("p",class_ = 'title') 
print(p)

p element 정상 출력

 p element 가  정상 출력됨을 확인할 수 있다.

 

  • 반복문 구성
# 벅스 뮤직 차트
url = "https://music.bugs.co.kr/chart"
res = requests.get(url)
res.raise_for_status() # 응답코드 200 인지 확인
​
soup = BeautifulSoup(res.text, "lxml")
tbody = soup.find('tbody') # 가장 처음 나오는 tbody
​
result = []
for p in tbody.find_all("p",class_ = 'title'): #find_all은 리스트 형태임
    result.append(p.get_text().replace('\n',''))
    
print(result)
  • 결과 

리스트 형태로 차트가 잘 출력되는 것을 확인할  수 있다.


3) 데이터프레임으로 출력

  • 함수1 : 음원차트 크롤링
  • 함수2 : 데이터프레임으로 변환
  • 함수3: main 함수(html 문서 가져오기 ~ 데이터프레임 출력)
import requests
from bs4 import BeautifulSoup
import pandas as pd
​
def create_DF(result_list): # 데이터 프레임으로 변환
    result_df = pd.DataFrame({"title" : result_list})
​
    return result_df
​
def crawler(soup): # 음원차트 크롤링
    
    tbody = soup.find("tbody")
    result = []
    for p in tbody.find_all("p", class_ = "title"): 
        result.append(p.get_text().replace('\n', ''))
​
    return result
​
def main(): # 메인 함수
​
    # 요청 url 변수에 담긴 url의 html 문서를 출력
    custom_header = {
        'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
    }
    
    url = "https://music.bugs.co.kr/chart"
    req = requests.get(url, headers = custom_header)
    soup = BeautifulSoup(req.text, "html.parser")
    result = crawler(soup) # 크롤링 함수 실행
    df = create_DF(result) # 데이터프레임으로 만들기
    print(df)
    df.to_csv("result.csv", index=False) # csv 파일로 저장
​
if __name__ == "__main__":
    main()

 

  • 결과 확인

터미널 출력 창

 

csv 파일 생성

 

이렇게 터미널 창에서 데이터 프레임이 잘 출력되고, 새로 생성된 csv 파일도 확인할 수 있다.

728x90