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.
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
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
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
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/']
]
Benennen Sie die Liste (URL) um und führen Sie sie aus, um den Vorgang abzuschließen.
whole(URL)
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