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 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 가 정상 출력됨을 확인할 수 있다.
- 반복문 구성
# 벅스 뮤직 차트
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 파일도 확인할 수 있다.
728x90
'Web > Crawling' 카테고리의 다른 글
| [Web] API 크롤링 - 서울 열린데이터광장 유동인구 API 크롤링 (0) | 2023.08.13 |
|---|---|
| [Web] 국가별 인구 데이터 크롤링 with Scrapy - 1 (1) | 2023.08.09 |
| [Web] 웹 크롤링,스크래핑 Basic - 3. User-Agent (0) | 2023.08.08 |
| [Web] 웹 크롤링 , 스크래핑 Basic - 2. re , 정규표현식 (0) | 2023.08.06 |
| [Web] 웹 크롤링,웹 스크래핑 Basic - 1 . requests 라이브러리 (0) | 2023.08.06 |