Dane list odtwarzania Spotify mogą być przydatne do zbierania informacji o utworach, wykonawcach i innych szczegółach utworów. Spotify nie zapewnia szczegółowego dostępu do niektórych danych bez klucza API, ale wykorzystując Playwright dla Pythona, możemy uzyskać dostęp do dynamicznej zawartości i wyodrębnić dane listy odtwarzania bezpośrednio ze strony internetowej Spotify. Ten artykuł ilustruje, jak zaimplementować Playwright do skrobania informacji, takich jak nazwy utworów, nazwy zespołów, linki i długości utworów z list odtwarzania Spotify.
Aby rozpocząć, zainstaluj Playwright i lxml do obsługi dynamicznej zawartości strony i parsowania HTML:
pip install playwright
pip install lxml
Następnie, aby włączyć przeglądarki Playwright, użyj następującego polecenia, aby pobrać wymagane pliki binarne przeglądarki:
playwright install
Z tym przygotowaniem jesteśmy gotowi do scrapowania Spotify.
Zawartość Spotify jest ładowana dynamicznie, więc użycie `requests` lub innych prostych bibliotek HTTP nie pozwoli uchwycić wszystkich informacji renderowanych przez JavaScript. Playwright to biblioteka automatyzacji przeglądarki, która pozwala nam wchodzić w interakcję z dynamicznymi stronami internetowymi tak, jakbyśmy sami je przeglądali, co oznacza, że możemy poczekać na załadowanie JavaScriptu przed scrapowaniem.
Playwright obsługuje również konfigurację proxy, umożliwiając użycie różnych adresów IP w razie potrzeby, aby uniknąć limitów zapytań lub ograniczeń geograficznych na Spotify.
Poniżej znajdziesz szczegółowy przewodnik krok po kroku dotyczący scrapowania, wraz z przykładami kodu dla lepszego, bardziej wizualnego zrozumienia procesu.
Funkcja `fetch_html_content` inicjalizuje środowisko Playwright, uruchamia przeglądarkę i przechodzi do adresu URL playlisty Spotify. Ustawiamy tutaj headless=False, aby interfejs przeglądarki pozostał widoczny (przydatne podczas debugowania); w przypadku zadań automatycznych ustawienie `True` przyspieszy wykonanie.
Parametr wait_until='networkidle' powoduje, że skrypt czeka na ustabilizowanie aktywności sieciowej przed przechwyceniem zawartości strony, co zapewnia prawidłowe załadowanie wszystkich elementów.
from playwright.async_api import async_playwright
async def fetch_html_content(playlist_url):
async with async_playwright() as p:
# W razie potrzeby uruchom przeglądarkę z konfiguracją serwera proxy.
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
# Przejdź do adresu URL
await page.goto(playlist_url, wait_until='networkidle')
# Odczekać, aż aktywność sieciowa ustabilizuje się
await page.wait_for_timeout(3000)
# Przechwytywanie zawartości strony
page_content = await page.content()
# Zamknij przeglądarkę
await browser.close()
return page_content
Aby używać proxy z uwierzytelnianiem adresu IP w Playwright, skonfiguruj funkcję uruchamiania w następujący sposób:
browser = await p.chromium.launch(headless=True, proxy={"server": "http://your-proxy-server:port"})
Spowoduje to przekierowanie żądań przez określony serwer proxy, maskując oryginalny adres IP i pomagając uniknąć potencjalnych ograniczeń związanych ze skrobaniem.
Za pomocą funkcji lxml fromstring tworzymy parser dla pobranej zawartości HTML. Pozwala nam to zlokalizować i wyodrębnić określone dane za pomocą wyrażeń XPath.
from lxml.html import fromstring
page_content = await fetch_html_content('https link')
parser = fromstring(page_content)
Za pomocą selektorów XPath zbieramy następujące szczegóły dla każdego utworu na liście odtwarzania:
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()')
Listy adresów URL są uzupełniane domeną Spotify w celu utworzenia w pełni kwalifikowanych linków.
Po zebraniu danych zapisujemy je w pliku CSV. Każdy wiersz w pliku zawiera nazwę utworu, adres URL utworu, nazwę wykonawcy, adres URL wykonawcy i czas trwania utworu.
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)
# Nagłówek zapisu
writer.writerow(["track_names", "track_urls", "artist_names", "artist_urls", "track_durations"])
# Wiersze zapisu
writer.writerows(rows)
print(f"Data successfully written to {csv_filename}")
Tworzy to dobrze ustrukturyzowany plik CSV, który można łatwo analizować i wykorzystywać w innych aplikacjach.
Oto pełny kod, łączący wszystkie kroki usprawnionego procesu skrobania 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:
# Uruchom przeglądarkę z opcją proxy w razie potrzeby.
browser = await p.chromium.launch(headless=False, proxy={"server": "http://your-proxy-server:port", "username": "username", "password": "password"})
page = await browser.new_page()
# Przejdź do adresu URL
await page.goto(playlist_url, wait_until='networkidle')
# Poczekaj, aż aktywność sieciowa ustabilizuje się
await page.wait_for_timeout(3000)
# Przechwytywanie zawartości strony
page_content = await page.content()
# Zamknij przeglądarkę
await browser.close()
return page_content
page_content = asyncio.run(fetch_html_content('https link'))
parser = fromstring(page_content)
# Szczegóły wyciągu
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()')
# Zapis do 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}")
Zbieranie danych z list odtwarzania Spotify przy użyciu Pythona z Playwright umożliwia dostęp do dynamicznej zawartości w celu wyodrębniania i analizowania informacji o utworach. Konfigurując Playwright z serwerami proxy, możemy obsługiwać ograniczanie szybkości, tworząc niezawodny sposób gromadzenia danych z list odtwarzania. Ta konfiguracja otwiera możliwości szczegółowej analizy i może być łatwo dostosowana do innych typów treści Spotify.
Komentarze: 0