[PYTHON] Etudier le web scraping dans le but d'extraire des données de Filmarks # 2

Page d'accueil: https://program-board.com

Objectif final: extraire des données dans le but de créer une liste de films hautement évalués par groupe d'âge à partir de Filmarks. Dans cet article, nous extrayons des informations sur plusieurs éléments sur une page spécifique. Il n'y a qu'un seul film à extraire.

Vérifiez le code source

Comme précédemment, vérifiez le code source des informations que vous souhaitez extraire. Dans cet article, les informations suivantes sont extraites.

· Titre du film ・ Date de projection · Pays d'origine ・ Temps de projection ・ Genre (jusqu'à 3) ・ Star (évaluation) ·réalisé par ・ Scénario (jusqu'à 2 personnes) ・ Artistes (jusqu'à 3 personnes)

import requests
import bs4
import pandas as pd

#Obtenir des informations Web
url= 'https://filmarks.com/list/trend'
res = requests.get(url)

#Formatage HTML
soup = bs4.BeautifulSoup(res.text) #features='lxml')

Extraire des informations pour une seule œuvre

Pour le moment, extrayez les informations Web du premier travail sur l'écran d'affichage.

infos = soup.select('div.p-movie-cassette__info')
#infos = infos.select('a.c-label')
movie = infos[0]
print('Nombre d'oeuvres:{}'.format(len(infos)))
print(movie.prettify())
スクリーンショット-2019-10-05-18.51.04-1024x368.png

Extraction de plusieurs éléments

Nous allons essayer d'extraire des informations pour plusieurs éléments à partir d'ici. Cependant, comme une erreur s'est produite, des essais et erreurs pour l'erreur sont également décrits.

Erreur est survenue

Comme le code source était "un.c-label" pour extraire les informations du réalisateur de la même manière que la dernière fois, j'ai essayé d'extraire avec "a.c-label". Cependant, non seulement le réalisateur, mais aussi le scénario et le casting ont été extraits. Lors de la confirmation, le réalisateur, le script et le casting ont également été étiquetés avec «a.c-label» dans le code source.

スクリーンショット-2019-10-05-18.52.17-1024x156.png

Contre-mesures contre les erreurs

Par conséquent, lors de l'organisation des informations extraites, il est nécessaire de concevoir comme le stockage en tant qu'élément de la liste. Le code d'extraction de plusieurs éléments est défini dans movie_info () dans le but d'organiser les informations extraites. Le code et le résultat de la sortie sont les suivants.

def movie_info(info):

    #Pour la sortie
    out_list = []
    
    #Titre
    title = info.select('h3.p-movie-cassette__title')[0].text
    out_list.append(title)
    
    #Date de la projection
    release_date = info.select('span')[2].text
    release_date = '{}/{}/{}'.format(release_date[0:4],release_date[5:7],release_date[8:10])
    out_list.append(release_date)

    #Pays d'origine
    country = info.select('div.p-movie-cassette__other-info')[0].select('a')[0].text
    out_list.append(country)

    #Temps de dépistage
    time = info.select('span')[3].text.replace('Minutes','')
    out_list.append(time)
    
    #Genre(Jusqu'à 3)
    genre_list = ['-','-','-']
    
    genre_web = info.select('div.p-movie-cassette__genre')[0].select('a')#Créer une liste de genre
    for i in range(len(genre_web)):
        genre_list.insert(i,genre_web[i].text)
        
    out_list.append(genre_list[0])
    out_list.append(genre_list[1])
    out_list.append(genre_list[2])
    
    #Étoile(Évaluation)
    score = info.select('div.c-rating__score')[0].text
    out_list.append(score)
    
    #réalisé par
    director= info.select('div.p-movie-cassette__people-wrap')[0].select('a')[0].text
    out_list.append(director)
    
    #Scénario(Jusqu'à 2 personnes)
    scenario_list = ['-','-','-']
    
    scenario_web = info.select('div.p-movie-cassette__people-wrap')[1].select('a')
    for i in range(len(scenario_web)):
        scenario_list.insert(i,scenario_web[i].text)
        
    out_list.append(scenario_list[0])
    out_list.append(scenario_list[1])
    
    #Interprète(Jusqu'à 3 personnes)
    cast_list = ['-','-','-']
    
    cast_web = info.select('div.p-movie-cassette__people-wrap')[2].select('a')
    for i in range(len(cast_web)):
        cast_list.insert(i,cast_web[i].text)
        
    out_list.append(cast_list[0])
    out_list.append(cast_list[1])
    out_list.append(cast_list[2])
    
    return out_list

###################################
['Joker',
 '2019/10/04',
 'Amérique',
 '122',
 'Drame',
 'Climat',
 'Thriller en francais',
 '4.4',
 'Todd Phillips',
 'Todd Phillips',
 '-',
 'Joaquin Phoenix',
 'Robert de niro',
 '-']
###################################

Points de correction pour la prochaine fois

J'ai essayé d'extraire des informations sur plusieurs œuvres basées sur ce code, mais certaines œuvres n'avaient pas de script. Par conséquent, au lieu d'utiliser les éléments de la liste, modifiez-la pour qu'elle puisse être identifiée directement par des éléments tels que "script".

Recommended Posts

Etudier le web scraping dans le but d'extraire des données de Filmarks # 2
J'ai recherché Railway Kawayanagi à partir des données
[Python] Flux du scraping Web à l'analyse des données
Transition du baseball vue à partir des données
Gratter les données gagnantes de Numbers à l'aide de Docker
Analyse de données pour améliorer POG 1 ~ Web scraping avec Python ~
Scraping with Python - Obtenez le prix de base d'une fiducie de placement sur le site Web de l'Investment Trusts Association
Gratter les images des membres du site officiel du groupe Sakamichi
L'histoire de la copie de données de S3 vers TeamDrive de Google
Grattage du résultat de "Schedule-kun"
[tensorflow, keras, mnist] Extraire n feuilles pour chaque étiquette à partir des données mnist et créer 10 * n feuilles de données.
Agréger les appels quotidiens par seconde à partir des journaux du serveur Web en Python
Observation en virgule fixe de données spécifiques sur le Web en exécutant automatiquement un navigateur Web sur le serveur (Ubuntu16.04) (2) -Web scraping-
Vérifiez l'augmentation / la diminution des pièces de monnaie pour chaque adresse de la blockchain
Scraping avec Python - Obtenez des informations sur les attributs des fiducies d'investissement à partir du site Web de l'Investment Trusts Association
Bases de Seaborn pour les débutants ① Graphique agrégé du nombre de données (Countplot)
Comment utiliser l'apprentissage automatique pour le travail? 01_ Comprendre l'objectif de l'apprentissage automatique
Résumé des pages utiles pour étudier le framework d'apprentissage profond Chainer
(Pour les avocats) Extraire le comportement du logiciel Office à partir de fichiers .evtx
Existence du point de vue de Python
Web scraping pour les débutants en Python (1)
Grattage Web pour les notifications d'avertissement météo.
Web scraping pour les débutants en Python (4) -1
Résumer les principaux points de croissance hack des services web et les points d'analyse
Comparaison de R, Python, SAS, SPSS du point de vue des data scientists européens
Apprendre le latin dans le but d'écrire un programme d'analyse de phrases latines (partie 1)
L'histoire d'une personne qui a commencé à viser un data scientist depuis un débutant
Obtenir la liste des packages de l'utilisateur spécifié à partir des packages enregistrés dans PyPI
Scraping avec Python - Obtenir le prix de base d'une fiducie d'investissement de Yahoo! Finance
Obtenez la clé pour la migration de la deuxième couche de données JSON avec python