Os dados da lista de reprodução do Spotify podem ser úteis para coletar informações sobre músicas, artistas e outros detalhes da faixa. O Spotify não fornece acesso detalhado a alguns dados sem uma chave de API, mas aproveitando o Playwright para Python, podemos acessar conteúdo dinâmico e extrair dados de playlist diretamente do site do Spotify. Este artigo ilustra como implementar o Playwright para extrair informações como nomes de faixas, nomes de bandas, links e durações de faixas das listas de reprodução do Spotify.
Para começar, instale o Playwright e o lxml para lidar com o conteúdo dinâmico da página e a análise de HTML:
pip install playwright
pip install lxml
Em seguida, para ativar os navegadores do Playwright, use o seguinte comando para baixar os binários de navegador necessários:
playwright install
Com isso configurado, estamos prontos para raspar o Spotify.
O conteúdo do Spotify é carregado dinamicamente, portanto, usar solicitações ou outras bibliotecas HTTP simples não capturará todas as informações renderizadas pelo JavaScript. O Playwright é uma biblioteca de automação de navegador que nos permite interagir com sites dinâmicos como se estivéssemos navegando neles, o que significa que podemos esperar que o JavaScript seja carregado antes de fazer o scraping.
O Playwright também suporta a configuração de proxy, permitindo-nos usar IPs diferentes, se necessário, para evitar a limitação de taxa ou restrições geográficas no Spotify.
Abaixo, você encontrará um guia detalhado e passo a passo para raspagem, completo com exemplos de código para uma compreensão mais clara e visual do processo.
A função fetch_html_content inicializa o ambiente do Playwright, inicia um navegador e navega até o URL da lista de reprodução do Spotify. Aqui, definimos headless=False para que a interface do navegador permaneça visível (útil para depuração); para tarefas automatizadas, defini-la como True acelerará a execução.
A opção wait_until='networkidle' aguarda que a atividade da rede estabilize antes de capturar o conteúdo da página, assegurando que todos os elementos são carregados corretamente.
from playwright.async_api import async_playwright
async def fetch_html_content(playlist_url):
async with async_playwright() as p:
# Iniciar o browser com a configuração do proxy, se necessário
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
# Navegar para o URL
await page.goto(playlist_url, wait_until='networkidle')
# Dar tempo para que a atividade da rede se estabilize
await page.wait_for_timeout(3000)
# Capturar o conteúdo da página
page_content = await page.content()
# Fechar o browser
await browser.close()
return page_content
Para utilizar um proxy com autenticação de endereço IP no Playwright, configure a função de lançamento da seguinte forma:
browser = await p.chromium.launch(headless=True, proxy={"server": "http://your-proxy-server:port"})
Isto encaminhará os pedidos através do servidor proxy especificado, mascarando o seu IP original e ajudando a evitar potenciais restrições de scraping.
Com a função fromstring do lxml, criamos um analisador para o conteúdo HTML obtido. Isto permite-nos localizar e extrair dados específicos utilizando expressões XPath.
from lxml.html import fromstring
page_content = await fetch_html_content('https link')
parser = fromstring(page_content)
Com os selectores XPath, recolhemos os seguintes detalhes para cada faixa na lista de reprodução:
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()')
As listas de URL são completadas com o domínio Spotify para criar ligações totalmente qualificadas.
Depois de reunir os dados, nós os escrevemos em um arquivo CSV. Cada linha no arquivo contém o nome da faixa, o URL da faixa, o nome do artista, o URL do artista e a duração da faixa.
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)
# Cabeçalho de escrita
writer.writerow(["track_names", "track_urls", "artist_names", "artist_urls", "track_durations"])
# Escrever linhas
writer.writerows(rows)
print(f"Data successfully written to {csv_filename}")
Isto cria um ficheiro CSV bem estruturado que é fácil de analisar e utilizar em outras aplicações.
Aqui está o código completo, combinando todos os passos para um processo simplificado de recolha de dados do 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:
# Iniciar o browser, com opção de proxy, se necessário
browser = await p.chromium.launch(headless=False, proxy={"server": "http://your-proxy-server:port", "username": "username", "password": "password"})
page = await browser.new_page()
# Navegar para o URL
await page.goto(playlist_url, wait_until='networkidle')
# Aguardar que a atividade da rede se estabilize
await page.wait_for_timeout(3000)
# Capturar o conteúdo da página
page_content = await page.content()
# Fechar o browser
await browser.close()
return page_content
page_content = asyncio.run(fetch_html_content('https link'))
parser = fromstring(page_content)
# Detalhes do extrato
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()')
# Escrever para 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}")
A recolha de dados de listas de reprodução do Spotify utilizando Python com Playwright permite o acesso a conteúdos dinâmicos para extrair e analisar informações de faixas. Ao configurar o Playwright com proxies, podemos lidar com a limitação de taxas, criando uma forma fiável de recolher dados de listas de reprodução. Esta configuração abre possibilidades para uma análise detalhada e pode ser facilmente adaptada a outros tipos de conteúdo do Spotify.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Comentários: 0