Як зібрати дані плейлиста 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-код сторінки, рухається зверху вниз і знаходить потрібні елементи. Використовується для обробки статичного контенту, наприклад, якщо потрібно витягнути список треків з відкритої сторінки.

  • Selenium

    Хоча 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

Як це працює:

  • Відкривається браузер і сторінка плейлиста.
  • Selenium автоматично прокручує сторінку, щоб завантажити всі пісні.
  • BeautifulSoup аналізує HTML-код і знаходить потрібні елементи за класами.
  • Витягується інформація про назву треку, артиста та тривалість.

Виклик функції

Щоб викликати функцію, передаємо їй 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 Коментаріїв