Python을 사용하여 Spotify 재생 목록 데이터를 스크랩하는 방법

댓글: 0

데이터 스크래핑은 웹사이트에서 데이터를 자동으로 수집하는 것으로 설명할 수 있으며, Spotify의 경우 트랙, 아티스트, 앨범 및 기타 분석이나 음악 애플리케이션 제작에 유용한 요소에 대한 정보를 수집하는 것을 의미합니다.

Python을 사용하면 아티스트의 이름과 트랙뿐만 아니라 Spotify 재생목록을 추출할 수 있습니다. 이는 규칙을 위반하지 않고 합법적으로 데이터를 얻을 수 있는 Spotify API 덕분에 가능합니다. 그러나 API가 필요한 도구를 제공하지 않는 경우 웹 스크래핑을 사용할 수 있습니다. BeautifulSoup과 Selenium은 Spotify 스크래핑에 적합합니다.

이 Spotify 데이터 스크래핑 튜토리얼에서는 라이브러리를 설치하고, Spotify API로 작업하고, 스크래핑을 적용하고, 데이터를 CSV로 저장하는 방법을 배웁니다.

필수 라이브러리 설치

따라서 Python을 사용해 Spotify 데이터를 스크랩하는 데 어떤 도구가 적합한지 이미 알고 있습니다. 이제 필요한 라이브러리를 설치하는 방법을 살펴보겠습니다:


pip install beautifulsoup4
pip install selenium
pip install requests


그렇다면 각각의 용도는 무엇일까요?

  • BeautifulSoup은 웹 페이지에서 정보를 검색할 수 있는 매우 편리한 라이브러리입니다. 웹 페이지의 HTML 코드를 위에서 아래로 훑어본 다음 필요한 요소를 가져옵니다. 예를 들어 현재 열려 있는 페이지에서 트랙 목록을 추출하는 등 정적 콘텐츠 처리에도 사용됩니다.
  • BeautifulSoup은 정적 사이트에서는 잘 작동하지만, 동적 콘텐츠에서는 충분하지 않습니다. 동적 웹사이트에는 어떤 형태로든 사용자 참여가 필요하며, 바로 이 부분에서 Selenium이 필요합니다. 이 라이브러리는 프로그래밍 방식으로 웹 페이지를 열고, 버튼을 누르고, 텍스트를 입력하고, 스크롤하고, 사이트의 다양한 요소에 참여할 수 있도록 도와줍니다.
  • 요청 라이브러리는 HTTP 요청을 생성하는 데 사용됩니다. 이를 통해 GET 또는 POST 요청을 쉽게 전송하고 API를 처리할 수 있습니다. Selenium과 같이 사이트에 많은 참여가 필요하지 않은 경우에는 요청을 사용하는 것이 더 간단하고 직관적입니다.

웹 드라이버 다운로드

Selenium이 브라우저를 제어하고 Spotify와 상호 작용할 수 있도록 하려면 웹 드라이버가 필요합니다. 이것은 페이지를 자동으로 열고, 버튼을 클릭하는 등의 작업을 수행할 수 있는 특수 소프트웨어입니다.

크롬드라이버를 사용하려면 공식 웹사이트에서 다운로드한 다음 압축을 풀고 경로를 저장하세요.


from selenium import webdriver

driver_path = "C:/webdriver/chromedriver.exe"  # 경로로 바꾸기
driver = webdriver.Chrome(driver_path)
driver.get("https://google.com")




데이터를 스크랩하는 함수 정의

Spotify 재생 목록을 스크랩할 때는 페이지의 HTML 코드를 분석하여 필요한 정보가 포함된 요소를 확인해야 합니다. 아래 단계별 가이드에 따라 Python Spotify 재생 목록 스크래핑을 시작해 보겠습니다.

1. HTML 페이지 분석

브라우저에서 F12를 누르면 필요한 요소들이 위치한 HTML 구조를 확인할 수 있습니다. 이러한 구조의 예시입니다:


