Diretrizes para raspar letras de músicas usando Python da Genius

Publicados: 2019-08-08
Índice mostrar
Por que alguém iria querer rastrear dados do Genius?
Como Web Scrape Song Lyrics do Genius usando Python?
Onde está o Código?
Explicação do código
Um exemplo do código em ação
Quão escalável é esta solução?

O que é Rap Genius?

O que começou inicialmente como Rap-Genius em 2009 agora evoluiu para uma empresa única de mídia de compartilhamento de conhecimento musical chamada Genius , que atende mais de cem milhões de pessoas por mês . Neste blog, aprenderemos como raspar letras de músicas na Web usando Python, em um guia passo a passo.

A maioria dos internautas que gostam de música devem estar familiarizados com o Genius. É um site em rápido crescimento que compartilha o que está por trás da música quais eram os pensamentos do artista quando ele ou ela estava escrevendo, e muito mais . Até artistas conhecidos como Ariana Grande e Kendrick Lamar colaboram com o Genius, para dar ao mundo uma visão mais profunda de sua arte.

Se alguém quiser rastrear letras de músicas, não importa qual seja o propósito, Genius é o site para ir. Seu banco de dados de mais de vinte e cinco milhões de músicas, álbuns, artistas e anotações fazem deles o maior banco de dados de letras de músicas, em qualquer lugar do mundo .

Por que alguém iria querer rastrear dados do Genius?

Genius evoluiu para uma comunidade musical, onde colaboradores, músicos e até editores se reúnem para desconstruir músicas. Por esse motivo, eles se tornaram a maior biblioteca de letras de música do mundo. A Genius também fez parceria com empresas de streaming de música para aumentar sua base de usuários.

Genius é o lugar para raspar na web e rastrear letras de música e outros dados relacionados à indústria da música. Uma vez que não só lhe daria um vasto repositório de letras, mas também teria acesso a comentários de usuários, sentimentos de usuários. Imagine, você poderia prever qual gênero é atualmente um sucesso entre os novos usuários com base nos dados extraídos do Genius!.

Como Web Scrape Song Lyrics do Genius usando Python?

Quando se trata de raspagem da web, poucos idiomas suportam diferentes tipos de projetos de raspagem da web. Entre todos, Python é o mais fácil de aprender e também é útil para diferentes tipos de projetos. Junto com o Python, você também precisará de alguns pacotes Python de terceiros, bem como um editor de texto. Você pode seguir as instruções nesta página, pois a configuração é a mesma, independentemente do site que você está copiando. Quando terminar e configurar seu sistema, você estará pronto para começar.

Onde está o Código?

Então, discutimos muito sobre letras de músicas, Genius e a configuração básica. Vamos dar uma olhada no código para extrair letras de músicas usando python antes de mostrar como executá-lo e como o código funciona.

[linguagem de código=”python”]
#!/usr/bin/python
#- * -codificação: utf – 8 – * –

importar urllib.request
importar urllib.parse
importar urllib.error
de bs4 importe BeautifulSoup
importar ssl
importar json
importação ast
importar SO
de urllib.request solicitação de importação, urlopen

# Para ignorar erros de certificado SSL

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

# Entrada do usuário
url = input('Digite a letra da música Genius Url- ')

# Fazendo o site acreditar que você está acessando usando um navegador mozilla
req = Request(url, headers = { 'User-Agent': 'Mozilla/5.0' })
página da web = urlopen(req).read()

# Criando um objeto BeautifulSoup da página html para fácil extração de dados.

sopa = BeautifulSoup(página da web, 'html.parser')
html = sopa.prettify('utf-8')
song_json = {}
song_json[“Letras”] = [];
song_json[“Comentários”] = [];

#Extrair Título da música
para título em soup.findAll('title'):
song_json[“Title”] = title.text.strip()

# Extraia a data de lançamento da música
for span em soup.findAll('span', attrs = {'class': 'metadata_unit-info metadata_unit-info–text_only'}):
song_json[“Data de lançamento”] = span.text.strip()

# Extraia os comentários da música
para div em soup.findAll('div', attrs = {'class': 'rich_text_formatting'}):
comentários = div.text.strip().split(“n”)
para comentar nos comentários:
se comentar!=””:
song_json[“Comentários”].append(comentário);

#Extraia a letra da música
para div em soup.findAll('div', attrs = {'class': 'lyrics'}):
song_json[“Lyrics”].append(div.text.strip().split(“n”));

#Salve o json criado com o nome do arquivo como título + .json
com open(song_json[“Title”] + '.json', 'w') como outfile:
json.dump(song_json, outfile, recuo = 4, garantir_ascii = False)

# Salve o conteúdo html em um arquivo html com nome como título + .html
com open(song_json[“Title”] + '.html', 'wb') como arquivo:
arquivo.write(html)

print('———-A extração dos dados foi concluída. Verifique o arquivo json.———-')
[/código]

Para executar o código acima, basta salvá-lo em um arquivo com a extensão .py. Assim, você pode salvá-lo em um arquivo com o nome songLyricsExtractor.py, por exemplo, e, em seguida, no terminal, execute o comando:

[linguagem de código=”python”]
python songLyricsExtractor.py
[/código]

Ao executá-lo, você será solicitado a inserir um URL. Este pode ser um link para qualquer música no site do Genius. Você pode usar este link para Looking for America de Lana Del Rey. Nós extraímos a letra desta música do Genius, para mostrar como o código funciona em ação, e isso é abordado mais adiante no blog.

