[PYTHON] Comment récupérer des données de courses de chevaux avec Beautiful Soup

Objectif

Prédisez les courses de chevaux par apprentissage automatique et visez un taux de récupération de 100%.

Que faire cette fois

Dans Article précédent, j'ai récupéré les données de tous les résultats de course en 2019 sur netkeiba.com. スクリーンショット 2020-07-04 22.19.07.png Cette fois, en plus de cela, je voudrais récupérer des données telles que les informations sur la date de course et l'état du terrain de course. スクリーンショット 2020-07-05 14.11.44.png

Code source

Comme la dernière fois, si vous mettez une liste de race_id, créez une fonction qui renvoie le résultat du scraping en type dictionnaire pour chaque race.

import requests
from bs4 import BeautifulSoup
import time
from tqdm.notebook import tqdm
import re

def scrape_race_info(race_id_list):
    race_infos = {}
    for race_id in tqdm(race_id_list):
        try:
            url = "https://db.netkeiba.com/race/" + race_id
            html = requests.get(url)
            html.encoding = "EUC-JP"
            soup = BeautifulSoup(html.text, "html.parser")

            texts = (
                soup.find("div", attrs={"class": "data_intro"}).find_all("p")[0].text
                + soup.find("div", attrs={"class": "data_intro"}).find_all("p")[1].text
            )
            info = re.findall(r'\w+', texts) #Frapper la barre oblique inverse dans Qiita provoque un bogue, il est donc mis en majuscule.
            info_dict = {}
            for text in info:
                if text in ["Shiba", "saleté"]:
                    info_dict["race_type"] = text
                if "Obstacle" in text:
                    info_dict["race_type"] = "Obstacle"
                if "m" in text:
                    info_dict["course_len"] = int(re.findall(r"\d+", text)[0]) #Ceci est également capitalisé.
                if text in ["Bien", "Shige", "Lourd", "不Bien"]:
                    info_dict["ground_state"] = text
                if text in ["Nuageux", "Bien", "pluie", "小pluie", "Neige légère", "neige"]:
                    info_dict["weather"] = text
                if "Année" in text:
                    info_dict["date"] = text
            race_infos[race_id] = info_dict
            time.sleep(1)
        except IndexError:
            continue
        except Exception as e:
            print(e)
            break
    return race_infos

Créez race_id_list à partir de Last scraped data, faites-en un type DataFrame comme la dernière fois et fusionnez-le avec les données d'origine.

race_id_list = results.index.unique()
race_infos = scrape_race_info(race_id_list)
for key in race_infos:
    race_infos[key].index = [key] * len(race_infos[key])
race_infos = pd.concat([pd.DataFrame(race_infos[key], index=[key]) for key in race_infos])
results = results.merge(race_infos, left_index=True, right_index=True, how='left')

Les données complètes ressemblent à ceci. スクリーンショット 2020-07-05 14.31.39.png

Nous avons une explication détaillée dans la vidéo! Analyse des données et apprentissage automatique à partir de la prédiction des courses de chevaux

Recommended Posts

Comment récupérer des données de courses de chevaux avec Beautiful Soup
Comment récupérer des données d'image de Flickr avec Python
Comment gérer les données déséquilibrées
Comment augmenter les données avec PyTorch
Comment lire les données de problème avec Paiza
Comment créer des exemples de données CSV avec hypothèse
Grattage 2 Comment gratter
Comment utiliser xgboost: classification multi-classes avec des données d'iris
Comment obtenir plus de 1000 données avec SQLAlchemy + MySQLdb
Comment extraire des données qui ne manquent pas de valeur nan avec des pandas
Comment extraire des données qui ne manquent pas de valeur nan avec des pandas
Comment mettre à jour avec SQLAlchemy?
Comment lancer avec Theano
Flux de raclage des données de courses de chevaux
Comment modifier avec SQLAlchemy?
Comment séparer les chaînes avec ','
Comment faire RDP sur Fedora31
Comment gérer les trames de données
Comment supprimer avec SQLAlchemy?
Comment gratter en quelques secondes avec le sélénium de Python
[Introduction à Python] Comment obtenir des données avec la fonction listdir
Comment annuler RT avec Tweepy
[Python] Comment FFT des données mp3
Python: comment utiliser async avec
Comment lire les données de la sous-région e-Stat
Pour utiliser virtualenv avec PowerShell
Comment installer python-pip avec ubuntu20.04LTS
Comment démarrer avec Scrapy
Comment démarrer avec Python
Comment gérer l'erreur DistributionNotFound
Comment démarrer avec Django
Comment calculer la date avec python
Comment installer mysql-connector avec pip3
Comment INNER JOIN avec SQL Alchemy
Comment installer Anaconda avec pyenv
Comment collecter des données d'apprentissage automatique
Comment extraire des fonctionnalités de données de séries chronologiques avec les bases de PySpark
[Mémo] Comment utiliser BeautifulSoup4 (2) Afficher l'en-tête de l'article avec les demandes
[Mémo] Comment utiliser BeautifulSoup4 (3) Afficher l'en-tête de l'article avec class_
Comment effectuer un traitement arithmétique avec le modèle Django
[Blender] Comment définir shape_key avec un script
Comment titrer plusieurs figures avec matplotlib
Comment accélérer la belle instanciation de soupe
Comment collecter des données Twitter sans programmation
Comment obtenir l'identifiant du parent avec sqlalchemy
[Mémo] Comment utiliser BeautifulSoup4 (1) Afficher html
Comment ajouter un package avec PyCharm
Comment installer DLIB avec 2020 / CUDA activé
Comment utiliser ManyToManyField avec l'administrateur de Django
Comment utiliser OpenVPN avec Ubuntu 18.04.3 LTS
Comment utiliser Cmder avec PyCharm (Windows)
Comment empêcher les mises à jour de paquets avec apt
Comment utiliser BigQuery en Python
Comment utiliser Ass / Alembic avec HtoA
Envoyer des données à l'API DRF avec Vue.js
Convertissez des données FX 1 minute en données 5 minutes avec Python