Je voulais analyser les paroles, mais j'ai essayé de gratter pour la première fois car il était difficile de rassembler les paroles. Pour être honnête, j'étais un peu inquiet car je n'avais jamais écrit correctement le HTML, mais j'ai pu faire ce que je voulais faire, alors j'aimerais le résumer. Je vous serais reconnaissant si vous pouviez me donner des conseils et des erreurs.
C'est l'article auquel j'ai fait référence cette fois.
[J'ai essayé de savoir "où je veux aller" en utilisant pleinement word2vec et les paroles de "Théorie que je ne peux aller nulle part"](https://qiita.com/k_eita/items/456895942c3dda4dc059#%E6%AD % 8C% E8% A9% 9E% E3% 81% AE% E3% 82% B9% E3% 82% AF% E3% 83% AC% E3% 82% A4% E3% 83% 94% E3% 83% B3 % E3% 82% B0)
Les paroles sont disponibles sous forme de fichiers texte dans cet article. Cette fois, je l'ai réécrit en référence à ce code.
Ce que nous obtiendrons cette fois
- Titre de la chanson
Ce sont les cinq ci-dessus. Le format de sortie est csv.
Le site que j'ai gratté cette fois est "Uta Net: service de recherche de paroles".
import re
import time
import requests
import pandas as pd
from bs4 import BeautifulSoup
# Obtenez le site Web et la sortie au format texte
def load(url):
res = requests.get(url)
#HTTPError lève HTTPError si la requête HTTP renvoie un code d'état d'échec
res.raise_for_status()
#Obtenir le corps de la réponse au format texte
return res.text
# Obtenir la balise HTML
def get_tag(html, find_tag):
soup = BeautifulSoup(str(html), 'html.parser')
tag = soup.find_all(find_tag)
return tag
# Convertir en une structure de données pouvant être gérée par le programme
def parse(html):
soup = BeautifulSoup(str(html), 'html.parser')
Supprimer la balise #html
simple_row = soup.getText()
simple_row = simple_row.replace('\n', '')
simple_row = simple_row.replace(' ', '')
#Supprimer les caractères alphanumériques (si nécessaire)
#simple_row = re.sub(r'[a-zA-Z0-9]', '', music_row)
Symbole #Supprimer
simple_row = re.sub (r '[<> ♪ ``' '"" ・… _!?! - /: - @ [-` {- ~]', '', simple_row)
#Delete avis
simple_row = re.sub (r'Note:. + ',' ', Simple_row)
return simple_row
# Acquisition des informations de chanson pour chacun
def get_info(url):
base_url = 'https://www.uta-net.com/'
html = load(url)
#Store URL pour chaque chanson
song_url = []
#Store chanson
song_info = []
songs_info = []
#Obtenir l'URL de la chanson
Enregistre l'URL de #td
for td in get_tag(html, 'td'):
Obtenir l'élément #a
for a in get_tag(td, 'a'):
Si l'attribut #href contient un morceau
if 'song' in a.get ('href'):
Ajouter #url au tableau
song_url.append(base_url + a.get('href'))
#Obtenir des informations sur la chanson
for i, page in enumerate(song_url):
print ('{} chanson: {}'. format (i + 1, page))
html = load(page)
song_info = []
#Song_Title
for h2 in get_tag(html, 'h2'):
Caster sur str une fois pour effectuer une recherche #id
h2 = str(h2)
# Qu'il s'agisse ou non d'un élément de classe qui stocke les paroles
if r'class="prev_pad"' in h2:
#Supprimer les données inutiles
simple_row = parse(h2)
#print(simple_row, end = '\n')
song_info.append(simple_row)
else:
for h2 in get_tag(html, 'h2'):
h2 = str(h2)
simple_row = parse(h2)
song_info.append(simple_row)
#Artist
for h3 in get_tag(html, 'h3'):
h3 = str(h3)
if r'itemprop="byArtist"' in h3:
simple_row = parse(h3)
song_info.append(simple_row)
#Lyricist
for h4 in get_tag(html, 'h4'):
h4 = str(h4)
if r'itemprop="lyricist"' in h4:
music = parse(h4)
song_info.append(simple_row)
#Composer
for h4 in get_tag(html, 'h4'):
h4 = str(h4)
if r'itemprop="composer"' in h4:
simple_row = parse(h4)
song_info.append(simple_row)
#Lyric
for div in get_tag(html, 'div'):
div = str(div)
if r'itemprop="text"' in div:
simple_row = parse(div)
song_info.append(simple_row)
songs_info.append(song_info)
# 1 seconde d'attente (réduit la charge du serveur)
time.sleep(1)
break
return songs_info
def create_df(file_name, url):
#Créer un bloc de données
#df = pd.DataFrame('Song_Title', 'Artist', 'Lyricist', 'Composer', 'Lyric')
df = pd.DataFrame(get_info(url))
df = df.rename(columns={0:'Song_Title', 1:'Artist', 2:'Lyricist', 3:'Composer', 4:'Lyric'})
# Sortie de fichier CSV
csv = df.to_csv("csv/{}.csv".format(file_name))
return csv
En exécutant le code ci-dessus, vous êtes prêt pour le scraping. Vous pouvez réellement obtenir les paroles, etc. en exécutant le code ci-dessous. Cette fois, j'ai la chanson de Minami-san. J'ai également essayé de faciliter la modification du nom et de l'URL du fichier.
file_name = 'sample'
url = 'https://www.uta-net.com/artist/26099/'
url = 'https://www.uta-net.com/user/ranking/daily.html'
url = 'https://www.uta-net.com/user/ranking/monthly.html'
create_df(file_name, url)
Voici les données de la chanson acquises cette fois. Vous pouvez désormais analyser autant de chansons que vous le souhaitez.
J'ai trouvé amusant de faire quelque chose qui fonctionne comme je l'avais prévu. L'article a un fort élément d'autosuffisance, je voudrais donc le mettre à jour plus tard. (Puisque l'explication du code n'est que commentée, ...) Je souhaite également unifier le style d'écriture de Qiita. Ensuite, je pense que je vais essayer le traitement du langage naturel.
Recommended Posts