Dernier code de raclage Web J'ai pensé que c'était ennuyeux de ne pouvoir gratter qu'un par un. De plus, je veux conserver l'url que j'ai utilisée une fois, et il est fastidieux de changer le nom du fichier une fois. Alors cette fois, j'ai essayé d'améliorer ce domaine rapidement.
Cette fois, j'ai ajouté datetime à la bibliothèque. Ce serait pratique si le nom du classement quotidien, etc. change lorsque vous l'enregistrez.
import re
import time
import datetime
import requests
import pandas as pd
from bs4 import BeautifulSoup
Suppression de la suppression des caractères alphanumériques et des symboles dans la fonction d'analyse. Puisque l'espace demi-largeur entre les mots anglais disparaît, j'ai pensé qu'il serait bon de traiter les symboles en langage naturel.
# 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(' ', ' ')
#simple_row = simple_row.replace('\n', ' ')
#Supprimer les caractères alphanumériques (si nécessaire)
#simple_row = re.sub(r'[a-zA-Z0-9]', '', music_row)
#Supprimer le symbole (si nécessaire) * La difficulté est que l'espace entre les mots anglais disparaît lorsque vous utilisez ce
#simple_row = re.sub (r '[<> ♪ `' '" "・… _!?! - /: - @ [-` {- ~]', '', simple_row)
#Delete avis
simple_row = re.sub (r'Note:. + ',' ', Simple_row)
# Espace pleine largeur à demi-largeur (pour laisser les paroles interrompues)
simple_row = simple_row.replace(' ', ' ')
simple_row = simple_row.replace('\n', '')
return simple_row
J'ai un peu changé la fonction create_df.
# 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)
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
#print(songs_info)
return songs_info
csv
def create_df(URL):
file_name = URL[0]
url = URL[1]
#Créer un bloc de données
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
# Installation en vrac
def whole(URL):
for i in range(len(URL)):
URLS = URL[i]
create_df(URLS)
return
Il fait partie de la liste créée. Placez le nom du fichier à gauche (URL_fre [0] [0]). Mettez l'url à la bonne position (URL_fre [0] [1]). Avec cela, le nom du fichier est décidé arbitrairement et les paroles, etc. sont acquises.
# Classements mis à jour régulièrement
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']
]
# Une partie de la liste (j'aime ça)
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/']
]
Renommez la liste (URL) et exécutez-la pour terminer.
whole(URL)
Vous pouvez maintenant les rassembler dans une liste et les gratter tous à la fois. Maintenant, je voudrais aborder cette fois le traitement du langage naturel!
Recommended Posts