<div class="tracklist-row">
    <span class="track-name">name</span>
    <span class="artist-name">artist</span>
    <span class="track-duration">3:45</span>
</div>


2. Selenium 설정

정보를 수집하기 위해 Selenium을 사용하여 동적 콘텐츠를 로드하고 BeautifulSoup을 사용하여 HTML을 구문 분석합니다.


from selenium import webdriver
import time
from bs4 import BeautifulSoup


3. 재생 목록에서 데이터를 수집하는 기능

아래는 Python을 사용하여 재생 목록 페이지를 열고 HTML 코드를 분석하여 노래에 대한 정보를 추출하는 Spotify 웹 스크래핑의 예입니다.

작동 방식:

  1. 브라우저에서 재생 목록 페이지가 열립니다.
  2. Selenium은 자동으로 페이지를 스크롤하여 모든 노래를 로드합니다.
  3. BeautifulSoup은 HTML 코드를 분석하여 클래스별로 필요한 요소를 찾습니다.
  4. 트랙 제목, 아티스트, 재생 시간에 대한 정보가 추출됩니다.

def get_spotify_playlist_data(playlist_url):
   # Selenium을 통해 브라우저 실행
   options = webdriver.ChromeOptions()
   options.add_argument("--headless")  # 헤드리스 모드에서 실행(브라우저 창 없이)
   driver = webdriver.Chrome(options=options)

   driver.get(playlist_url)
   time.sleep(5)  # 페이지가 로드될 때까지 기다립니다

   # 페이지를 스크롤하여 모든 트랙을 로드합니다
   driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

   # 페이지의 HTML 코드 가져오기
   html = driver.page_source
   driver.quit()

   soup = BeautifulSoup(html, "lxml")

   # 모든 트랙 찾기
   tracks = []
   for track in soup.find_all(class_="IjYxRc5luMiDPhKhZVUH UpiE7J6vPrJIa59qxts4"):
       name = track.find(
           class_="e-9541-text encore-text-body-medium encore-internal-color-text-base btE2c3IKaOXZ4VNAb8WQ standalone-ellipsis-one-line").text
       artist = track.find(class_="e-9541-text encore-text-body-small").find('a').text
       duration = track.find(
           class_="e-9541-text encore-text-body-small encore-internal-color-text-subdued l5CmSxiQaap8rWOOpEpk").text

       tracks.append({"track title": name, "artist": artist, "duration": duration})

   return tracks



함수 호출

함수를 호출하려면 함수에 Spotify 재생 목록 URL을 전달합니다. 함수는 해당 URL을 열고 Python으로 Spotify 재생 목록 데이터를 스크랩한 다음 노래 제목, 아티스트, 재생 시간 목록을 반환합니다.


playlist_url = "https://open.spotify.com/album/7aJuG4TFXa2hmE4z1yxc3n?si=W7c1b1nNR3C7akuySGq_7g" 

data = get_spotify_playlist_data(playlist_url)
for track in data:
   print(track)


Spotify API 인증 처리하기

Spotify의 API에서 정보를 수집하려면 토큰이 필요합니다. 토큰은 인증을 통해 얻을 수 있습니다. 토큰 없이는 API에 요청할 수 없습니다. 다음 부분에서는 이를 달성하는 방법에 대해 자세히 설명합니다.

1. 애플리케이션 등록하기

Spotify 개발자 대시보드로 이동하여 계정에 로그인하거나 아직 계정이 없는 경우 계정을 만듭니다. 로그인한 후 애플리케이션을 등록하고 이름과 설명이 포함된 양식을 작성합니다. 완료되면 클라이언트 ID와 클라이언트 비밀 번호가 생성됩니다.

2. 토큰 획득하기

토큰을 얻기 위해 Python의 요청을 사용합니다.


import requests
import base64

