Les données des listes de lecture de Spotify peuvent être utiles pour collecter des informations sur les chansons, les artistes et d'autres détails sur les pistes. Spotify ne fournit pas d'accès détaillé à certaines données sans clé API, mais en tirant parti de Playwright pour Python, nous pouvons accéder au contenu dynamique et extraire des données de listes de lecture directement à partir du site Web de Spotify. Cet article illustre comment mettre en œuvre Playwright pour extraire des informations telles que les noms des titres, les noms des groupes, les liens et les durées des titres à partir des listes de lecture Spotify.
Pour commencer, installez Playwright et lxml pour gérer le contenu dynamique des pages et l'analyse HTML:
pip install playwright
pip install lxml
Ensuite, pour activer les navigateurs Playwright, utilisez la commande suivante pour télécharger les binaires de navigateur requis :
playwright install
Une fois ces éléments mis en place, nous sommes prêts à scraper Spotify.
Le contenu de Spotify est chargé dynamiquement, donc l'utilisation de requêtes ou d'autres bibliothèques HTTP simples ne permettra pas de capturer toutes les informations rendues par JavaScript. Playwright est une bibliothèque d'automatisation de navigateur qui nous permet d'interagir avec des sites Web dynamiques comme si nous les parcourions nous-mêmes, ce qui signifie que nous pouvons attendre que JavaScript se charge avant de procéder au scraping.
Playwright prend également en charge la configuration du proxy, ce qui nous permet d'utiliser différentes IP si nécessaire pour éviter les limitations de débit ou les restrictions géographiques sur Spotify.
Vous trouverez ci-dessous un guide détaillé, étape par étape, sur le scraping, avec des exemples de code pour une compréhension plus claire et plus visuelle du processus.
La fonction fetch_html_content initialise l'environnement Playwright, lance un navigateur et navigue vers l'URL de la liste de lecture Spotify. Ici, nous définissons headless=False pour que l'interface du navigateur reste visible (utile pour le débogage); pour les tâches automatisées, la définition de True accélérera l'exécution.
L'option wait_until='networkidle' attend que l'activité du réseau se stabilise avant de capturer le contenu de la page, ce qui garantit que tous les éléments se chargent correctement.
from playwright.async_api import async_playwright
async def fetch_html_content(playlist_url):
async with async_playwright() as p:
# Lancer le navigateur avec la configuration du proxy si nécessaire
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
# Naviguer vers l'URL
await page.goto(playlist_url, wait_until='networkidle')
# Laisser le temps à l'activité du réseau de se stabiliser
await page.wait_for_timeout(3000)
# Capturer le contenu de la page
page_content = await page.content()
# Fermer le navigateur
await browser.close()
return page_content
Pour utiliser un proxy avec authentification de l'adresse IP dans Playwright, configurez la fonction de lancement comme suit:
browser = await p.chromium.launch(headless=True, proxy={"server": "http://your-proxy-server:port"})
Cela acheminera les demandes via le serveur proxy spécifié, masquant votre IP d'origine et permettant d'éviter d'éventuelles restrictions de scraping.
Avec la fonction fromstring de lxml, nous créons un analyseur pour le contenu HTML récupéré. Cela nous permet de localiser et d'extraire des données spécifiques à l'aide d'expressions XPath.
from lxml.html import fromstring
page_content = await fetch_html_content('https link')
parser = fromstring(page_content)
Grâce aux sélecteurs XPath, nous recueillons les informations suivantes pour chaque piste de la liste de lecture :
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()')
Les listes d'URL sont complétées par le domaine Spotify pour créer des liens pleinement qualifiés.
Après avoir recueilli les données, nous les écrivons dans un fichier CSV. Chaque ligne du fichier contient le nom de la piste, l'URL de la piste, le nom de l'artiste, l'URL de l'artiste et la durée de la piste.
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)
# En-tête d'écriture
writer.writerow(["track_names", "track_urls", "artist_names", "artist_urls", "track_durations"])
# Écrire des lignes
writer.writerows(rows)
print(f"Data successfully written to {csv_filename}")
Cela permet de créer un fichier CSV bien structuré, facile à analyser et à utiliser dans d'autres applications.
Voici le code complet, combinant toutes les étapes pour un processus de scraping Spotify rationalisé :
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:
# Lancer le navigateur, avec l'option proxy si nécessaire
browser = await p.chromium.launch(headless=False, proxy={"server": "http://your-proxy-server:port", "username": "username", "password": "password"})
page = await browser.new_page()
# Naviguer vers l'URL
await page.goto(playlist_url, wait_until='networkidle')
# Attendre la fin de l'activité du réseau
await page.wait_for_timeout(3000)
# Capturer le contenu de la page
page_content = await page.content()
# Fermer le navigateur
await browser.close()
return page_content
page_content = asyncio.run(fetch_html_content('https link'))
parser = fromstring(page_content)
# Détails de l'extrait
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()')
# Écriture en 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}")
La collecte de données de listes de lecture Spotify à l'aide de Python avec Playwright permet d'accéder à un contenu dynamique pour extraire et analyser les informations sur les pistes. En configurant Playwright avec des proxies, nous pouvons gérer la limitation de débit, créant ainsi un moyen fiable de collecter les données des listes de lecture. Cette configuration ouvre des possibilités d'analyse détaillée et peut être facilement adaptée à d'autres types de contenu Spotify.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commentaires: 0