Pautas para raspar letras de canciones usando Python de Genius

Publicado: 2019-08-08
Mostrar tabla de contenido
¿Por qué uno querría rastrear datos de Genius?
¿Cómo raspar las letras de las canciones de Genius usando Python?
¿Dónde está El Código?
Explicación del código
Un ejemplo del código en acción
¿Qué tan escalable es esta solución?

¿Qué es Rap Genius?

Lo que comenzó inicialmente como Rap-Genius en 2009 ahora se ha convertido en una compañía única de medios para compartir conocimientos musicales llamada Genius , que atiende a más de cien millones de personas cada mes . En este blog, aprenderemos cómo hacer web scraping de letras de canciones usando Python, en una guía paso a paso.

La mayoría de los usuarios de Internet a los que les gusta la música deben estar familiarizados con Genius. Es un sitio web de rápido crecimiento que comparte lo que hay detrás de la canción : cuáles eran los pensamientos del artista cuando la estaba escribiendo y mucho más . Incluso artistas conocidos como Ariana Grande y Kendrick Lamar colaboran con Genius para brindarle al mundo una visión más profunda de su arte.

Si alguien quiere rastrear letras de canciones, sin importar cuál sea su propósito, Genius es el sitio web al que debe ir. Su base de datos de más de veinticinco millones de canciones, álbumes, artistas y anotaciones los convierte en la base de datos de letras de canciones más grande del mundo .

¿Por qué uno querría rastrear datos de Genius?

Genius se ha convertido en una comunidad musical, donde colaboradores, músicos e incluso editores se unen para deconstruir canciones. Por esta razón, se han convertido en la biblioteca de letras de música más grande del mundo. Genius también se ha asociado con empresas de transmisión de música para aumentar su base de usuarios.

Genius es el lugar para extraer y rastrear letras de música y otros datos relacionados con la industria de la música. Dado que no solo le daría un vasto depósito de letras, sino que también tendría acceso a los comentarios de los usuarios, los sentimientos de los usuarios. Imagínese, podría predecir qué género es actualmente un éxito entre los nuevos usuarios en función de los datos extraídos de Genius.

¿Cómo raspar las letras de las canciones de Genius usando Python?

Cuando se trata de raspar la web, pocos idiomas admiten diferentes tipos de proyectos de raspado web. Entre todos, Python es el más fácil de aprender y también es útil para diferentes tipos de proyectos. Junto con Python, también necesitará algunos paquetes de Python de terceros, así como un editor de texto. Puede seguir las instrucciones en esta página ya que la configuración es la misma, sin importar qué sitio web esté raspando. Una vez que haya terminado y haya configurado su sistema, estará listo para comenzar.

¿Dónde está El Código?

Así que hemos discutido mucho sobre las letras de las canciones, Genius y la configuración básica. Echemos un vistazo al código para extraer letras de canciones usando Python antes de mostrarle cómo ejecutarlo y cómo funciona el código.

[lenguaje de código = "python"]
#!/usr/bin/python
#- * -codificación: utf – 8 – * –

importar urllib.request
importar urllib.parse
importar urllib.error
de bs4 importar BeautifulSoup
importar ssl
importar json
importar ast
importar sistema operativo
de urllib.request Solicitud de importación, urlopen

# Para ignorar los errores del certificado SSL

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

# Entrada del usuario
url = input('Ingrese la URL de la letra de la canción Genius-')

# Hacer que el sitio web crea que está accediendo a él usando un navegador mozilla
req = Solicitud (url, encabezados = { 'User-Agent' : 'Mozilla/5.0' })
página web = urlopen(req).read()

# Creación de un objeto BeautifulSoup de la página html para una fácil extracción de datos.

sopa = BeautifulSoup(página web, 'html.parser')
html = sopa.prettify('utf-8')
canción_json = {}
song_json[“Letras”] = [];
song_json[“Comentarios”] = [];

#Extracto Título de la canción
para título en sopa.findAll('título'):
song_json[“Título”] = título.texto.strip()

# Extrae la fecha de lanzamiento de la canción
para intervalo en sopa.findAll('span', attrs = {'clase': 'metadata_unit-info metadata_unit-info–text_only'}):
song_json[“Fecha de lanzamiento”] = span.text.strip()

# Extrae los comentarios de la canción
para div en sopa.findAll('div', attrs = {'clase': 'rich_text_formatting'}):
comentarios = div.texto.strip().split(“n”)
para comentar en comentarios:
si comenta!=””:
song_json[“Comentarios”].append(comentario);

#Extracto de la letra de la canción
para div en sopa.findAll('div', atributos = {'clase': 'letra'}):
song_json[“Letras”].append(div.text.strip().split(“n”));

#Guarde el json creado con el nombre del archivo como título + .json
con open(song_json[“Título”] + '.json', 'w') como archivo de salida:
json.dump(song_json, archivo de salida, sangría = 4, asegurar_ascii = Falso)

# Guarde el contenido html en un archivo html con nombre como título + .html
con open(song_json[“Título”] + '.html', 'wb') como archivo:
archivo.escribir(html)

print('———-La extracción de datos está completa. Verifique el archivo json.———-')
[/código]

Para ejecutar el código anterior, todo lo que necesita hacer es guardarlo en un archivo con la extensión .py. Por lo tanto, podría guardarlo en un archivo con el nombre songLyricsExtractor.py, por ejemplo, y luego ejecutar el comando desde la terminal:

[lenguaje de código = "python"]
python songLyricsExtractor.py
[/código]

Cuando lo ejecute, se le pedirá que ingrese una URL. Puede ser un enlace a cualquier canción en el sitio web de Genius. Puedes usar este enlace para Looking for America de Lana Del Rey. Extrajimos la letra de esta canción de Genius para mostrarle cómo funciona el código en acción, y eso se trata más adelante en el blog.

