Come raschiare i dati delle playlist di Spotify usando Python

Commenti: 0

Il data scraping può essere descritto come la raccolta automatica di dati da siti web e, nel caso di Spotify, significa raccogliere informazioni su brani, artisti, album e altri elementi utili per l'analisi o la creazione di applicazioni musicali.

L'uso di Python consente di estrarre le playlist di Spotify, il nome dell'artista e i brani. Questo è possibile grazie all'API di Spotify, che consente di ottenere i dati in modo legale e senza violare le regole. Tuttavia, se l'API non fornisce gli strumenti necessari, si può ricorrere al web scraping. BeautifulSoup e Selenium sono perfetti per lo scraping di Spotify.

In questo tutorial sullo scraping dei dati di Spotify, imparerete come installare le librerie, lavorare con l'API di Spotify, applicare lo scraping e salvare i dati in CSV.

Installare le librerie necessarie

Quindi, sappiamo già quali sono gli strumenti adatti per lo scraping dei dati di Spotify utilizzando Python. Ora vediamo come installare le librerie necessarie:


pip install beautifulsoup4
pip install selenium
pip install requests


A cosa serve ciascuno di essi?

  • BeautifulSoup è una libreria molto pratica che consente di recuperare informazioni dalle pagine web. Esamina il codice HTML della pagina web da cima a fondo e poi cattura gli elementi necessari. Viene utilizzata anche per elaborare contenuti statici, ad esempio per estrarre l'elenco dei brani da una pagina attualmente aperta.
  • BeautifulSoup funziona benissimo con i siti statici, ma non è sufficiente per lavorare con i contenuti dinamici. I siti web dinamici necessitano di una forma di coinvolgimento dell'utente ed è qui che interviene Selenium. Questa libreria aiuta ad aprire programmaticamente le pagine web, a premere pulsanti, a digitare testo, a scorrere e a interagire con i vari elementi del sito.
  • La libreria Requests è utilizzata per creare richieste HTTP. Con essa è possibile inviare facilmente una richiesta GET o POST e gestire le API. Se non si ha bisogno di un grande impegno con il sito, come ad esempio attraverso Selenium, l'uso di Requests è più semplice e diretto.

Scaricare il driver web

Per consentire a Selenium di controllare il browser e interagire con Spotify, è necessario un driver web. Si tratta di un software speciale che può aprire automaticamente le pagine, fare clic sui pulsanti, ecc.

Utilizzeremo ChromeDriver, scaricandolo dal sito ufficiale, scompattandolo e salvandone il percorso.


from selenium import webdriver

driver_path = "C:/webdriver/chromedriver.exe"  # Sostituire con il proprio percorso
driver = webdriver.Chrome(driver_path)
driver.get("https://google.com")




Definire la funzione per l'analisi dei dati

Per lo scraping della playlist di Spotify, è necessario analizzare il codice HTML della pagina e determinare quali elementi contengono le informazioni necessarie. Iniziamo con lo scraping di playlist di Spotify in Python seguendo la guida passo-passo riportata di seguito.

1. Analisi della pagina HTML

Nel browser, premendo F12, è possibile visualizzare la struttura HTML in cui si trovano gli elementi necessari. Un esempio di tale struttura:


<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. Impostazione di Selenium

Per raccogliere informazioni, utilizzeremo Selenium per caricare i contenuti dinamici e BeautifulSoup per analizzare l'HTML.


from selenium import webdriver
import time
from bs4 import BeautifulSoup


3. Funzione di raccolta dei dati da una playlist

Di seguito è riportato un esempio di web scraping di Spotify utilizzando Python, che apre la pagina della playlist, analizza il codice HTML ed estrae le informazioni sui brani.

Come funziona:

  1. Il browser apre la pagina della playlist.
  2. Selenium scorre automaticamente la pagina per caricare tutti i brani.
  3. BeautifulSoup analizza il codice HTML e trova gli elementi necessari in base alle classi.
  4. Vengono estratte informazioni sul titolo del brano, sull'artista e sulla durata.

