Jak zeskrobać dane ze Spotify za pomocą Pythona

Komentarze: 0

Data scraping można opisać jako zautomatyzowane zbieranie danych ze stron internetowych, a w przypadku Spotify oznacza to zbieranie informacji o utworach, artystach, albumach i innych przydatnych elementach do analizy lub tworzenia aplikacji muzycznych.

Użycie Pythona pomaga wyodrębnić listy odtwarzania Spotify, a także nazwę artysty i utwory. Jest to możliwe dzięki API Spotify, które pozwala uzyskać dane legalnie i bez naruszania zasad. Jeśli jednak API nie zapewnia niezbędnych narzędzi, można skorzystać z web scrapingu. BeautifulSoup i Selenium są idealne do skrobania Spotify.

W tym samouczku dotyczącym skrobania danych Spotify dowiesz się, jak zainstalować biblioteki, pracować z API Spotify, stosować skrobanie i zapisywać dane w CSV.

Zainstaluj wymagane biblioteki

Wiemy już więc, jakie narzędzia są odpowiednie do skrobania danych Spotify za pomocą Pythona. Teraz przyjrzyjmy się, jak zainstalować niezbędne biblioteki:


pip install beautifulsoup4
pip install selenium
pip install requests

Jaki jest więc cel każdego z nich?

  • BeautifulSoup to bardzo przydatna biblioteka, która pozwala na pobieranie informacji ze stron internetowych. Przechodzi przez kod HTML strony internetowej od góry do dołu, a następnie pobiera niezbędne elementy. Jest również używana do przetwarzania treści statycznych, na przykład wyodrębniania listy utworów z aktualnie otwartej strony.
  • Chociaż BeautifulSoup działa świetnie ze statycznymi witrynami, nie jest to wystarczające do pracy z dynamiczną zawartością. Dynamiczne strony internetowe wymagają pewnej formy zaangażowania użytkownika i tu właśnie wkracza Selenium. Ta biblioteka pomaga programowo otwierać strony internetowe, naciskać przyciski, wpisywać tekst, przewijać i angażować się w różne elementy na stronie.
  • Biblioteka Requests służy do tworzenia żądań HTTP. Dzięki niej można łatwo wysyłać żądania GET lub POST i obsługiwać interfejsy API. Jeśli nie potrzebujesz dużego zaangażowania w witrynę, na przykład za pomocą Selenium, korzystanie z Requests jest prostsze i łatwiejsze.

Pobierz sterownik sieciowy

Aby umożliwić Selenium kontrolowanie przeglądarki i interakcję ze Spotify, potrzebny jest sterownik sieciowy. Jest to specjalne oprogramowanie, które może automatycznie otwierać strony, klikać przyciski itp.

Użyjemy ChromeDriver, pobierzemy go z oficjalnej strony, a następnie rozpakujemy i zapiszemy ścieżkę do niego.


from selenium import webdriver

driver_path = "C:/webdriver/chromedriver.exe"  # Zastąp swoją ścieżką
driver = webdriver.Chrome(driver_path)
driver.get("https://google.com")



Zdefiniuj funkcję do pobierania danych

Podczas skrobania listy odtwarzania Spotify należy przeanalizować kod HTML strony i określić, które elementy zawierają niezbędne informacje. Zacznijmy od skrobania listy odtwarzania Spotify w Pythonie, postępując zgodnie z poniższym przewodnikiem krok po kroku.

1. Analiza strony HTML

W przeglądarce, naciskając klawisz F12, można zobaczyć strukturę HTML, w której znajdują się niezbędne elementy. Przykład takiej struktury:


<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. Konfiguracja Selenium

Do zbierania informacji użyjemy Selenium do ładowania dynamicznej zawartości i BeautifulSoup do parsowania HTML.


from selenium import webdriver
import time
from bs4 import BeautifulSoup

3. Funkcja zbierania danych z listy odtwarzania

Poniżej znajduje się przykład web scrapingu Spotify przy użyciu Pythona, który otwiera stronę playlisty, analizuje kod HTML i wyodrębnia informacje o utworach.

Jak to działa?

  1. Przeglądarka otwiera stronę listy odtwarzania.
  2. Selenium automatycznie przewija stronę, aby załadować wszystkie utwory.
  3. BeautifulSoup analizuje kod HTML i wyszukuje niezbędne elementy według klas.
  4. Wyodrębniane są informacje o tytule utworu, wykonawcy i czasie trwania.

