Richtlinien zum Scraping von Liedtexten mit Python von Genius
Veröffentlicht: 2019-08-08Was ist Rap-Genie?
Was 2009 ursprünglich als Rap-Genius begann, hat sich mittlerweile zu einem einzigartigen Musik-Wissensaustausch-Medienunternehmen namens Genius entwickelt, das jeden Monat mehr als hundert Millionen Menschen bedient . In diesem Blog lernen wir in einer Schritt-für-Schritt-Anleitung , wie man Songtexte mit Python webscrapt.
Die meisten Internetnutzer, die sich für Musik interessieren, müssen mit Genius vertraut sein. Es ist eine schnell wachsende Website , die mitteilt , was hinter dem Song steckt – was der Künstler dachte, als er oder sie ihn niederschrieb, und vieles mehr . Sogar bekannte Künstler wie Ariana Grande und Kendrick Lamar arbeiten mit Genius zusammen, um der Welt einen tieferen Einblick in ihre Kunst zu geben.
Wenn jemand Songtexte crawlen möchte, egal zu welchem Zweck, ist Genius die richtige Website. Ihre Datenbank mit über 25 Millionen Songs, Alben, Interpreten sowie Anmerkungen macht sie zur weltweit größten Datenbank mit Songtexten .
Warum sollte man Daten von Genius crawlen wollen?
Genius hat sich zu einer Musik-Community entwickelt, in der Mitwirkende, Musiker und sogar Redakteure zusammenkommen, um Songs zu dekonstruieren. Aus diesem Grund sind sie zur größten Musiktextbibliothek der Welt geworden. Genius hat sich auch mit Musik-Streaming-Unternehmen zusammengetan, um seine Benutzerbasis zu vergrößern.
Genius ist der Ort, an dem Sie Musiktexte und andere musikindustriebezogene Daten im Web Scrapen und crawlen können. Denn es würde Ihnen nicht nur eine riesige Sammlung von Songtexten geben, sondern Sie hätten auch Zugriff auf Benutzerkommentare und Benutzergefühle. Stellen Sie sich vor, Sie könnten auf der Grundlage der aus Genius! extrahierten Daten vorhersagen, welches Genre derzeit bei neuen Benutzern beliebt ist.
Wie kann ich Songtexte von Genius mit Python weben?
Wenn es um das Scraping des Webs geht, unterstützen nur wenige Sprachen verschiedene Arten von Web-Scraping-Projekten. Unter allen ist Python am einfachsten zu erlernen und auch für verschiedene Arten von Projekten nützlich. Neben Python benötigen Sie auch einige Python-Pakete von Drittanbietern sowie einen Texteditor. Sie können den Anweisungen auf dieser Seite folgen, da die Einrichtung gleich ist, egal welche Website Sie scrapen. Sobald Sie fertig sind und Ihr System eingerichtet haben, können Sie beginnen.
Wo ist der Kodex?
Wir haben also viel über Songtexte, Genius und das Grundsetup diskutiert. Werfen wir einen Blick auf den Code zum Scrapen von Songtexten mit Python, bevor ich Ihnen zeige, wie man ihn ausführt und wie der Code funktioniert.
[code language="python"]
#!/usr/bin/python
#- * -Codierung: utf – 8 – * –
import urllib.request
import urllib.parse
import urllib.fehler
aus bs4 importieren BeautifulSoup
SSL importieren
json importieren
ast. importieren
Betriebssystem importieren
from urllib.request import Anfrage, urlopen
# Zum Ignorieren von SSL-Zertifikatsfehlern
ctx = ssl.create_default_context()
ctx.check_hostname = Falsch
ctx.verify_mode = ssl.CERT_NONE
# Eingabe vom Benutzer
url = input('Genius-Songtext-URL eingeben- ')
# Die Website glauben machen, dass Sie mit einem Mozilla-Browser darauf zugreifen
req = Request(url, headers = { 'User-Agent' : 'Mozilla/5.0' })
Webseite = urlopen(req).read()
# Erstellen eines BeautifulSoup-Objekts der HTML-Seite zum einfachen Extrahieren von Daten.
Suppe = BeautifulSoup(Webseite, 'html.parser')
html = Suppe.prettify('utf-8')
song_json = {}
song_json["Text"] = [];
song_json["Kommentare"] = [];
#Extract Titel des Songs
für Titel in soup.findAll('title'):
song_json[„Titel“] = title.text.strip()
# Extrahieren Sie das Veröffentlichungsdatum des Songs
for span in soup.findAll('span', attrs = {'class': 'metadata_unit-info metadata_unit-info–text_only'}):
song_json["Veröffentlichungsdatum"] = span.text.strip()
# Extrahieren Sie die Kommentare zum Song
for div in soup.findAll('div', attrs = {'class': 'rich_text_formatting'}):
Kommentare = div.text.strip().split(“n”)
für Kommentar in Kommentaren:
if comment!="":
song_json[“Kommentare”].append(Kommentar);
#Extrahiere den Songtext
for div in soup.findAll('div', attrs = {'class': 'lyrics'}):
song_json["Text"].append(div.text.strip().split("n"));
#Speichern Sie den erstellten json mit dem Dateinamen als Titel + .json
mit open(song_json[“Title”] + '.json', 'w') als Outfile:
json.dump (song_json, outfile, Einrückung = 4, sure_ascii = False)
# Speichern Sie den HTML-Inhalt in einer HTML-Datei mit dem Namen Titel + .html
mit open(song_json[„Titel“] + '.html', 'wb') als Datei:
file.write(html)
print('———-Datenextraktion abgeschlossen. JSON-Datei prüfen.———-')
[/Code]
Um den oben angegebenen Code auszuführen, müssen Sie ihn lediglich in einer Datei mit der Erweiterung .py speichern. Sie könnten es also beispielsweise in einer Datei mit dem Namen songLyricsExtractor.py speichern und dann im Terminal den Befehl ausführen:

