Spotify-Wiedergabelistendaten können nützlich sein, um Informationen zu Songs, Interpreten und anderen Titeldetails zu sammeln. Spotify bietet ohne einen API-Schlüssel keinen detaillierten Zugriff auf einige Daten, aber mit Playwright für Python können wir auf dynamische Inhalte zugreifen und Wiedergabelistendaten direkt von der Spotify-Website extrahieren. Dieser Artikel veranschaulicht, wie Playwright implementiert wird, um Informationen wie Titelnamen, Bandnamen, Links und Längen von Titeln aus Spotify-Wiedergabelisten zu extrahieren.
Installieren Sie zunächst Playwright und lxml, um den dynamischen Seiteninhalt und das HTML-Parsing zu verwalten:
pip install playwright
pip install lxml
Um die Playwright-Browser zu aktivieren, verwenden Sie den folgenden Befehl, um die erforderlichen Browser-Binärdateien herunterzuladen:
playwright install
Damit sind wir bereit, Spotify zu scrapen.
Die Inhalte von Spotify werden dynamisch geladen, sodass die Verwendung von Anfragen oder anderen einfachen HTTP-Bibliotheken nicht alle von JavaScript gerenderten Informationen erfassen kann. Playwright ist eine Bibliothek zur Browser-Automatisierung, mit der wir mit dynamischen Websites interagieren können, als ob wir sie selbst durchsuchen würden, was bedeutet, dass wir warten können, bis JavaScript geladen ist, bevor wir scrapen.
Playwright unterstützt auch die Proxy-Konfiguration, so dass wir bei Bedarf andere IPs verwenden können, um Ratenbegrenzungen oder geografische Beschränkungen auf Spotify zu umgehen.
Im Folgenden finden Sie eine ausführliche, schrittweise Anleitung zum Scraping mit Code-Beispielen, um den Prozess besser zu verstehen.
Die Funktion fetch_html_content initialisiert die Playwright-Umgebung, startet einen Browser und navigiert zur URL der Spotify-Playlist. Hier wird headless=False gesetzt, sodass die Benutzeroberfläche des Browsers sichtbar bleibt (nützlich zum Debuggen); für automatisierte Aufgaben empfiehlt es sich, den Wert auf True zu setzen, um die Ausführung zu beschleunigen.
Die Option wait_until='networkidle' wartet, bis die Netzwerkaktivität stabil ist, bevor der Seiteninhalt erfasst wird, um sicherzustellen, dass alle Elemente korrekt geladen sind.
from playwright.async_api import async_playwright
async def fetch_html_content(playlist_url):
async with async_playwright() as p:
# Browser mit Proxy-Einrichtung starten, falls erforderlich
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
# Rufen Sie die URL auf
await page.goto(playlist_url, wait_until='networkidle')
# Warten Sie, bis sich die Netzwerkaktivität beruhigt hat.
await page.wait_for_timeout(3000)
# Erfassen von Seiteninhalten
page_content = await page.content()
# Schließen Sie den Browser
await browser.close()
return page_content
Um einen Proxy mit IP-Adressauthentifizierung in Playwright zu verwenden, konfigurieren Sie die Startfunktion wie folgt:
browser = await p.chromium.launch(headless=True, proxy={"server": "http://your-proxy-server:port"})
Dadurch werden Anfragen über den angegebenen Proxyserver geleitet, wodurch Ihre ursprüngliche IP-Adresse maskiert und mögliche Einschränkungen beim Scraping vermieden werden.
Mit der fromstring-Funktion von lxml erstellen wir einen Parser für den abgerufenen HTML-Inhalt. Dies ermöglicht es uns, bestimmte Daten mit XPath-Ausdrücken zu finden und zu extrahieren.
from lxml.html import fromstring
page_content = await fetch_html_content('https link')
parser = fromstring(page_content)
Mit XPath-Selektoren erfassen wir die folgenden Details für jeden Titel in der Wiedergabeliste:
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()')
Die URL-Listen werden mit der Spotify-Domäne ergänzt, um vollständig qualifizierte Links zu erstellen.
Nachdem wir die Daten gesammelt haben, schreiben wir sie in eine CSV-Datei. Jede Zeile in der Datei enthält den Titelnamen, die Titel-URL, den Künstlernamen, die Künstler-URL und die Titeldauer.
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)
# Kopfzeile schreiben
writer.writerow(["track_names", "track_urls", "artist_names", "artist_urls", "track_durations"])
# Zeilen schreiben
writer.writerows(rows)
print(f"Data successfully written to {csv_filename}")
So entsteht eine gut strukturierte CSV-Datei, die sich leicht analysieren und in weiteren Anwendungen verwenden lässt.
Hier ist der vollständige Code, der alle Schritte für einen optimierten Spotify-Scraping-Prozess kombiniert:
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:
# Browser starten, bei Bedarf mit Proxy-Option
browser = await p.chromium.launch(headless=False, proxy={"server": "http://your-proxy-server:port", "username": "username", "password": "password"})
page = await browser.new_page()
# Rufen Sie die URL auf
await page.goto(playlist_url, wait_until='networkidle')
# Warten Sie, bis sich die Netzwerkaktivitäten beruhigt haben.
await page.wait_for_timeout(3000)
# Erfassen von Seiteninhalten
page_content = await page.content()
# Schließen Sie den Browser
await browser.close()
return page_content
page_content = asyncio.run(fetch_html_content('https link'))
parser = fromstring(page_content)
# Auszug Details
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()')
# Schreiben in 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}")
Das Sammeln von Spotify-Wiedergabelistendaten mit Python und Playwright ermöglicht den Zugriff auf dynamische Inhalte zum Extrahieren und Analysieren von Titelinformationen. Durch die Konfiguration von Playwright mit Proxies können wir die Ratenbegrenzung handhaben und so eine zuverlässige Methode zur Erfassung von Wiedergabelistendaten schaffen. Dieses Setup eröffnet Möglichkeiten für detaillierte Analysen und kann leicht für andere Spotify-Inhaltstypen angepasst werden.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bemerkungen: 0