# 계정 데이터
CLIENT_ID = "client_id"
CLIENT_SECRET = "client_secret"

# Base64로 인코딩
credentials = f"{CLIENT_ID}:{CLIENT_SECRET}"
encoded_credentials = base64.b64encode(credentials.encode()).decode()

# 토큰 받기 요청 보내기
url = "https://accounts.spotify.com/api/token"
headers = {
    "Authorization": f"Basic {encoded_credentials}",
    "Content-Type": "application/x-www-form-urlencoded"
}
data = {"grant_type": "client_credentials"}

response = requests.post(url, headers=headers, data=data)
token = response.json().get("access_token")

print("Access Token:", token)


이를 통해 이전에 받은 정보를 추가하고 특정 방식으로 암호화하여 토큰을 얻기 위한 요청이 제대로 전송되도록 합니다. 이는 많은 API에 공통적으로 적용되는 보안 조치입니다. 그런 다음 토큰 가져오기 요청을 보냅니다. 토큰을 받으면 콘솔에 토큰이 인쇄됩니다.

3. 요청하기

토큰을 받으면 요청을 할 수 있습니다.


artist_id = "6qqNVTkY8uBg9cP3Jd7DAH"
url = f"https://api.spotify.com/v1/artists/{artist_id}"

headers = {"Authorization": f"Bearer {token}"}

response = requests.get(url, headers=headers)
artist_data = response.json()


추출된 데이터 저장

추가 분석을 위해 수집된 데이터를 JSON 형식으로 저장하기 위해 표준 Python 라이브러리를 사용합니다.


playlist_url = "https://open.spotify.com/album/7aJuG4TFXa2hmE4z1yxc3n?si=W7c1b1nNR3C7akuySGq_7g"


data = get_spotify_playlist_data(playlist_url)


with open('tracks.json', 'w', encoding='utf-8') as json_file:
   json.dump(data, json_file, ensure_ascii=False, indent=4)
   print("Data saved to tracks.json")


Spotify 재생 목록 데이터 스크래핑 모범 사례

윤리적 관행을 따르면 Python을 사용한 Spotify 스크래핑 프로세스가 쉬워집니다. 이를 위해서는 규칙을 위반하지 않고 합법적으로 정보에 액세스할 수 있는 Spotify의 공식 API를 확보하세요. 웹 스크래핑을 할 때 API가 모든 요구 사항을 충족하지 못하는 경우 서버에 부담을 주지 않도록 요청 속도를 조절하는 것을 잊지 마세요.

웹사이트의 정책은 robots.txt에서 확인할 수 있으므로 웹사이트를 스크랩하기 전에 확인하세요. 또한 프록시 서버는 차단을 방지하는 데 도움이 됩니다.

결론

이 데이터 수집 가이드에서는 Python Spotify 스크래핑 예시와 함께 적절한 스크래핑 프로세스 처리에 필요한 추가 정보를 보여드립니다.

핵심 사항을 강조해 보겠습니다:

  • BeautifulSoup은 HTML 페이지를 분석하고 강력한 정보 수집 기능을 포함하고 있어 정적 사이트에 완벽하게 적합합니다.
  • 사용자 상호 작용이 필요한 동적 사이트의 경우 Selenium이 단연 최고의 옵션입니다. 버튼을 자동으로 누르고, 페이지를 스크롤하고, 동적 콘텐츠를 가져올 수 있습니다.
  • 윤리적 스크래핑에는 규칙이 있습니다. 이러한 규칙을 준수하면 누군가가 차단되거나 서버에 과부하가 걸리는 것을 방지할 수 있습니다. HTML을 파싱하는 대신 Spotify API를 사용하는 것이 좋습니다.

이러한 Spotify 스크래핑 도구를 Python과 함께 사용하면 필요한 데이터를 쉽고 빠르게 수집하여 음악 콘텐츠 분석 프로세스를 최적화할 수 있습니다.

댓글:

0 댓글