Ich wollte die Texte analysieren, aber ich habe zum ersten Mal versucht, sie zu kratzen, weil es schwierig war, die Texte zu sammeln. Um ehrlich zu sein, war ich ein wenig besorgt, weil ich HTML nie richtig geschrieben hatte, aber ich konnte tun, was ich wollte, also möchte ich es zusammenfassen. Ich würde mich freuen, wenn Sie mir Ratschläge und Fehler geben könnten.
Dies ist der Artikel, auf den ich mich diesmal bezog.
[Ich habe versucht herauszufinden, wohin ich gehen möchte, indem ich word2vec und die Texte von "Theorie, dass Genshi Yonezu nirgendwo hingehen kann" vollständig genutzt habe]](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)
Die Texte sind in diesem Artikel als Textdateien verfügbar. Dieses Mal habe ich es mit Bezug auf diesen Code umgeschrieben.
Was wir diesmal bekommen werden
- Songtitel
Dies sind die oben genannten fünf. Das Ausgabeformat ist csv.
Die Site, die ich dieses Mal gescrappt habe, ist "Uta Net: Lyrics Search Service".
import re
import time
import requests
import pandas as pd
from bs4 import BeautifulSoup
# Holen Sie sich die Website und geben Sie sie im Textformat aus
def load(url):
res = requests.get(url)
#HTTPError löst HTTPError aus, wenn die HTTP-Anforderung einen fehlgeschlagenen Statuscode zurückgibt
res.raise_for_status()
# Antworttext im Textformat abrufen
return res.text
# Holen Sie sich HTML-Tag
def get_tag(html, find_tag):
soup = BeautifulSoup(str(html), 'html.parser')
tag = soup.find_all(find_tag)
return tag
# In eine Datenstruktur konvertieren, die vom Programm verarbeitet werden kann
def parse(html):
soup = BeautifulSoup(str(html), 'html.parser')
Entfernen Sie das # html-Tag
simple_row = soup.getText()
simple_row = simple_row.replace('\n', '')
simple_row = simple_row.replace(' ', '')
# Alphanumerische Zeichen löschen (falls erforderlich)
#simple_row = re.sub(r'[a-zA-Z0-9]', '', music_row)
# Symbol löschen
simple_row = re (r '[<> ♪ `' '" "・… _!?! - /: - @ [-` {- ~]', '', simple_row)
# Benachrichtigung löschen
simple_row = re sub (r'Note:. + ',' ', Simple_row)
return simple_row
# Erfassung von Songinformationen für jeden
def get_info(url):
base_url = 'https://www.uta-net.com/'
html = load(url)
#Store URL für jedes Lied
song_url = []
# Song speichern
song_info = []
songs_info = []
#Get Song URL
Speichert die URL von #td
for td in get_tag(html, 'td'):
Holen Sie sich ein Element
for a in get_tag(td, 'a'):
Gibt an, ob das Attribut #href ein Lied enthält
if 'song' in a.get ('href'):
Fügen Sie #url zum Array hinzu
song_url.append(base_url + a.get('href'))
# Songinformationen abrufen
for i, page in enumerate(song_url):
print ('{} song: {}'. format (i + 1, Seite))
html = load(page)
song_info = []
#Song_Title
for h2 in get_tag(html, 'h2'):
Einmal auf str setzen, um die # id-Suche durchzuführen
h2 = str(h2)
# Gibt an, ob es sich um ein Klassenelement handelt, in dem Texte gespeichert werden
if r'class="prev_pad"' in h2:
#Entfernen Sie unnötige Daten
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)
Wartezeit von 1 Sekunde (reduziert die Serverlast)
time.sleep(1)
break
return songs_info
def create_df(file_name, url):
#Erstellen Sie einen Datenrahmen
#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'})
# CSV-Dateiausgabe
csv = df.to_csv("csv/{}.csv".format(file_name))
return csv
Wenn Sie den obigen Code ausführen, können Sie kratzen. Sie können die Texte usw. tatsächlich erhalten, indem Sie den folgenden Code ausführen. Dieses Mal bekam ich Minami-sans Lied. Ich habe auch versucht, das Ändern des Dateinamens und der URL zu vereinfachen.
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)
Hier sind die Daten des diesmal erfassten Songs. Jetzt können Sie so viele Songs analysieren, wie Sie möchten.
Ich fand es lustig, etwas zu machen, das so funktioniert, wie ich es beabsichtigt hatte. Der Artikel hat ein starkes Selbstversorgungselement, daher möchte ich ihn später aktualisieren. (Da die Erklärung des Codes nur auskommentiert ist, ...) Ich möchte auch den Schreibstil von Qiita vereinheitlichen. Als nächstes werde ich versuchen, die natürliche Sprache zu verarbeiten.
Recommended Posts