Data daftar putar Spotify dapat berguna untuk mengumpulkan informasi tentang lagu, artis, dan detail lagu lainnya. Spotify tidak menyediakan akses terperinci ke beberapa data tanpa kunci API, tetapi dengan memanfaatkan Playwright untuk Python, kita dapat mengakses konten dinamis dan mengekstrak data daftar putar langsung dari situs web Spotify. Artikel ini mengilustrasikan cara mengimplementasikan Playwright untuk mengambil informasi seperti nama lagu, nama band, tautan, dan panjang lagu dari daftar putar Spotify.
Untuk memulai, instal Playwright dan lxml untuk menangani konten halaman dinamis dan penguraian HTML:
pip install playwright
pip install lxml
Kemudian, untuk mengaktifkan peramban Playwright, gunakan perintah berikut untuk mengunduh binari peramban yang diperlukan:
playwright install
Dengan pengaturan ini, kami siap untuk mengikis Spotify.
Konten Spotify dimuat secara dinamis, jadi menggunakan request atau pustaka HTTP sederhana lainnya tidak akan menangkap semua informasi yang diberikan oleh JavaScript. Playwright adalah pustaka otomatisasi peramban yang memungkinkan kita berinteraksi dengan situs web dinamis seolah-olah kita menjelajahinya sendiri, yang berarti kita dapat menunggu JavaScript dimuat sebelum melakukan scraping.
Playwright juga mendukung konfigurasi proxy, sehingga kita dapat menggunakan IP yang berbeda jika diperlukan untuk menghindari pembatasan kecepatan atau pembatasan geografis di Spotify.
Di bawah ini, Anda akan menemukan panduan langkah demi langkah yang mendetail untuk melakukan scraping, lengkap dengan contoh kode untuk pemahaman yang lebih jelas dan visual tentang prosesnya.
Fungsi fetch_html_content menginisialisasi lingkungan Playwright, meluncurkan peramban, dan menavigasi ke URL daftar putar Spotify. Di sini, kami menetapkan headless=False agar antarmuka peramban tetap terlihat (berguna untuk debugging); untuk tugas otomatis, menetapkannya ke True akan mempercepat eksekusi.
Opsi wait_until='networkidle' menunggu aktivitas jaringan menjadi stabil sebelum mengambil konten halaman, untuk memastikan semua elemen dimuat dengan benar.
from playwright.async_api import async_playwright
async def fetch_html_content(playlist_url):
async with async_playwright() as p:
# Luncurkan browser dengan pengaturan proxy jika diperlukan
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
# Arahkan ke URL
await page.goto(playlist_url, wait_until='networkidle')
# Berikan waktu untuk menyelesaikan aktivitas jaringan
await page.wait_for_timeout(3000)
# Menangkap konten halaman
page_content = await page.content()
# Tutup browser
await browser.close()
return page_content
Untuk menggunakan proxy dengan autentikasi alamat IP di Playwright, konfigurasikan fungsi peluncuran sebagai berikut:
browser = await p.chromium.launch(headless=True, proxy={"server": "http://your-proxy-server:port"})
Ini akan merutekan permintaan melalui server proxy yang ditentukan, menyembunyikan IP asli Anda dan membantu menghindari potensi pembatasan scraping.
Dengan fungsi fromstring dari lxml, kita membuat parser untuk konten HTML yang diambil. Hal ini memungkinkan kita untuk menemukan dan mengekstrak data tertentu menggunakan ekspresi XPath.
from lxml.html import fromstring
page_content = await fetch_html_content('https link')
parser = fromstring(page_content)
Dengan pemilih XPath, kami mengumpulkan detail berikut untuk setiap trek dalam daftar putar:
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()')
Daftar URL dilengkapi dengan domain Spotify untuk membuat tautan yang memenuhi syarat.
Setelah mengumpulkan data, kami menuliskannya ke dalam file CSV. Setiap baris dalam file tersebut berisi nama lagu, URL lagu, nama artis, URL artis, dan durasi lagu.
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)
# Tulis tajuk
writer.writerow(["track_names", "track_urls", "artist_names", "artist_urls", "track_durations"])
# Menulis baris
writer.writerows(rows)
print(f"Data successfully written to {csv_filename}")
Hal ini menciptakan file CSV yang terstruktur dengan baik yang mudah dianalisis dan digunakan dalam aplikasi lebih lanjut.
Berikut ini adalah kode lengkapnya, yang menggabungkan semua langkah untuk proses pengikisan Spotify yang efisien:
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:
# Luncurkan browser, dengan opsi proxy jika diperlukan
browser = await p.chromium.launch(headless=False, proxy={"server": "http://your-proxy-server:port", "username": "username", "password": "password"})
page = await browser.new_page()
# Arahkan ke URL
await page.goto(playlist_url, wait_until='networkidle')
# Tunggu hingga aktivitas jaringan selesai
await page.wait_for_timeout(3000)
# Menangkap konten halaman
page_content = await page.content()
# Menutup browser
await browser.close()
return page_content
page_content = asyncio.run(fetch_html_content('https link'))
parser = fromstring(page_content)
# Detail ekstrak
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()')
# Menulis ke 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}")
Mengumpulkan data daftar putar Spotify menggunakan Python dengan Playwright memungkinkan akses ke konten dinamis untuk mengekstraksi dan menganalisis informasi trek. Dengan mengonfigurasi Playwright dengan proksi, kita dapat menangani pembatasan laju, menciptakan cara yang andal untuk mengumpulkan data daftar putar. Penyiapan ini membuka kemungkinan untuk analisis terperinci dan dapat dengan mudah diadaptasi untuk jenis konten Spotify lainnya.
Komentar: 0