[PYTHON] Histoire de la voix de l'acteur Grattez Wikipedia pour voir combien d'années vous êtes devenu le doubleur de la série "Aikatsu!"

Cet article est Aikatsu! Calendrier de l'Avent 2019 C'est l'article du 18e jour. Hier, il y avait un article de gecko655 "Aikatsu! Laissez Spotify vous dire les caractéristiques musicales de la chanson".

Chose que tu veux faire

Je pense que le doubleur est l'un des éléments qui soutiennent la série "Aikatsu!". Aikatsu! Afin de devenir un doubleur, je vais gratter Wikipédia pour savoir combien d'années il sera choisi pour un rôle dans la série "Aikatsu!".

La configuration est grossièrement divisée en deux fonctions.

  1. Obtenez le nom de l'acteur vocal indiqué dans les informations sur le personnage de l'anime.
  2. Acquérir et traiter les informations de distribution du nom du doubleur acquis en 1.

la mise en oeuvre

1. Obtenez le nom de l'acteur vocal répertorié dans les informations sur le personnage de l'anime

import re
import requests
from urllib.request import urlopen
from urllib.parse import urlparse
import urllib.request
from bs4 import BeautifulSoup
from collections import OrderedDict
#Obtenez des acteurs de la voix de la page anime de Wikipedia
def get_voice_actor(soup):
    list_voice_actors_tmp=[]
    replace_list = ['/chanson-', '\[', '\(', "\n"]
    split_list = ['→', '、']

    for target in [i.text for i in soup.findAll('dd')]:
        if target.startswith("voix"):
            #Exclusion des chaînes de caractères inutiles
            voice_actor = target.replace('voix- ','')
            voice_actor = voice_actor.replace(" ","")       

            for i in replace_list:
                m = re.search(i, voice_actor)
                if(bool(m)):
                    voice_actor = voice_actor[0:m.start()]

            #Traitement fractionné de plusieurs lancers, comme descendre du plateau
            split_flg = False
            for i in split_list:
                tmp_voice_actor_list = voice_actor.split(i)
                if len(tmp_voice_actor_list) > 1:
                    #Comme il est étendu, il est dupliqué, mais comme il est dupliqué au moment du grattage, la suppression en double est effectuée en une seule fois
                    list_voice_actors_tmp.extend(tmp_voice_actor_list)
                    split_flg = True
            if split_flg:
                continue

            list_voice_actors_tmp.append(voice_actor)
    return list_voice_actors_tmp
#Obtenez une liste des acteurs de la voix Aikatsu
target_work_characters = ['Aikatsu!Liste de caractères de','Aikatsuスターズ!', 'Aikatsuフレンズ!']

list_voice_actors = []
for character in target_work_characters:
    html = requests.get(r'https://ja.wikipedia.org/wiki/{}'.format(urllib.parse.quote_plus(character, encoding='utf-8')))
    list_voice_actors.extend(get_voice_actor(BeautifulSoup(html.text, "lxml")))

Ce que je fais, c'est que le nom de l'acteur vocal figure dans les personnages de la série «Aikatsu! C'est un processus pour exclure le suffixe etc. attaché au nom de l'acteur vocal.

En conséquence, la liste suivante sera sortie.

['Sumire Moroboshi',
 'Azusa Tadokoro',
 'Ayaka Ohashi',
 'Tomoyo Kurosawa',
 'Manami Numakura',
 'Kiyono Yasuno',
 'Yuna Mimura',
 'Asami Seto',
 'Satomi Moriya',
 'Shino souterrain',
   :
   :
 'Yu Wakui',
 'Misako Tomioka',
 'Nami Tanaka',
 'Yuri Yamaoka',
 'Mitsuki Saiga',
 'Sakamoto-kun',
 'Shinya Takahashi',
 'Takashi Onozuka',
 'Nanako Mori']

La distribution du même nom est dupliquée dans le résultat de sortie. En effet, il y a des gens comme Sumire Moroboshi qui lancent plusieurs œuvres en termes de mise en œuvre. La suppression des doublons n'est pas effectuée ici, mais est supprimée lors du traitement ultérieur.

Puisqu'il y a plusieurs personnes pour chaque rôle, comme le licenciement du casting, je le divise et l'étend à List.

2. Acquérir et traiter les informations de distribution du nom du doubleur acquis en 1.

