I dati delle playlist di Spotify possono essere utili per raccogliere informazioni su canzoni, artisti e altri dettagli sulle tracce. Spotify non fornisce un accesso dettagliato ad alcuni dati senza una chiave API, ma sfruttando Playwright per Python, possiamo accedere a contenuti dinamici ed estrarre dati sulle playlist direttamente dal sito web di Spotify. Questo articolo illustra come implementare Playwright per lo scraping di informazioni quali i nomi dei brani, i nomi delle band, i link e la durata dei brani dalle playlist di Spotify.
Per iniziare, installare Playwright e lxml per gestire il contenuto dinamico della pagina e l'analisi dell'HTML:
pip install playwright
pip install lxml
Quindi, per abilitare i browser di Playwright, usare il seguente comando per scaricare i binari dei browser richiesti:
playwright install
Con queste impostazioni, siamo pronti a fare lo scraping di Spotify.
Il contenuto di Spotify viene caricato dinamicamente, quindi utilizzare requests o altre semplici librerie HTTP non consente di acquisire tutte le informazioni generate da JavaScript. Playwright è una libreria per l'automazione del browser che ci permette di interagire con siti web dinamici come se li stessimo navigando direttamente, il che significa che possiamo attendere il caricamento del JavaScript prima di procedere con il scraping.
Playwright supporta anche la configurazione di proxy, permettendoci di usare indirizzi IP differenti se necessario, per evitare limiti di richiesta o restrizioni geografiche su Spotify.
Di seguito troverai una guida dettagliata passo dopo passo sullo scraping, completa di esempi di codice per una comprensione più chiara e visiva del processo.
La funzione fetch_html_content inizializza l’ambiente Playwright, avvia un browser e accede all’URL della playlist di Spotify. Qui impostiamo headless=False in modo che l'interfaccia del browser rimanga visibile (utile per il debug); per attività automatizzate, impostarlo su True velocizzerà l’esecuzione.
L'opzione wait_until='networkidle' attende che l’attività di rete si stabilizzi prima di acquisire il contenuto della pagina, assicurando che tutti gli elementi vengano caricati correttamente.
from playwright.async_api import async_playwright
async def fetch_html_content(playlist_url):
async with async_playwright() as p:
# Avviare il browser con l'impostazione del proxy, se necessario
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
# Navigare verso l'URL
await page.goto(playlist_url, wait_until='networkidle')
# Lasciare che l'attività di rete si stabilizzi
await page.wait_for_timeout(3000)
# Acquisizione del contenuto della pagina
page_content = await page.content()
# Chiudere il browser
await browser.close()
return page_content
Per utilizzare un proxy con autenticazione dell'indirizzo IP in Playwright, configurare la funzione di lancio come segue:
browser = await p.chromium.launch(headless=True, proxy={"server": "http://your-proxy-server:port"})
Questo instrada le richieste attraverso il server proxy specificato, mascherando il vostro IP originale e aiutandovi a evitare potenziali restrizioni di scraping.
Con la funzione fromstring di lxml, creiamo un parser per il contenuto HTML recuperato. Questo ci permette di individuare ed estrarre dati specifici usando le espressioni XPath.
from lxml.html import fromstring
page_content = await fetch_html_content('https link')
parser = fromstring(page_content)
Con i selettori XPath, raccogliamo i seguenti dettagli per ogni brano della playlist:
track_names = parser.xpath('//div[@data-testid="tracklist-row"]//a[@data-testid="internal-track-link"]/div/text()')
track_urls = parser.xpath('//div[@data-testid="tracklist-row"]//a[@data-testid="internal-track-link"]/@href')
track_urls_with_domain = [f"https://open.spotify.com/{url}" for url in track_urls]
artist_names = parser.xpath('//div[@data-testid="tracklist-row"]//div[@data-encore-id="text"]/a/text()')
artist_urls = parser.xpath('//div[@data-testid="tracklist-row"]//div[@data-encore-id="text"]/a/@href')
artist_urls_with_domain = [f"https://open.spotify.com/{url}" for url in artist_urls]
track_durations = parser.xpath('//div[@data-testid="tracklist-row"]//div[@class="PAqIqZXvse_3h6sDVxU0"]/div/text()')
Gli elenchi di URL vengono completati con il dominio Spotify per creare link completamente qualificati.
Dopo aver raccolto i dati, li scriviamo in un file CSV. Ogni riga del file contiene il nome del brano, l'URL del brano, il nome dell'artista, l'URL dell'artista e la durata del brano.
import csv
rows = zip(track_names, track_urls_with_domain, artist_names, artist_urls_with_domain, track_durations)
csv_filename = "spotify_playlist.csv"
with open(csv_filename, mode='w', newline='') as file:
writer = csv.writer(file)
# Scrivere l'intestazione
writer.writerow(["track_names", "track_urls", "artist_names", "artist_urls", "track_durations"])
# Scrivere le righe
writer.writerows(rows)
print(f"Data successfully written to {csv_filename}")
In questo modo si crea un file CSV ben strutturato, facile da analizzare e da utilizzare in altre applicazioni.
Ecco il codice completo, che combina tutti i passaggi per un processo semplificato di scraping di Spotify:
from playwright.async_api import async_playwright
from lxml.html import fromstring
import csv
async def fetch_html_content(playlist_url):
async with async_playwright() as p:
# Avviare il browser, con l'opzione proxy, se necessario.
browser = await p.chromium.launch(headless=False, proxy={"server": "http://your-proxy-server:port", "username": "username", "password": "password"})
page = await browser.new_page()
# Navigare verso l'URL
await page.goto(playlist_url, wait_until='networkidle')
# Attendere che l'attività di rete si stabilizzi
await page.wait_for_timeout(3000)
# Acquisizione del contenuto della pagina
page_content = await page.content()
# Chiudere il browser
await browser.close()
return page_content
page_content = asyncio.run(fetch_html_content('https link'))
parser = fromstring(page_content)
# Dettagli dell'estratto
track_names = parser.xpath('//div[@data-testid="tracklist-row"]//a[@data-testid="internal-track-link"]/div/text()')
track_urls = parser.xpath('//div[@data-testid="tracklist-row"]//a[@data-testid="internal-track-link"]/@href')
track_urls_with_domain = [f"https://open.spotify.com/{url}" for url in track_urls]
artist_names = parser.xpath('//div[@data-testid="tracklist-row"]//div[@data-encore-id="text"]/a/text()')
artist_urls = parser.xpath('//div[@data-testid="tracklist-row"]//div[@data-encore-id="text"]/a/@href')
artist_urls_with_domain = [f"https://open.spotify.com/{url}" for url in artist_urls]
track_durations = parser.xpath('//div[@data-testid="tracklist-row"]//div[@class="PAqIqZXvse_3h6sDVxU0"]/div/text()')
# Scrivere su CSV
rows = zip(track_names, track_urls_with_domain, artist_names, artist_urls_with_domain, track_durations)
csv_filename = "spotify_playlist.csv"
with open(csv_filename, mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(["track_names", "track_urls", "artist_names", "artist_urls", "track_durations"])
writer.writerows(rows)
print(f"Data successfully written to {csv_filename}")
Raccogliere i dati delle playlist di Spotify utilizzando Python con Playwright consente di accedere a contenuti dinamici per estrarre e analizzare le informazioni sui brani. Configurando Playwright con i proxy, possiamo gestire la limitazione del tasso, creando un modo affidabile per raccogliere i dati delle playlist. Questa configurazione offre la possibilità di effettuare analisi dettagliate e può essere facilmente adattata ad altri tipi di contenuti Spotify.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commenti: 0