Explicación del código

Antes de ejecutar el código y comprender lo que le brinda, intentemos comprender el código en sí. Como siempre, estamos usando BS4 (o Beautiful Soup), una biblioteca que realiza el análisis a través de una página HTML.

Al principio, obtenemos la página web y la convertimos en un objeto Beautiful Soup desde donde podemos seleccionar divs, spans, titles y otras etiquetas, con atributos específicos. Usamos estas técnicas para rastrear letras, comentarios, el título de la página web, así como el día en que se lanzó la canción. Una vez que hemos raspado estos datos los guardamos en un archivo JSON, con el nombre-título de la extensión page+.json. También guardamos el archivo HTML con el título del nombre de la extensión page+.html. Esto se hace para que la página HTML se pueda analizar y se puedan encontrar más puntos de datos en el futuro.

Un ejemplo del código en acción

Al ejecutar el código y darle el enlace de una canción en Genius, obtendrá un JSON que se parecerá al que se muestra a continuación. El siguiente es el JSON que obtenemos para Looking for America de Lana Del Rey. Solo hemos presentado un JSON porque son de gran tamaño, pero también puede ejecutarlo con sus canciones favoritas.

[lenguaje de código = "python"]
{
"Letra": [
[
"[Verso 1]",
“Hice un viaje a San Francisco”,
“Todos nuestros amigos dijeron que bromearíamos”,
“No funcionó, así que me fui a Fresno”,
“Fue un viaje bastante panorámico”,
“Detenido para observar a los niños en el parque”,
“Solíamos preocuparnos por ellos solo después del anochecer”,
“”,
"[Coro]",
“Sigo buscando mi propia versión de América”,
“Uno sin pistola, donde la bandera pueda ondear libremente”,
“No hay bombas en el cielo, solo fuegos artificiales cuando tú y yo chocamos”,
“Es solo un sueño que tenía en mente”,
“Es solo un sueño que tenía en mente”,
“Es solo un sueño que tenía en mente”,
“”,
“[Verso 2]”,
“Volé de regreso a la ciudad de Nueva York”,
"Perdí esa línea del río Hudson",
“Tomé un tren hasta Lake Placid”,
“Ese es otro lugar y tiempo, donde”,
“Solía ​​ir a los autocines y escuchar blues”,
“Tantas cosas que pienso dos veces antes de hacer, no”,
“”,
"[Coro]",
“Sigo buscando mi propia versión de América”,
“Uno sin pistola, donde la bandera pueda ondear libremente”,
“No hay bombas en el cielo, solo fuegos artificiales cuando tú y yo chocamos”,
“Es solo un sueño que tenía en mente”,
“Es solo un sueño que tenía en mente”,
“Es solo un sueño que tenía en mente”,
“Es solo un sueño que tenía en mente”
]
],
“Comentarios”: [
[
“”Looking for America” es una canción que Lana escribió el 5 de agosto de 2019 sobre los tiroteos masivos en los EE. UU., una vez que regresó a Los Ángeles. El mensaje de la canción se basa en que Lana sueña con una mejor situación para los estadounidenses, un tema que ha cantado antes en temas como "Coachella - Woodstock in My Mind" y "When The World Was at War We Kept Dancing". Del Rey lanzó la canción a través de plataformas de transmisión el 9 de agosto de 2019 como sencillo”.
“El título de la canción podría ser una referencia a “America” de Simon & Garfunkel:”,
“Todos han venido a buscar América”,
“Del Rey tomó su Instagram para compartir un video de ella cantando en el estudio con su amigo y productor Jack Antonoff”.
],
[
“Del Rey compartió la canción a través de Instagram agregando:”,
“Hola amigos, volví temprano de Montecito con mi hermano esta mañana y le pedí a Jack Antonoff que viniera a la ciudad porque tenía una canción en mente que quería escribir. Ahora sé que no soy un político y no estoy tratando de serlo, disculpe por tener una opinión, pero a la luz de todos los tiroteos masivos y los tiroteos consecutivos en los últimos días que realmente me afectaron. a nivel celular solo quería publicar este video que tomó nuestra ingeniera Laura hace 20 minutos. Espero que te guste. Estoy cantando amor a los coros que grabé esta mañana. Voy a llamarlo 'Buscando América'”.
]
],
“Título”: “Lana Del Rey – Letras de Looking For America | Genio Letras”,
“Fecha de lanzamiento”: “9 de agosto de 2019”
}
[/código]

¿Qué tan escalable es esta solución?

Si bien la solución que proporcionamos es para una sola canción, puede crear una lista de enlaces de páginas de letras de canciones en Genius y luego ejecutar el código en la lista de forma iterativa para extraer letras de canciones de la web usando Python . También puede encontrar una coincidencia de expresiones regulares para las páginas de Genius que contienen letras de canciones y luego rastrear varias páginas de Genius a la vez, de modo que su propio código reconozca las páginas que tienen letras.

Sin embargo, este tipo de soluciones de bricolaje son buenas para el aficionado o para el que tiene una necesidad única. En caso de que su requerimiento sea más comercial y tenga un problema de web scraping donde necesite características como:

  1. Entrega de datos en formatos específicos
  2. Actualización de datos en frecuencia regular
  3. Sin costes de mantenimiento e infraestructura

Entonces debería ir con un proveedor de servicios de web scraping como PromptCloud. Nuestro equipo en PromptCloud se enorgullece de brindar soluciones de raspado web de nivel empresarial a equipos comerciales de todo el mundo, para permitirles usar datos dentro de sus flujos de trabajo comerciales y tomar decisiones basadas en datos.