#Acquisition des informations sur les acteurs de la voix
def get_cast(html):
    soup = BeautifulSoup(html, "lxml")

    list_cast=[]
    #Boucle en unités d'anime / jeu
    for extract_dl in soup.findAll('dl') :
        for extract_dl_child in extract_dl.children :
            #Exclure les sauts de ligne
            if extract_dl_child.string == '\n':
                continue
            #Puisque l'année est définie dans la première ligne, obtenez pour le réglage
            if extract_dl_child.string is not None:
                year = extract_dl_child.string
            #Obtenez des œuvres et cast
            else:
                #Boucle pour les travaux
                for extract_li in extract_dl_child.findAll('li'):
                    extract_a = extract_li.find('a')
                    #Il est possible d'obtenir des données non-type
                    if isinstance(extract_a,type(None)) == False:
                        title = extract_a.text
                        #Obtenez le nom du personnage
                        title_char = str(extract_li.get_text())
                        character = title_char[title_char.find('(')+1:title_char.find(')')]
                        #Année,Nom du titre,Créez 1 donnée avec le nom du personnage.
                        list_cast.append("{},{},{}".format(year, title.replace(" ",""), character))                        
    return list_cast

#Obtenez des informations sur les doubleurs de Wikipedia
def get_html(target):
    
    sufffix_dict = {"Doubleur": "_(%E5%A3%B0%E5%84%AA)","Acteur": "_(%E4%BF%B3%E5%84%AA)",} 
    
    res = requests.get(r'https://ja.wikipedia.org/wiki/{}'.format(urllib.parse.quote_plus(target, encoding='utf-8')))
    
    if res.status_code == 200:
        return get_cast(res.text)

    #A considérer car il y a des cas où l'ordre n'est pas garanti selon la version de Python
    for suffix in OrderedDict(sufffix_dict).values():
        print(suffix)
        res = requests.get(r'https://ja.wikipedia.org/wiki/{}{}'.format(urllib.parse.quote_plus(target, encoding='utf-8'),suffix))

        if res.status_code == 200:
            break
            
    return get_cast(res.text)