def get_spotify_playlist_data(playlist_url):
   # Avviare il browser attraverso Selenium
   options = webdriver.ChromeOptions()
   options.add_argument("--headless")  # Esecuzione in modalità headless (senza finestra del browser)
   driver = webdriver.Chrome(options=options)

   driver.get(playlist_url)
   time.sleep(5)  # Attendere il caricamento della pagina

   # Scorrere la pagina per caricare tutti i brani
   driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

   # Ottenere il codice HTML della pagina
   html = driver.page_source
   driver.quit()

   soup = BeautifulSoup(html, "lxml")

   # Trova tutti i brani
   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



Chiamare la funzione

Per chiamare la funzione, bisogna passarle l'URL della playlist di Spotify. La funzione lo apre, esegue lo scrapping dei dati della playlist di Spotify con Python e restituisce un elenco di titoli di canzoni, artisti e durate.


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

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


Gestione dell'autenticazione per l'API di Spotify

Per raccogliere informazioni dall'API di Spotify, è necessario un token. Questo può essere ottenuto attraverso l'autenticazione. Senza di esso non sarà possibile effettuare richieste all'API. La prossima parte spiegherà come ottenere questo risultato.

1. Registrazione dell'applicazione

Andate alla Spotify Developer Dashboard, accedete al vostro account o createne uno se non ne avete ancora uno. Dopo aver effettuato l'accesso, registrate l'applicazione, compilando il modulo che include un nome e una descrizione. Al termine, verranno generati un ID cliente e un Segreto cliente.

2. Ottenere il gettone

Per ottenere il token, utilizzeremo le richieste in Python.


import requests
import base64

# I dati del vostro conto
CLIENT_ID = "client_id"
CLIENT_SECRET = "client_secret"

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

# Invio di una richiesta per ottenere il token
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)


In questo modo, aggiungiamo le informazioni ricevute in precedenza e le crittografiamo in un certo modo per garantire che la richiesta per ottenere il token sia inviata correttamente. Si tratta di una misura di sicurezza comune a molte API. Successivamente, inviamo una richiesta di ottenimento del token. Una volta ottenuto, verrà stampato nella console.

3. Fare richieste

Una volta ottenuto il token, è possibile effettuare richieste.


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


Memorizzare i dati estratti

Per salvare i dati raccolti in formato JSON per ulteriori analisi, utilizzeremo la libreria standard 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")


Migliori pratiche per lo scraping dei dati delle playlist di Spotify

Seguire le pratiche etiche faciliterà il processo di scraping di Spotify utilizzando Python. A tale scopo, procuratevi l'API ufficiale di Spotify, che vi consente di accedere legalmente alle informazioni senza violare alcuna regola. Durante il web scraping, ricordate di limitare la velocità delle richieste se l'API non soddisfa tutte le vostre esigenze per evitare di affaticare il server.

La politica del sito web si trova nel file robots.txt, quindi verificatela prima di eseguire lo scraping del sito. Inoltre, i server proxy sono utili per evitare i blocchi.

Conclusione

Questa guida alla raccolta dei dati ha mostrato esempi di scraping di Python Spotify e ulteriori informazioni necessarie per una corretta gestione del processo di scraping.

Evidenziamo i punti chiave:

  • Poiché BeautifulSoup analizza la pagina HTML e comprende potenti funzioni di raccolta delle informazioni, è perfettamente adatto ai siti statici.
  • Quando si tratta di siti dinamici che richiedono l'interazione dell'utente, Selenium è di gran lunga l'opzione migliore. Consente di premere automaticamente i pulsanti, scorrere le pagine e recuperare i contenuti dinamici.
  • Esistono regole per lo scraping etico. Seguendole, si eviterà di essere bloccati o di sovraccaricare il server. È preferibile utilizzare l'API di Spotify invece di analizzare l'HTML.

L'utilizzo di questi strumenti di scraping di Spotify con Python consente di raccogliere facilmente e rapidamente i dati necessari, ottimizzando il processo di analisi dei contenuti musicali.

Commenti:

0 Commenti