[PYTHON] Ich habe Web Scraping versucht, um die Texte zu analysieren.

Zweck

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

  1. Songtitel
  1. Künstlername
  2. Schriftsteller
  3. Komponist
  4. Text

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".

Bibliothek

import re
import time
import requests
import pandas as pd
from bs4 import BeautifulSoup

Code-Inhalt

# 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)

Ausgabeergebnis

Hier sind die Daten des diesmal erfassten Songs. Jetzt können Sie so viele Songs analysieren, wie Sie möchten. Screen Shot 2020-05-13 at 5.45.19.png

Zusammenfassung von der Seite (?)

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

Ich habe Web Scraping versucht, um die Texte zu analysieren.
Qiita Job Ich habe versucht, den Job zu analysieren
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe versucht, WebScraping mit Python.
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, die Emotionen des gesamten Romans "Wetterkind" zu analysieren
Ich habe versucht zu kratzen
Ich habe versucht, den Befehl umask zusammenzufassen
Ich versuchte das Weckwort zu erkennen
Ich habe versucht, die grafische Modellierung zusammenzufassen.
Ich habe versucht, das Umfangsverhältnis π probabilistisch abzuschätzen
Ich habe versucht, die COTOHA-API zu berühren
Ich habe eine Web-API erstellt
Ich habe versucht, Web-Scraping mit Python und Selen
Ich habe versucht, beim Trocknen der Wäsche zu optimieren
Ich habe versucht, durch Schaben ein Bild zu bekommen
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich fing an zu analysieren
Erste Schritte mit Web Scraping
[Python] Ich habe versucht, den Pitcher zu analysieren, der keinen Treffer und keinen Lauf erzielt hat
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Aktienkurs mit "neuer Corona" gesunken? Ich habe versucht, den durchschnittlichen Aktienkurs von Nikkei durch Web-Scraping zu ermitteln
Ich habe versucht zu debuggen.
(Python) Ich habe versucht, 1 Million Hände zu analysieren ~ Ich habe versucht, die Anzahl der AA ~ zu schätzen
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Ich habe versucht, die Negativität von Nono Morikubo zu analysieren. [Vergleiche mit Posipa]
LeetCode Ich habe versucht, die einfachen zusammenzufassen
Ich habe versucht, die Neujahrskarte selbst mit Python zu analysieren
Ich habe versucht, das Problem des Handlungsreisenden umzusetzen
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich habe versucht, Iris aus dem Kamerabild zu erkennen
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, das Spiel in der J League vorherzusagen (Datenanalyse)
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren
Ich habe versucht, Pytest in die eigentliche Schlacht zu bringen
[Python] Ich habe versucht, die Top 10 der Lidschatten grafisch darzustellen
Ich habe versucht, die unverständlichen Sätze von Karen Takizawa sprachlich zu analysieren.
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe versucht, die Werbung für die Raubkopien-Website zu kratzen
Ich habe versucht, die Methode zur Mittelung der Dollarkosten zu simulieren
Ich habe versucht, die nicht negative Matrixfaktorisierung (NMF) zu wiederholen.
Ich habe versucht, die Sprache mit CNN + Melspectogram zu identifizieren
Ich habe versucht, das Wissensdiagramm mit OpenKE zu ergänzen
Ich habe versucht, die Stimmen der Sprecher zu klassifizieren
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, PredNet zu lernen
Ich habe versucht, SVM zu organisieren.
Ich habe versucht, PCANet zu implementieren