[code language="python"]
Python SongLyricsExtractor.py
[/Code]
Wenn Sie es ausführen, werden Sie aufgefordert, eine URL einzugeben. Dies kann ein Link zu einem beliebigen Lied auf der Genius-Website sein. Sie können diesen Link für Lana Del Reys Looking for America verwenden. Wir haben den Text dieses Songs von Genius übernommen, um Ihnen zu zeigen, wie der Code in Aktion funktioniert, und das wird später im Blog behandelt.
Erklärung des Codes
Bevor wir den Code ausführen und verstehen, was er Ihnen gibt, versuchen wir, den Code selbst zu verstehen. Wie immer verwenden wir BS4 (oder Beautiful Soup), eine Bibliothek, die das Parsen einer HTML-Seite durchführt.
Ganz am Anfang erhalten wir die Webseite und konvertieren sie in ein Beautiful Soup-Objekt, von dem wir Divs, Spans, Titles und andere Tags mit bestimmten Attributen abrufen können. Wir verwenden diese Techniken, um Songtexte, Kommentare, den Titel der Webseite sowie den Tag, an dem der Song tatsächlich veröffentlicht wurde, zu crawlen. Sobald wir diese Daten geschabt haben, speichern wir sie in einer JSON-Datei mit dem Namen-Titel der Seite+.json-Erweiterung. Wir speichern auch die HTML-Datei mit dem Namen Titel der Seite+.html-Erweiterung. Dies geschieht, damit die HTML-Seite analysiert werden kann und in Zukunft mehr Datenpunkte gefunden werden können.
Ein Beispiel für den Code in Aktion
Wenn Sie den Code ausführen und ihm den Link eines Songs auf Genius geben, erhalten Sie ein JSON, das in etwa so aussieht wie das unten angegebene. Der folgende ist der JSON, den wir für „Looking for America“ von Lana Del Rey erhalten. Wir haben nur ein JSON vorgestellt, da sie so groß sind, aber Sie können es auch mit Ihren Lieblingssongs vergleichen.
[code language="python"]
{
„Texte“: [
[
"[Strophe 1]",
„Habe eine Reise nach San Francisco gemacht“,
„Alle unsere Freunde sagten, wir würden jubeln“,
„Hat nicht funktioniert, also bin ich nach Fresno gegangen“,
„Es war eine landschaftlich reizvolle Fahrt“,
„Hingefahren, um die Kinder im Park zu beobachten“,
„Früher haben wir uns nur nach Einbruch der Dunkelheit um sie gekümmert“,
"",
"[Chor]",
„Ich suche immer noch nach meiner eigenen Version von Amerika“,
„Eine ohne Gewehr, wo die Fahne frei wehen kann“,
„Keine Bomben am Himmel, nur Feuerwerk, wenn du und ich kollidieren“,
„Es ist nur ein Traum, den ich im Kopf hatte“,
„Es ist nur ein Traum, den ich im Kopf hatte“,
„Es ist nur ein Traum, den ich im Kopf hatte“,
"",
„[Vers 2]“,
„Ich bin zurück nach New York City geflogen“,
„Die Hudson River Linie verpasst“,
„Mit dem Zug nach Lake Placid gefahren“,
„Das ist ein anderer Ort und eine andere Zeit, wo“,
„Früher bin ich in Autokinos gegangen und habe mir den Blues angehört“,
„So viele Dinge, über die ich zweimal nachdenke, bevor ich es tue, nein“,
"",
"[Chor]",
„Ich suche immer noch nach meiner eigenen Version von Amerika“,
„Eine ohne Gewehr, wo die Fahne frei wehen kann“,
„Keine Bomben am Himmel, nur Feuerwerk, wenn du und ich kollidieren“,
„Es ist nur ein Traum, den ich im Kopf hatte“,
„Es ist nur ein Traum, den ich im Kopf hatte“,
„Es ist nur ein Traum, den ich im Kopf hatte“,
„Es ist nur ein Traum, den ich im Kopf hatte“
]
],
"Kommentare": [
[
„Looking for America“ ist ein Lied, das Lana am 5. August 2019 über die Massenerschießungen in den USA schrieb, als sie nach LA zurückkehrte. Die Botschaft des Liedes beruht darauf, dass Lana von einer besseren Situation für die Amerikaner träumt, ein Thema, das sie hat zuvor in Tracks wie „Coachella – Woodstock in My Mind“ und „When The World Was at War We Kept Dancing“ gesungen. Del Rey veröffentlichte den Song über Streaming-Plattformen am 9. August 2019 als Single.“,
„Der Titel des Songs könnte eine Anspielung auf „America“ von Simon & Garfunkel sein:“,
„Sie sind alle gekommen, um nach Amerika zu suchen“,
„Del Rey nutzte ihr Instagram, um ein Video von ihrem Gesang im Studio mit Freund und Produzent Jack Antonoff zu teilen.“
],
[
„Del Rey teilte das Lied über Instagram und fügte hinzu:“,
„Hallo Leute, kam heute früh mit meinem Bruder aus Montecito zurück und bat Jack Antonoff, in die Stadt zu kommen, weil ich einen Song im Kopf hatte, den ich schreiben wollte. Jetzt weiß ich, dass ich kein Politiker bin und ich versuche nicht, einer zu sein, also entschuldigen Sie, dass ich eine Meinung habe - aber angesichts all der Massenerschießungen und der aufeinanderfolgenden Schießereien in den letzten Tagen, die mich wirklich getroffen haben Auf Mobilfunkebene wollte ich nur dieses Video posten, das unsere Ingenieurin Laura vor 20 Minuten aufgenommen hat. Ich hoffe du magst es. Ich singe Liebe zu den Refrains, die ich heute Morgen aufgenommen habe. Ich werde es ‚Looking for America‘ nennen.“
]
],
„Titel“: „Lana Del Rey – Auf der Suche nach Amerika Songtext | Geniale Songtexte“,
„Erscheinungsdatum“: „9. August 2019“
}
[/Code]
Wie skalierbar ist diese Lösung?
Während die von uns bereitgestellte Lösung für einen einzelnen Song gilt, könnten Sie eine Liste mit Links zu Songtextseiten auf Genius erstellen und dann den Code auf der Liste iterativ ausführen, um Songtexte mit Python zu weben . Sie können auch eine Regex-Übereinstimmung für die Genius-Seiten finden, die Liedtexte enthalten, und dann mehrere Seiten von Genius auf einmal crawlen, sodass Ihr Code selbst Seiten mit Liedtexten erkennt.
Diese Arten von DIY-Lösungen sind jedoch gut für den angehenden Bastler oder jemanden, der einen einmaligen Bedarf hat. Falls Ihre Anforderung kommerzieller ist und Sie ein Web-Scraping-Problem haben, bei dem Sie Funktionen benötigen wie:
- Datenanlieferung in bestimmten Formaten
- Daten werden regelmäßig aktualisiert
- Keine Wartungs- und Infrastrukturkosten
Dann sollten Sie sich für einen Web-Scraping-Dienstleister wie PromptCloud entscheiden. Unser Team bei PromptCloud ist stolz darauf, Unternehmensteams auf der ganzen Welt Web-Scraping-Lösungen bereitzustellen, damit sie Daten in ihren Geschäftsabläufen verwenden und datengesteuerte Entscheidungen treffen können.
