Как собрать данные плейлиста Spotify с помощью Python

Комментарии: 0

Скрапинг данных – это процесс автоматического сбора информации с веб-сайтов. В случае с Spotify это означает получение данных о треках, артистах, альбомах и другой информации, которая может быть полезной для анализа или создания музыкальных приложений.

Использование Python поможет извлекать такие данные, как имя артиста, трека или плейлиста в Spotify. Это возможно благодаря API Spotify, который позволяет получать данные легально и без нарушений правил. Однако, если API не предоставляет необходимых инструментов, можно использовать веб-скрапинг. Для веб-скрапинга Spotify идеально подходят библиотеки BeautifulSoup и Selenium.

В этой статье вы узнаете, как установить библиотеки, работать с API Spotify, применять скрапинг и сохранять данные в формате CSV.

Установка необходимых библиотек

Итак, мы уже знаем, какие инструменты есть для сбора данных с Spotify с помощью Python. Теперь рассмотрим, как установить самые необходимые из них:


pip install beautifulsoup4
pip install selenium
pip install requests

Какую роль в скрапинге играет каждая из них?

  • BeautifulSoup крайне полезная библиотека, которая позволяет легко получать информацию со страниц веб-сайтов. Она анализирует HTML-код страницы, двигаясь сверху вниз и находит нужные элементы. Используется для обработки статического контента, например, если нужно извлечь список треков с открытой страницы.
  • Хотя BeautifulSoup отлично работает со статическими сайтами, этого недостаточно для работы с динамическим контентом. Динамические страницы требуют взаимодействия с пользователем, и именно в таких случаях помогает Selenium. Эта библиотека позволяет автоматически открывать страницы, кликать по кнопкам, вводить текст, прокручивать экран и взаимодействовать с элементами на сайте.
  • Requests это библиотека для создания HTTP-запросов. Она позволяет отправлять GET- и POST-запросы и работать с API. Requests более удобна и легка в использовании, если сайт не требует сложного взаимодействия, как с Selenium.

Загрузка веб-драйвера

Чтобы Selenium мог управлять браузером и взаимодействовать с Spotify, ему нужен вебдрайвер. Это специальная программа, которая может автоматически открывать страницы, нажимать кнопки и т.д.

В данном руководстве используем – ChromeDriver. Для начала его необходимо скачать с официального сайта, распаковать и сохранить к нему путь.


from selenium import webdriver

driver_path = "C:/webdriver/chromedriver.exe"  # Замените на свой путь
driver = webdriver.Chrome(driver_path)
driver.get("https://google.com")



Создание функции для сбора данных

Чтобы получить данные из плейлистов Spotify, нужно проанализировать HTML-код страницы и определить, какие элементы содержат необходимую информацию. Пошагово рассмотрим, как скрапить плейлисты Spotify на Python.

1. Анализ HTML страницы

В браузере, нажав F12, можно увидеть структуру HTML, где и расположены необходимые элементы. Пример такой структуры:


<div class="tracklist-row">
    <span class="track-name">Название</span>
    <span class="artist-name">Артист</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. Функция для сбора данных из плейлиста

Ниже приведен пример скрапинга Spotify на Python который открывает страничку плейлиста, анализирует HTML-код и достает информацию про треки.


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({"Название": name, "Артист": artist, "Длительность": duration})

   return tracks


Как это работает:

  1. Открывается браузер и страница плейлиста.
  2. Selenium автоматически прокручивает страницу, чтобы загрузить все песни.
  3. BeautifulSoup анализирует HTML-код и находит нужные элементы по классам.
  4. Извлекается информация о названии трека, артисте и длительности.

Вызов функции

Чтобы вызвать функцию, передаем ей URL плейлиста Spotify. Функция открывает ее, скрапит плейлист 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

Для сбора данных с API Spotify нужен токен. Его можно получить через аутентификацию. Без него запросы к API не работают. Далее рассмотрим, как это сделать.

1. Зарегистрировать приложение

Перейдите на Spotify Developer Dashboard и войдите в свой аккаунт или создайте новый. Зарегистрируйте приложение, заполнив форму, указав название и описание. После создания вы получите Client ID и Client Secret.

2. Получить токен

Чтобы получить токен будем использовать requests в 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("Данные сохранены в tracks.json")

Лучшие практики сбора данных плейлистов Spotify

Соблюдение этических правил позволит избежать блокировок. Для этого используйте официальное API Spotify, так как оно предоставляет легальный доступ к информации и позволяет получать данные без нарушений. Если API не покрывает все потребности и вы используете веб-скрапинг, ограничивайте частоту запросов, добавляя задержку между обращениями, чтобы не перегружать сервер.

Проверяйте robots.txt сайта, чтобы соблюдать его политику. Дополнительно, использование прокси-серверов поможет избежать блокировок.

Выводы

Эта инструкция по сбору данных показала, какие есть способы скрапить Spotify с помощью Python.

Повторим ключевые моменты:

  • Для статичных сайтов лучше всего подойдет BeautifulSoup. Он анализирует HTML-страницу и имеет удобные инструменты для сбора информации.
  • Selenium – лучший вариант для работы с динамическими сайтами, требующими взаимодействия с пользователем. Он позволяет автоматически нажимать на кнопки, прокручивать страницы и получать динамичный контент.
  • Этичный скрапинг. Соблюдение правил поможет избежать блокировки и чрезмерной нагрузки на сервер. Когда это возможно, лучше использовать официальное API Spotify вместо парсинга HTML.

Использование этих инструментов для скрапинга Spotify на Python позволяет легко и быстро собирать нужные данные, оптимизируя процесс анализа музыкального контента.

Комментарии:

0 комментариев