Linee guida per raschiare i testi delle canzoni usando Python di Genius
Pubblicato: 2019-08-08Cos'è Rap Genius?
Ciò che è iniziato inizialmente come Rap-Genius nel 2009 si è ora evoluto in un'unica società di media per la condivisione della conoscenza musicale chiamata Genius , che serve più di cento milioni di persone ogni mese . In questo blog impareremo come raschiare i testi delle canzoni sul web usando Python, in una guida passo passo.
La maggior parte degli utenti di Internet che amano la musica devono avere familiarità con Genius. È un sito web in rapida crescita che condivide ciò che c'è dietro la canzone : quali erano i pensieri dell'artista quando lo stava scrivendo e molto altro ancora . Anche artisti famosi come Ariana Grande e Kendrick Lamar collaborano con Genius, per dare al mondo una visione più profonda della loro arte.
Se qualcuno vuole eseguire la scansione dei testi delle canzoni, indipendentemente dal loro scopo, Genius è il sito Web a cui andare. Il loro database di oltre venticinque milioni di canzoni, album, artisti e annotazioni li rende il più grande database di testi di canzoni, ovunque nel mondo .
Perché uno dovrebbe voler scansionare i dati da Genius?
Genius si è evoluto in una comunità musicale, in cui collaboratori, musicisti e persino editori si uniscono per decostruire le canzoni. Per questo motivo, sono diventati la più grande libreria di testi musicali al mondo. Genius ha anche collaborato con società di streaming musicale per aumentare la loro base di utenti.
Genius è il luogo in cui eseguire il web scraping e la scansione di testi musicali e altri dati relativi all'industria musicale da esso. Dal momento che non solo ti darebbe un vasto archivio di testi, ma avresti anche accesso ai commenti degli utenti, ai sentimenti degli utenti. Immagina di poter prevedere quale genere è attualmente un successo tra i nuovi utenti in base ai dati estratti da Genius!.
Come Web Scrape i testi delle canzoni da Genius usando Python?
Quando si tratta di raschiare il web, poche lingue supportano diversi tipi di progetti di raschiamento web. Tra tutti, Python è il più facile da imparare ed è utile anche per diversi tipi di progetti. Insieme a Python, avrai anche bisogno di alcuni pacchetti Python di terze parti e di un editor di testo. Puoi seguire le istruzioni in questa pagina poiché la configurazione è la stessa, indipendentemente dal sito Web che stai raschiando. Una volta che hai finito e hai impostato il tuo sistema, sei pronto per iniziare.
Dov'è il codice?
Quindi abbiamo discusso molto sui testi delle canzoni, su Genius e sull'impostazione di base. Diamo un'occhiata al codice per raschiare i testi delle canzoni usando Python prima di mostrarti come eseguirlo e come funziona il codice.
[lingua del codice =”python”]
#!/usr/bin/python
#- * -codifica: utf – 8 – * –
import urllib.request
importa urllib.parse
import urllib.error
da bs4 importa BeautifulSoup
importazione ssl
importa json
importare ast
importare os
da urllib.request import Request, urlopen
# Per ignorare gli errori del certificato SSL
ctx = ssl.create_default_context()
ctx.check_hostname = Falso
ctx.verify_mode = ssl.CERT_NONE
# Input dall'utente
url = input('Inserisci il testo della canzone Genius Url-')
# Far credere al sito Web che stai accedendo utilizzando un browser mozilla
req = Request(url, headers = { 'User-Agent' : 'Mozilla/5.0' })
pagina web = urlopen(req).read()
# Creazione di un oggetto BeautifulSoup della pagina html per una facile estrazione dei dati.
zuppa = BeautifulSoup(pagina web, 'html.parser')
html = zuppa.pretify('utf-8')
canzone_json = {}
song_json["Testo"] = [];
song_json["Commenti"] = [];
#Estrai il titolo della canzone
per il titolo in soup.findAll('title'):
song_json["Titolo"] = title.text.strip()
# Estrarre la data di uscita del brano
for span in soup.findAll('span', attrs = {'class': 'metadata_unit-info metadata_unit-info–text_only'}):
song_json["Data di uscita"] = span.text.strip()
# Estrarre i commenti sul brano
for div in soup.findAll('div', attrs = {'class': 'rich_text_formatting'}):
commenti = div.text.strip().split("n")
per un commento nei commenti:
se commento!=””:
song_json[“Commenti”].append(commento);
#Estrai il testo della canzone
for div in soup.findAll('div', attrs = {'class': 'lyrics'}):
song_json["Testo"].append(div.text.strip().split("n"));
#Salva il json creato con il nome del file come titolo + .json
con open(song_json["Titolo"] + '.json', 'w') come file di uscita:
json.dump(song_json, outfile, indent = 4, sure_ascii = False)
# Salva il contenuto html in un file html con nome come titolo + .html
con open(song_json[“Titolo”] + '.html', 'wb') come file:
file.scrivi(html)
print('———-L'estrazione dei dati è completa. Controlla il file json.———-')
[/codice]
Per eseguire il codice sopra indicato, tutto ciò che devi fare è salvarlo in un file con estensione .py. Quindi potresti salvarlo in un file con il nome songLyricsExtractor.py per esempio, e quindi dal terminale eseguire il comando:

[lingua del codice =”python”]
python songLyricsExtractor.py
[/codice]
Quando lo esegui, ti verrà chiesto di inserire un URL. Questo può essere un collegamento a qualsiasi canzone nel sito Web Genius. Puoi usare questo link per Looking for America di Lana Del Rey. Abbiamo raschiato il testo di questa canzone da Genius, per mostrarti come funziona il codice in azione, e questo sarà trattato più avanti nel blog.
Spiegazione del codice
Prima di eseguire il codice e capire cosa ti dà, proviamo a capire il codice stesso. Come sempre, stiamo usando BS4 (o Beautiful Soup), una libreria che fa il parsing attraverso una n pagina HTML.
All'inizio, otteniamo la pagina Web e la convertiamo in un oggetto Beautiful Soup da cui possiamo raccogliere div, span, titoli e altri tag, con attributi specifici. Usiamo queste tecniche per eseguire la scansione di testi, commenti, il titolo della pagina web e il giorno in cui la canzone è stata effettivamente pubblicata. Una volta che abbiamo raschiato questi dati, li salviamo in un file JSON, con il nome-titolo dell'estensione page+.json. Salviamo anche il file HTML con il titolo del nome dell'estensione page+.html. In questo modo è possibile analizzare la pagina HTML e trovare più punti dati in futuro.
Un esempio del codice in azione
Eseguendo il codice e dandogli il link di una canzone su Genius, otterrai un JSON che assomiglierà a quello indicato di seguito. Quello qui sotto è il JSON che otteniamo per Looking for America di Lana Del Rey. Abbiamo presentato solo un JSON poiché sono di dimensioni così grandi, ma puoi eseguirlo anche contro le tue canzoni preferite.
[lingua del codice =”python”]
{
"Testi": [
[
“[Verso 1]”,
“Ho fatto un viaggio a San Francisco”,
"Tutti i nostri amici hanno detto che saremmo scesi",
“Non funzionava, quindi sono partito per Fresno”,
"E 'stata una strada piuttosto panoramica",
“Accostata a guardare i bambini nel parco”,
"Ci preoccupavamo per loro solo dopo il tramonto",
“”,
"[Coro]",
"Sto ancora cercando la mia versione dell'America",
“Uno senza la pistola, dove la bandiera può sventolare liberamente”,
"Niente bombe in cielo, solo fuochi d'artificio quando io e te ci scontriamo",
“È solo un sogno che avevo in mente”,
“È solo un sogno che avevo in mente”,
“È solo un sogno che avevo in mente”,
“”,
“[Verso 2]”,
"Sono tornato a New York City",
"Ho perso quella linea del fiume Hudson",
“Ho preso un treno fino a Lake Placid”,
"Questo è un altro luogo e tempo, dove",
“Andavo ai drive-in e ascoltavo il blues”,
“Tante cose a cui penso due volte prima di farlo, no”,
“”,
"[Coro]",
"Sto ancora cercando la mia versione dell'America",
“Uno senza la pistola, dove la bandiera può sventolare liberamente”,
"Niente bombe in cielo, solo fuochi d'artificio quando io e te ci scontriamo",
“È solo un sogno che avevo in mente”,
“È solo un sogno che avevo in mente”,
“È solo un sogno che avevo in mente”,
“È solo un sogno che avevo in mente”
]
],
"Commenti": [
[
""Looking for America" è una canzone che Lana ha scritto il 5 agosto 2019 riguardo alle sparatorie di massa negli Stati Uniti, una volta tornata a Los Angeles. Il messaggio della canzone si basa sul sogno di Lana di una situazione migliore per gli americani, un argomento che lei ha già cantato in brani come "Coachella - Woodstock in My Mind" e "When The World Was at War We Kept Dancing". Del Rey ha pubblicato la canzone tramite piattaforme di streaming il 9 agosto 2019 come singolo.",
"Il titolo della canzone potrebbe essere un riferimento a "America" di Simon & Garfunkel:",
"Sono venuti tutti a cercare l'America",
"Del Rey ha portato il suo Instagram a condividere un video di lei che canta in studio con l'amico e produttore Jack Antonoff."
],
[
"Del Rey ha condiviso la canzone tramite Instagram aggiungendo:",
“Ciao gente è tornata presto da Montecito con mio fratello questa mattina e ha chiesto a Jack Antonoff di venire in città perché avevo in mente una canzone che volevo scrivere. Ora so di non essere un politico e non sto cercando di essere così scusami per avere un'opinione, ma alla luce di tutte le sparatorie di massa e le sparatorie consecutive negli ultimi due giorni che mi hanno davvero colpito a livello cellulare volevo solo postare questo video che la nostra ingegnere Laura ha realizzato 20 minuti fa. Spero vi piaccia. Sto cantando amore per i ritornelli che ho registrato stamattina. Lo chiamerò 'Cercando l'America'".
]
],
“Titolo”: “Lana Del Rey – Looking For America Lyrics | Testi Genius”,
“Data di uscita”: “9 agosto 2019”
}
[/codice]
Quanto è scalabile questa soluzione?
Sebbene la soluzione che abbiamo fornito sia per un singolo brano, è possibile creare un elenco di collegamenti alle pagine dei testi dei brani su Genius e quindi eseguire il codice nell'elenco in modo iterativo per il web scraping dei testi delle canzoni utilizzando Python . Potresti anche trovare una corrispondenza regolare per le pagine Genius che contengono testi di canzoni, quindi eseguire la scansione di più pagine da Genius in una volta sola, in modo tale che il tuo codice stesso riconosca le pagine con testi.
Tuttavia, questi tipi di soluzioni fai-da-te sono buone per l'hobbista in erba o per chi ha una necessità una tantum. Nel caso in cui la tua esigenza sia più commerciale e hai un problema di web scraping in cui hai bisogno di funzionalità come:
- Consegna dei dati in formati specifici
- Aggiornamento dei dati con frequenza regolare
- Nessun costo di manutenzione e infrastruttura
Quindi dovresti andare con un fornitore di servizi di scraping web come PromptCloud. Il nostro team di PromptCloud è orgoglioso di fornire soluzioni di web scraping di livello aziendale ai team aziendali di tutto il mondo, per consentire loro di utilizzare i dati all'interno dei flussi di lavoro aziendali e prendere decisioni basate sui dati.
