Neste guia técnico, vamos implementar um script em Python para baixar músicas automaticamente a partir de um site de streaming. O processo envolve o uso de bibliotecas para requisições HTTP e manipulação de dados JSON.
- Instalação das dependências
Comece instalando as bibliotecas necessárias via pip:
requests: para enviar requisições HTTPprettytable: para organizar e exibir dados em formato tabular
Execute os comandos a seguir no terminal:
pip install requests
pip install PrettyTable
- Configuração do ambiente
Versão do Python: 3.8
IDE recomendada: PyCharm ou similar
- Estratégia de scraping
Para extrair dados de sites de música, é comum utilizar APIs internas que retornam informações em formato JSON. Esta abordagem é eficiente e evita a necessidade de parsers como BeautifulSoup.
- Implementação do script
Importe os módulos essenciais:
import requests
from urllib import parse
import prettytable as pt
Defina os cabeçalhos HTTP para simular uma requisição de navegador:
http_headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Cookie': 'valor_do_cookie',
'Referer': 'https://site-exemplo.com/'
}
Realize a busca por músicas através da API do site:
termo_busca = input("Informe o termo de busca: ")
endpoint_busca = f'https://site-exemplo.com/api/search?q={termo_busca}&pagina=1&limite=30'
resposta_busca = requests.get(endpoint_busca, headers=http_headers)
dados_musicas = resposta_busca.json()
lista_musicas = dados_musicas.get('data', [])
Crie uma tabela para exibir os resultados:
tabela = pt.PrettyTable()
tabela.field_names = ['Índice', 'Nome da Música', 'Artista', 'Álbum']
info_musicas = []
for pos, musica in enumerate(lista_musicas):
nome_musica = musica.get('titulo')
nome_artista = musica.get('artista')
nome_album = musica.get('album')
id_musica = musica.get('id')
info_musicas.append({'id': id_musica, 'titulo': nome_musica, 'artista': nome_artista})
tabela.add_row([pos, nome_musica, nome_artista, nome_album])
print(tabela)
Implemente uma função para baixar uma música específica:
def baixar_musica(id_musica, titulo, artista):
url_download = f'https://site-exemplo.com/api/download?mid={id_musica}&qualidade=alta'
resp_download = requests.get(url_download, headers=http_headers)
link_audio = resp_download.json().get('url')
conteudo_audio = requests.get(link_audio).content
nome_arquivo = f'{artista} - {titulo}.mp3'
with open(nome_arquivo, 'wb') as arquivo:
arquivo.write(conteudo_audio)
print(f'Download finalizado: {titulo}')
Adicione interatividade para que o usuário selecione músicas para download:
while True:
entrada = input("Digite o índice da música desejada (-1 para encerrar): ")
if entrada == '-1':
break
indice = int(entrada)
if 0 <= indice < len(info_musicas):
dados_selecionados = info_musicas[indice]
baixar_musica(dados_selecionados['id'], dados_selecionados['titulo'], dados_selecionados['artista'])
else:
print("Índice inválido. Tente novamente.")