Explicação do código

Antes de executarmos o código e entendermos o que ele oferece, vamos tentar entender o código em si. Como sempre, estamos usando o BS4 (ou Beautiful Soup), uma biblioteca que faz o parsing através de uma página HTML.

No início, pegamos a página da web e a convertemos em um objeto Beautiful Soup de onde podemos pegar divs, spans, títulos e outras tags, com atributos específicos. Usamos essas técnicas para rastrear letras, comentários, o título da página da web, bem como o dia em que a música foi realmente lançada. Uma vez que tenhamos raspado esses dados, nós os salvamos em um arquivo JSON, com o nome-título da extensão page+.json. Também salvamos o arquivo HTML com o título do nome da extensão page+.html. Isso é feito para que a página HTML possa ser analisada e mais pontos de dados possam ser encontrados no futuro.

Um exemplo do código em ação

Ao executar o código e fornecer o link de uma música no Genius, você obterá um JSON que se parecerá com o mostrado abaixo. O abaixo é o JSON que recebemos para Looking for America de Lana Del Rey. Apresentamos apenas um JSON, pois eles são muito grandes, mas você também pode executá-lo em suas músicas favoritas.

[linguagem de código=”python”]
{
"Letra da música": [
[
"[Verso 1]",
“Fez uma viagem a São Francisco”,
“Todos os nossos amigos disseram que iríamos jive”,
“Não funcionou, então parti para Fresno”,
“Foi um passeio bastante panorâmico”,
“Parado para ver as crianças no parque”,
“Antes só nos preocupávamos com eles depois de escurecer”,
“”,
"[Refrão]",
“Ainda estou procurando minha própria versão da América”,
“Um sem a arma, onde a bandeira pode voar livremente”,
“Sem bombas no céu, apenas fogos de artifício quando você e eu colidimos”,
“É apenas um sonho que eu tinha em mente”,
“É apenas um sonho que eu tinha em mente”,
“É apenas um sonho que eu tinha em mente”,
“”,
“[Verso 2]”,
“Eu voei de volta para Nova York”,
“Perdi aquela linha do rio Hudson”,
“Peguei um trem até Lake Placid”,
“Aquele é outro lugar e tempo, onde”,
“Eu costumava ir a drive-ins e ouvir blues”,
“Tantas coisas que penso duas vezes antes de fazer, não”,
“”,
"[Refrão]",
“Ainda estou procurando minha própria versão da América”,
“Um sem a arma, onde a bandeira pode voar livremente”,
“Sem bombas no céu, apenas fogos de artifício quando você e eu colidimos”,
“É apenas um sonho que eu tinha em mente”,
“É apenas um sonho que eu tinha em mente”,
“É apenas um sonho que eu tinha em mente”,
“É apenas um sonho que eu tinha em mente”
]
],
"Comentários": [
[
“”Looking for America” é uma música que Lana escreveu em 5 de agosto de 2019 sobre os tiroteios em massa nos EUA, quando ela voltou para Los Angeles. já cantou antes em faixas como “Coachella – Woodstock in My Mind” e “When The World Was at War We Kept Dancing”. Del Rey lançou a música via plataformas de streaming em 9 de agosto de 2019 como single.”,
“O título da música pode ser uma referência a “America” de Simon & Garfunkel:,
“Todos eles vieram procurar a América”,
“Del Rey usou seu Instagram para compartilhar um vídeo dela cantando no estúdio com o amigo e produtor Jack Antonoff.”
],
[
“Del Rey compartilhou a música via Instagram adicionando:”,
“Olá, pessoal, voltei cedo de Montecito com meu irmão esta manhã e pedi a Jack Antonoff que viesse à cidade porque eu tinha uma música em mente que queria escrever. Agora eu sei que não sou um político e não estou tentando ser então desculpe-me por ter uma opinião - mas à luz de todos os tiroteios em massa e os tiroteios consecutivos nos últimos dois dias que realmente me afetaram em nível celular eu só queria postar esse vídeo que nossa engenheira Laura fez 20 minutos atrás. Espero que você goste. Estou cantando amor nos refrões que gravei esta manhã. Vou chamá-lo de 'Procurando a América'”.
]
],
“Título”: “Lana Del Rey – Procurando por América Letra | Letras de gênio”,
“Data de lançamento”: “9 de agosto de 2019”
}
[/código]

Quão escalável é esta solução?

Embora a solução que fornecemos seja para uma única música, você pode criar uma lista de links de páginas de letras de músicas no Genius e, em seguida, executar o código na lista iterativamente para extrair letras de músicas da Web usando Python . Você também pode encontrar uma correspondência regex para as páginas Genius que contêm letras de músicas e, em seguida, rastrear várias páginas do Genius de uma só vez, de modo que seu próprio código reconheça as páginas que possuem letras.

No entanto, esses tipos de soluções de bricolage são bons para amadores ou para aqueles que precisam de uma única vez. Caso seu requisito seja mais comercial e você tenha um problema de raspagem na web, onde você precisa de recursos como:

  1. Entrega de dados em formatos específicos
  2. Atualização de dados com frequência regular
  3. Sem custos de manutenção e infraestrutura

Então você deve ir com um provedor de serviços de raspagem da web como o PromptCloud. Nossa equipe da PromptCloud se orgulha de fornecer soluções de web-scraping de nível empresarial para equipes de negócios em todo o mundo, para permitir que usem dados em seus fluxos de trabalho de negócios e tomem decisões orientadas por dados.