#Traitement des informations sur les acteurs de la voix
def get_target_carrer(target_work, list_voice_actors):
    list_carrer =[]
    for target in set(list_voice_actors):
        #Obtenez des informations sur les doubleurs de Wikipedia
        list_cast = get_html(target)

        #Si vous ne pouvez pas obtenir les informations, passez à l'acteur vocal suivant
        if len(list_cast) == 0 :
            continue

        #Acquisition d'une carrière de doubleur à la hauteur du travail cible
        #Obtenir le nombre de travaux et les années d'expérience jusqu'au travail visé
        cast_year = None
        debut_year = None
        count_cast_num = 1
        for str_cast in sorted(list_cast):
            #print(str_cast)
            #Obtenez la première année. L'âge est abstrait alors supprimez-le
            if not str_cast.split(',')[0].endswith("Âge") and debut_year is None:
                debut_year = str_cast.split(',')[0]

            #Obtenez l'année du casting pour la première fois dans l'œuvre cible
            if str_cast.split(',')[1] == target_work:
                cast_year = str_cast.split(',')[0]

            #Lorsque l'année de la première distribution de l'œuvre cible est ancienne, passez au doubleur suivant
            if cast_year is not None:
                target_work_carrer = int(cast_year.replace('Année',''))  - int(debut_year.replace('Année',''))+ 1
                list_carrer.append("{},{},{},{},{},{}".format(target_work,
                                                              target, 
                                                              debut_year, 
                                                              cast_year, 
                                                              str('{}Année'.format(target_work_carrer)),
                                                              str('{}l'oeuvre'.format(count_cast_num))
                                                             )
                                  )
                break
            count_cast_num = count_cast_num + 1
    return list_carrer
target_works_list = ['Aikatsu!', 'Aikatsuスターズ!', 'Aikatsuフレンズ!']
list_va_carrer = []
for target_work in target_works_list:
    list_va_carrer.extend(get_target_carrer(target_work, list_voice_actors))

Ici, à partir du nom de l'acteur vocal, le travail d'animation / de jeu lancé par cet acteur vocal est acquis et trié. L'histoire de l'acteur vocal lors de sa première participation dans la série "Aikatsu!" À partir de son premier travail et le nombre d'œuvres coulées jusqu'à présent sont montrés.

La sortie ressemble à ceci.

['Aikatsu!,Akemi Kanda,l'année 2000,2013,14e année,152 oeuvres',
 'Aikatsu!,Ayaka Ohashi,année 2012,année 2012,1 ère année,3 oeuvres',
 'Aikatsu!,Mamiko Noto,1998,année 2012,15e année,405 oeuvres',
 'Aikatsu!,Hisako Kanemoto,2009,2015,7ème année,209 oeuvres',
 'Aikatsu!,Mari Yokoo,1980,2013,34e année,155 oeuvres',
 'Aikatsu!,Hiroshi Ienaka,1986,année 2012,27e année,152 oeuvres',
 'Aikatsu!,Miki Hase,2010,2014,5ème année,11 oeuvres',
 'Aikatsu!,Aya Susaki,2010,2014,5ème année,61 oeuvres',
 'Aikatsu!,Nanako Mori,2013,2015,Troisième année,6 oeuvres',
 'Aikatsu!,Satomi Moriya,2008,année 2012,5ème année,28 oeuvres',
                    :
                    :
 'Amis Aikatsu!,Yuri Yamaoka,2009,2018,10e année,66 oeuvres',
 'Amis Aikatsu!,Risa Kubota,2015,2018,4e année,26 oeuvres',
 'Amis Aikatsu!,Makoto Homura,l'année 2000,2018,19e année,206 oeuvres',
 'Amis Aikatsu!,Ikumi Hasegawa,2016,2018,Troisième année,27 oeuvres',
 'Amis Aikatsu!,Tomokazu Sugita,1999,2019,21e année,672 oeuvres',
 'Amis Aikatsu!,Château de Nakaeko,2014,2018,5ème année,68 oeuvres',
 'Amis Aikatsu!,Yuki Kuwahara,2013,2018,6ème année,93 oeuvres']

Quant à la façon de sortir l'histoire de l'acteur vocal, le premier rôle de la distribution est défini comme la première année, et il est soustrait de l'année où il a été lancé pour la première fois dans la série "Aikatsu!".

S'il s'agit d'un nom d'acteur vocal, vous ne pouvez pas choisir un cas comme "XXXX_ (nom d'acteur vocal)", nous l'implémentons donc pour que vous puissiez le récupérer.

En tant que problème, si un acteur comme Rin Arai qui vient de faire ses débuts ou un acteur comme Kaiko Miyama est également populaire, il est différent de Fort Mat de l'acteur général de Wikipédia, alors prenez-le. Il y a un point qu'il n'y a pas. Si vous faites une implémentation qui ramasse autant, il semble qu'il y aura de nombreuses implémentations individuelles, alors j'ai pensé qu'il valait mieux ne pas le faire, mais j'ai pensé qu'il serait préférable de faire une implémentation qui puisse dire qui ne pourrait pas la prendre.

liste

Vous trouverez ci-dessous une liste des résultats ajustés avec Pandas, la sortie et Excel.

import pandas as pd
abc = pd.Series(list_va_carrer)
df = abc.str.split(',', expand=True)
df.columns = ["Titre de l'œuvre", "Nom du doubleur", "Première année", "Année de casting", "Des débuts au casting(Ans)","Des débuts au casting(役数)"]
df.to_csv("aikatsu.csv")
アイカツ!声優一覧.png

à la fin

Aikatsu! Calendrier de l'Avent 2019 C'est encore quelques jours libres, alors n'hésitez pas à nous rejoindre!

Recommended Posts

Histoire de la voix de l'acteur Grattez Wikipedia pour voir combien d'années vous êtes devenu le doubleur de la série "Aikatsu!"
Je n'ai pas eu besoin d'écrire décorateur en classe Merci contextmanager
Comment utiliser la méthode __call__ dans la classe Python
Comment importer des fichiers où vous le souhaitez en Python
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Road to the Wizard: Étape 8 (Interpréter comment devenir un hacker)
[sh] Comment stocker les résultats de l'exécution de la commande dans des variables
Comment déterminer l'existence d'un élément sélénium en Python
Comment obtenir toutes les valeurs possibles dans une expression régulière
Comment vérifier la taille de la mémoire d'une variable en Python
<Pandas> Comment gérer les données de séries chronologiques dans le tableau croisé dynamique
Comment obtenir les coordonnées de sommet d'une entité dans ArcPy