[PYTHON] Ich möchte sie alle zusammen kratzen.

Einführung

Letzter Web-Scraping-Code Ich fand es ärgerlich, dass ich nur einen nach dem anderen kratzen konnte. Außerdem möchte ich die URL beibehalten, die ich einmal verwendet habe, und es ist mühsam, den Dateinamen einmal zu ändern. Also habe ich diesmal versucht, diesen Bereich schnell zu verbessern.

Bibliothek

Diesmal habe ich der Bibliothek datetime hinzugefügt. Es wäre praktisch, wenn sich der Name des täglichen Rankings usw. beim Speichern ändert.

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

Vorbereitung Teil1

Das Entfernen von alphanumerischen Zeichen und Symbolen in der Analysefunktion wurde entfernt. Da der Abstand zwischen den englischen Wörtern in halber Breite verschwindet, hielt ich es für gut, Symbole in natürlicher Sprache zu verarbeiten.

# 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(' ', ' ')
    #simple_row = simple_row.replace('\n', ' ')
    
 # Alphanumerische Zeichen löschen (falls erforderlich)
    #simple_row = re.sub(r'[a-zA-Z0-9]', '', music_row)
 # Löschsymbol (falls erforderlich) * Die Schwierigkeit besteht darin, dass der Abstand zwischen englischen Wörtern verschwindet, wenn Sie dies verwenden
 #simple_row = re.sub (r '[<> ♪ `' '" "・… _!?! - /: - @ [-` {- ~]', '', simple_row)
 # Benachrichtigung löschen
 simple_row = re sub (r'Note:. + ',' ', Simple_row)
    
 # Raum in voller Breite bis halbe Breite (damit der Text unterbrochen wird)
    simple_row = simple_row.replace(' ', ' ')
    simple_row = simple_row.replace('\n', '')
    return simple_row

Vorbereitung Teil2

Ich habe die Funktion create_df ein wenig geändert.

# 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)
                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
                
    #print(songs_info)
    return songs_info

csv
def create_df(URL):
    file_name = URL[0]
    url = URL[1]
 #Erstellen Sie einen Datenrahmen
    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

# Masseninstallation
def whole(URL):
    for i in range(len(URL)):
        URLS = URL[i]
        create_df(URLS)
    return

aufführen

Es ist Teil der erstellten Liste. Platzieren Sie den Dateinamen an der linken Position (URL_fre [0] [0]). Platzieren Sie die URL an der richtigen Stelle (URL_fre [0] [1]). Dabei wird der Dateiname willkürlich festgelegt und die Texte etc. erfasst.

# Rankings, die regelmäßig aktualisiert werden
URL_fre = [['{}_daily'.format(datetime.date.today()), 'https://www.uta-net.com/user/ranking/daily.html'],
           ['{}_weekly'.format(datetime.date.today()), 'https://www.uta-net.com/user/ranking/weekly.html'],
           ['{}_monthly'.format(datetime.date.today()), 'https://www.uta-net.com/user/ranking/monthly.html']
          ]

# Teil der Liste (ich mag es)
 URL_setting = [['Yorushika', 'https://www.uta-net.com/artist/22653/'],
               ['YOASOBI', 'https://www.uta-net.com/artist/28370/'],
               ['RADWIMPS', 'https://www.uta-net.com/artist/4082/']
              ]

Lauf

Benennen Sie die Liste (URL) um und führen Sie sie aus, um den Vorgang abzuschließen.

whole(URL)

Zusammenfassung

Jetzt können Sie sie in einer Liste sammeln und alle auf einmal abkratzen. Jetzt möchte ich diesmal auf die Verarbeitung natürlicher Sprache eingehen!

Recommended Posts

Ich möchte sie alle zusammen kratzen.
Ich möchte Bilder kratzen und trainieren
Ich möchte SUDOKU lösen
Ich möchte systemd grob verstehen
Ich möchte ○○ mit Pandas machen
Ich möchte Yolos Anmerkung kopieren
Ich möchte mit Python debuggen
MacBookPro-Setup Schließlich möchte ich eine Neuinstallation durchführen
Ich möchte Spyder an die Taskleiste anheften
Ich möchte Objekte mit OpenCV erkennen
Ich möchte kühl auf die Konsole ausgeben
Ich möchte in der Einschlussnotation drucken
Ich möchte mit dem Reim Teil1 umgehen
Ich möchte wissen, wie LINUX funktioniert!
Ich möchte einen Blog mit Jupyter Notebook schreiben
Ich möchte mit dem Reim part3 umgehen
Ich möchte ein Glas aus Python verwenden
Ich möchte eine Python-Umgebung erstellen
Ich möchte Linux auf dem Mac verwenden
Ich möchte eine Pip-Installation mit PythonAnywhere durchführen
Ich möchte Protokolle mit Python analysieren
Ich möchte mit aws mit Python spielen
Ich möchte IPython Qt Console verwenden
Ich möchte den Fortschrittsbalken anzeigen
Ich möchte ein Automatisierungsprogramm erstellen!
Ich möchte Matplotlib in PySimpleGUI einbetten
Ich möchte mit dem Reim part2 umgehen
Ich möchte Android-Apps auf Android entwickeln
Ich möchte, dass CAPTCHA HIWAI-Wörter sagt
Ich möchte mit dem Reim part5 umgehen
Ich möchte mit dem Reim part4 umgehen
[Frage] Ich möchte eine Zeichenkette kratzen, die von eindeutigen Tags umgeben ist!
Ich möchte Matplotlib zu einem dunklen Thema machen
Ich möchte aus verschiedenen Sprachen eine Verbindung zu PostgreSQL herstellen
Ich möchte Dunnetts Test in Python machen
Ich möchte an eine Wiederholung denken können
Ich möchte einfach ein Rauschmodell erstellen
Ich möchte MATLAB feval mit Python verwenden
Ich möchte Datetime.now in Djangos Test reparieren
Ich möchte einen DataFrame in MSSQL einfügen
Ich möchte mich mit Schlüsselwortargumenten von Python merken
Ich möchte mit Python ein Fenster erstellen
Wie auch immer, ich möchte JSON-Daten einfach überprüfen
Ich möchte mit Python eine E-Mail von Google Mail senden.
[Python] Ich möchte 7DaysToDie von Discord aus verwalten! 1/3
Ich möchte datetime.datetime.now () auch mit pytest verspotten!
Ich möchte mehrere Bilder mit matplotlib anzeigen.
Ich möchte 100 Datenwissenschaften mit Colaboratory schlagen
Ich möchte ein Spiel mit Python machen
Ich möchte CSV-Dateien mit Vega-Lite visualisieren!
Ich möchte mit dem Reim part7 (BOW) umgehen
Ich möchte OREMO mit setParam sein!
Ich möchte keinen Codierungstest machen
Ich möchte DB-Informationen in einer Liste speichern
Ich möchte verschachtelte Dicts in Python zusammenführen
Ich möchte Passungen aus meinem Kopf machen
Ich möchte systemd nach Zeitzone verwalten! !!