PHYTHON)음원 사이트 불러오기
01. 파이썬 설치하기
파이썬을 설치하려면 파이썬 공식 웹사이트에서 다운로드해야 합니다. 아래의 링크를 누르고 파이썬 홈페이지에 다운로드 페이지로 들어가 주세요.
02. 파이썬 패키지 라이브러리 설치
파이썬 설치가 끝나면 자바스크립트의 터미널창을 켠 후 다음 명령어를 입력하여 필요한 라이브러리를 설치합니다.
1
2
3
4
5
6
7
pip3 install requests
pip3 install beautifulsoup4
pip3 install lxml
pip3 install pandas
pip3 install selenium
pip3 install webdriver_manager
pip3 install html5lib
라이브러리 설명
- requests: 웹 요청을 보내고 받는 데 사용됩니다. HTTP 요청을 생성하고, 웹 서버로부터 응답을 받아오는 기능을 제공합니다.
- beautifulsoup4: HTML 및 XML 문서를 파싱하는 Python 라이브러리입니다. 웹 스크래핑 및 크롤링 작업에서 HTML 문서의 데이터를 추출하고 조작하는 데 사용됩니다.
- lxml: XML 및 HTML 문서를 파싱하는 Python 라이브러리입니다. BeautifulSoup과 함께 사용되어 HTML 문서를 분석하고 처리하는 데 효율적으로 사용됩니다.
- pandas: 데이터 조작 및 분석을 위한 Python 라이브러리입니다. 테이블 형태의 데이터를 다루는 데 특화되어 있으며, 데이터를 불러오고 정제하며 분석하는 데 사용됩니다.
- selenium: 웹 애플리케이션 테스트를 자동화하기 위한 도구입니다. 웹 브라우저를 제어하여 웹 애플리케이션을 자동으로 조작하고 테스트할 수 있습니다.
- webdriver_manager: 웹 드라이버를 자동으로 설치하고 관리하는 도구입니다. Selenium과 함께 사용되며, 특정 브라우저의 웹 드라이버를 다운로드하고 설정하는 과정을 자동화하여 테스트를 보다 편리하게 만듭니다.
- html5lib: HTML5 문서를 파싱하는 Python 라이브러리입니다. BeautifulSoup과 함께 사용되며, HTML 문서를 보다 엄격하게 파싱하고 구문 분석하는 데 사용됩니다.
03. pip란?
파이썬으로 작성된 패키지 라이브러리를 관리해주는 시스템입니다.
04. 파이썬 폴더와 파일 만들기
설치가 끝났으면 먼저 해당 데이터를 저장하기 위한 파이썬 폴더와 ‘bugsmusic.py’ 파일을 만들어줍니다.
05. 벅스 차트 가져오기
Python의 requests 라이브러리를 사용하여 Bugs 음악 차트 페이지에서 HTML을 가져오고, BeautifulSoup 라이브러리를 사용하여 해당 HTML을 파싱합니다. 각 부분을 설명하겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import requests as req
from bs4 import BeautifulSoup as bs
import pandas as pd
res = req.get("url")
soup = bs(res.text, "lxml")
# 1. import requests as req:
# requests 라이브러리를 req 별칭으로 가져옵니다. 이 라이브러리는 HTTP 요청을 보내고 응답을 받는 데 사용됩니다.
# 2. from bs4 import BeautifulSoup as bs:
# BeautifulSoup 클래스를 bs 별칭으로 가져옵니다. 이 클래스는 HTML 및 XML 문서를 파싱하고 탐색하는 데 사용됩니다.
# 3. res = req.get("url"):
# requests 라이브러리의 get() 함수를 사용하여 주어진 URL에 GET 요청을 보냅니다. 이 요청으로부터 응답 객체가 반환됩니다. 이 객체는 웹 페이지의 내용을 포함하고 있습니다.
# 4. soup = bs(res.text, "lxml"):
# BeautifulSoup 클래스의 객체를 생성하여 HTML을 파싱합니다. res.text는 응답 객체에서 HTML 텍스트를 가져옵니다. "lxml"은 HTML을 파싱하기 위해 사용할 파서를 지정하는 것으로, lxml 파서는 매우 빠르고 유연한 파서입니다.
이제 soup 객체에는 음악 차트 페이지의 HTML 구조가 파싱되어 있습니다. 이를 사용하여 원하는 정보를 추출하고 데이터를 가공할 수 있습니다.
06. requests 라이브러리를 사용하여 Bugs 음악 차트 가져오기
이 코드는 Python의 requests 라이브러리를 사용하여 Bugs 음악 차트 페이지에서 HTML을 가져오고, BeautifulSoup 라이브러리를 사용하여 해당 HTML을 파싱합니다. 각 부분을 설명하겠습니다.
1
2
3
4
5
6
7
8
9
10
11
User
res = req.get("url")
soup = bs(res.text, "lxml")
# 1. res = req.get("url"):
# requests 라이브러리의 get() 함수를 사용하여 지정된 URL에 GET 요청을 보냅니다.
# 이를 통해 웹 페이지의 HTML 내용이 응답 객체인 res에 저장됩니다.
# 2. soup = bs(res.text, "lxml"):
# BeautifulSoup 클래스의 객체를 생성하여 HTML을 파싱합니다.
# res.text는 응답 객체에서 HTML 텍스트를 가져옵니다.
# "lxml"은 HTML을 파싱하기 위해 사용할 파서를 지정하는 것으로, lxml 파서는 매우 빠르고 유연한 파서입니다.
이제 soup 객체에는 음악 차트 페이지의 HTML 구조가 파싱되어 있습니다. 이를 사용하여 원하는 정보를 추출하고 데이터를 가공할 수 있습니다.
07. 데이터 선택하기
이 코드는 BeautifulSoup을 사용하여 파싱된 HTML에서 음악 차트 페이지에서 각 랭킹 항목의 순위, 제목 및 아티스트 정보를 추출합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#데이터 선택하기
ranking = soup.select(".ranking > strong")
title = soup.select(".title > a ")
artist = soup.select(".artist > a:nth-child(1)")
#데이터 확인
print(len(ranking))
print(len(title))
print(len(artist))
# 1. ranking = soup.select(".ranking > strong"):
# soup 객체에서 클래스가 "ranking"인 요소들의 하위에 있는 <strong> 태그를 선택합니다. 이는 각 음악의 순위를 나타내는 요소입니다.
# 2. title = soup.select(".title > a "):
# soup 객체에서 클래스가 "title"인 요소들의 하위에 있는 <a> 태그를 선택합니다. 이는 각 음악의 제목을 나타내는 링크 요소입니다.
# 3. artist = soup.select(".artist > a:nth-child(1)"):
# soup 객체에서 클래스가 "artist"인 요소들의 하위에 있는 첫 번째 <a> 태그를 선택합니다. 이는 각 음악의 아티스트를 나타내는 링크 요소입니다.
# 4. print(len(ranking)):
# 추출된 순위 정보의 개수를 출력합니다. 이는 음악 차트에서 추출한 순위의 항목 수를 나타냅니다.
# 5. print(len(title)):
# 추출된 제목 정보의 개수를 출력합니다. 이는 음악 차트에서 추출한 음악 제목의 항목 수를 나타냅니다.
# 6. print(len(artist)):
# 추출된 아티스트 정보의 개수를 출력합니다. 이는 음악 차트에서 추출한 아티스트의 항목 수를 나타냅니다.
이 코드를 통해 각 음악의 순위, 제목 및 아티스트 정보를 추출하고 해당 정보의 개수를 확인할 수 있습니다
08. 데이터 저장하기
이 코드는 음악 차트 페이지에서 추출한 각 음악의 순위, 제목 및 아티스트 정보를 각각의 리스트에 저장합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 데이터 저장(파이썬 언어)
rankingList=[r.text.strip()for r in ranking]
titleList=[t.text.strip()for t in title]
artistList=[a.text.strip()for a in artist]
# 1. rankingList = [r.text.strip() for r in ranking]:
# - ranking 리스트에 있는 순위 정보를 추출하여 rankingList라는 새로운 리스트에 저장합니다.
# - r.text.strip()는 BeautifulSoup에서 추출한 요소의 텍스트를 가져와서 좌우 공백을 제거한 후 리스트에 추가합니다.
# 따라서 rankingList에는 각 음악의 순위가 저장됩니다.
# 2. titleList = [t.text.strip() for t in title]:
# - title 리스트에 있는 제목 정보를 추출하여 titleList라는 새로운 리스트에 저장합니다.
# - t.text.strip()는 BeautifulSoup에서 추출한 요소의 텍스트를 가져와서 좌우 공백을 제거한 후 리스트에 추가합니다.
# - 따라서 titleList에는 각 음악의 제목이 저장됩니다.
# 3. artistList = [a.text.strip() for a in artist]:
# - artist 리스트에 있는 아티스트 정보를 추출하여 artistList라는 새로운 리스트에 저장합니다.
# - a.text.strip()는 BeautifulSoup에서 추출한 요소의 텍스트를 가져와서 좌우 공백을 제거한 후 리스트에 추가합니다.
따라서 artistList에는 각 음악의 아티스트가 저장됩니다.
09. 데이터 프레임 생성
이 코드는 pandas 라이브러리를 사용하여 음악 차트에서 추출한 순위, 제목 및 아티스트 정보를 데이터프레임으로 변환하는 작업을 수행합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
# 데이터 프레임
chart_df = pd.DataFrame({
'Ranking' : rankingList,
'Title' : titleList,
'Artist' :artistList
})
# 1. chart_df = pd.DataFrame({...}):
# - pandas의 DataFrame 클래스를 사용하여 데이터프레임을 생성합니다. DataFrame은 테이블 형태의 데이터를 다루는 데 사용되는 자료구조입니다.
# 2. {'Ranking': rankingList, 'Title': titleList, 'Artist': artistList}:
# - 데이터프레임으로 변환할 데이터를 딕셔너리 형태로 제공합니다.
# - 'Ranking', 'Title', 'Artist'는 데이터프레임의 열(column) 이름을 나타내며, 각각 순위, 제목, 아티스트를 나타냅니다.
# - rankingList, titleList, artistList는 앞서 저장한 순위, 제목, 아티스트 정보가 담긴 리스트입니다.
이렇게 생성된 chart_df 데이터프레임은 각 음악의 순위, 제목, 아티스트 정보를 효과적으로 관리하고 분석할 수 있는 테이블 형태의 구조로 만들어 줍니다. 이후에 필요한 데이터 분석이나 시각화 작업 등에 활용할 수 있습니다.