def get_spotify_playlist_data(playlist_url):
   # Uruchom przeglądarkę za pomocą Selenium
   options = webdriver.ChromeOptions()
   options.add_argument("--headless")  # Uruchamianie w trybie headless (bez okna przeglądarki)
   driver = webdriver.Chrome(options=options)

   driver.get(playlist_url)
   time.sleep(5)  # Poczekaj na załadowanie strony

   # Przewiń stronę, aby załadować wszystkie utwory
   driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

   # Pobierz kod HTML strony
   html = driver.page_source
   driver.quit()

   soup = BeautifulSoup(html, "lxml")

   # Znajdź wszystkie utwory
   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


Wywołanie funkcji

Aby wywołać funkcję, należy przekazać jej adres URL listy odtwarzania Spotify. Funkcja otworzy go, zeskrobuje dane listy odtwarzania Spotify za pomocą Pythona i zwraca listę tytułów utworów, wykonawców i czasów trwania.


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

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

Obsługa uwierzytelniania dla Spotify API

Do zbierania informacji z API Spotify potrzebny jest token. Można go uzyskać poprzez uwierzytelnienie. Bez niego nie będzie można wysyłać żądań do API. W następnej części szczegółowo opiszemy, jak można to osiągnąć.

1. Zarejestruj aplikację

Przejdź do Spotify Developer Dashboard, zaloguj się na swoje konto lub utwórz je, jeśli jeszcze go nie masz. Po zalogowaniu zarejestruj aplikację, wypełniając formularz zawierający nazwę i opis. Po zakończeniu zostanie wygenerowany identyfikator klienta i klucz tajny klienta.

2. Uzyskanie tokena

Aby uzyskać token, użyjemy żądań w Pythonie.


import requests
import base64

# Dane konta użytkownika
CLIENT_ID = "client_id"
CLIENT_SECRET = "client_secret"

# Kodowanie w Base64
credentials = f"{CLIENT_ID}:{CLIENT_SECRET}"
encoded_credentials = base64.b64encode(credentials.encode()).decode()

# Wysyłanie żądania w celu uzyskania tokena
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)

W ten sposób dołączamy otrzymane wcześniej informacje i szyfrujemy je w określony sposób, aby zapewnić prawidłowe wysłanie żądania uzyskania tokena. Jest to środek bezpieczeństwa, który jest powszechny w wielu interfejsach API. Następnie wysyłamy żądanie uzyskania tokena. Po jego uzyskaniu zostanie on wypisany do konsoli.

3. Składanie wniosków

Po uzyskaniu tokena można wysyłać żądania.


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()

Przechowywanie wyodrębnionych danych

Aby zapisać zebrane dane w formacie JSON do dalszej analizy, użyjemy standardowej biblioteki 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")

Najlepsze praktyki dotyczące pobierania danych z list odtwarzania Spotify

Przestrzeganie etycznych praktyk ułatwi proces skrobania Spotify przy użyciu Pythona. W tym celu należy uzyskać oficjalne API Spotify, ponieważ zapewnia ono legalny dostęp do informacji bez naruszania jakichkolwiek zasad. Podczas web scrapingu należy pamiętać o ograniczeniu liczby żądań, jeśli API nie spełnia wszystkich wymagań, aby uniknąć obciążenia serwera.

Polityka witryny znajduje się w pliku robots.txt, więc sprawdź ją przed skrobaniem witryny. Ponadto serwery proxy są pomocne w zapobieganiu blokadom.

Wnioski

W tym przewodniku po gromadzeniu danych przedstawiono przykłady skrobania w Python Spotify, a także dodatkowe informacje potrzebne do prawidłowej obsługi procesu skrobania.

Podkreślmy kluczowe punkty:

  • Ponieważ BeautifulSoup analizuje stronę HTML i zawiera potężne funkcje zbierania informacji, doskonale nadaje się do witryn statycznych.
  • Jeśli chodzi o dynamiczne witryny, które wymagają interakcji użytkownika, Selenium jest zdecydowanie najlepszą opcją. Umożliwia automatyczne naciskanie przycisków, przewijanie stron i pobieranie dynamicznej zawartości.
  • Istnieją zasady etycznego scrapingu. Ich przestrzeganie zapobiegnie zablokowaniu lub przeciążeniu serwera. Preferowane jest używanie API Spotify zamiast parsowania HTML.

Korzystanie z tych narzędzi do skrobania Spotify w Pythonie pozwala łatwo i szybko zebrać niezbędne dane, optymalizując proces analizy treści muzycznych.

Komentarze:

0 komentarze