[PYTHON] So kratzen Sie Pferderenndaten mit Beautiful Soup

Zweck

Prognostizieren Sie Pferderennen durch maschinelles Lernen und streben Sie eine Wiederherstellungsrate von 100% an.

Was ist diesmal zu tun?

In Vorheriger Artikel habe ich die Daten aller Rennergebnisse im Jahr 2019 von netkeiba.com gestrichen. スクリーンショット 2020-07-04 22.19.07.png Dieses Mal möchte ich zusätzlich Daten wie Informationen zum Renntermin und den Zustand des Fahrplatzes kratzen. スクリーンショット 2020-07-05 14.11.44.png

Quellcode

Wenn Sie wie beim letzten Mal eine Liste von race_id einfügen, erstellen Sie eine Funktion, die das Scraping-Ergebnis im Wörterbuchtyp für jedes Rennen zurückgibt.

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) #Wenn Sie in Qiita den Back Slash treffen, wird ein Fehler verursacht, der groß geschrieben wird.
            info_dict = {}
            for text in info:
                if text in ["Shiba", "Schmutz"]:
                    info_dict["race_type"] = text
                if "Hindernis" in text:
                    info_dict["race_type"] = "Hindernis"
                if "m" in text:
                    info_dict["course_len"] = int(re.findall(r"\d+", text)[0]) #Dies wird ebenfalls aktiviert.
                if text in ["Gut", "Shige", "Schwer", "不Gut"]:
                    info_dict["ground_state"] = text
                if text in ["Wolkig", "Fein", "Regen", "小Regen", "Leichter Schnee", "Schnee"]:
                    info_dict["weather"] = text
                if "Jahr" 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

Erstellen Sie die Race_id_list aus Zuletzt gescrappte Daten, machen Sie den DataFrame-Typ wie beim letzten Mal und führen Sie ihn mit den Originaldaten zusammen.

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')

Die fertigen Daten sehen so aus. スクリーンショット 2020-07-05 14.31.39.png

Wir haben eine ausführliche Erklärung im Video! Datenanalyse und maschinelles Lernen beginnend mit der Vorhersage von Pferderennen

Recommended Posts

So kratzen Sie Pferderenndaten mit Beautiful Soup
So kratzen Sie Bilddaten von Flickr mit Python
Umgang mit unausgeglichenen Daten
Aufblasen von Daten (Datenerweiterung) mit PyTorch
Wie man Problemdaten mit Paiza liest
Erstellen von CSV-Beispieldaten mit Hypothese
Schaben 2 Wie man kratzt
Verwendung von xgboost: Mehrklassenklassifizierung mit Irisdaten
So erhalten Sie mit SQLAlchemy + MySQLdb mehr als 1000 Daten
So extrahieren Sie mit Pandas Daten, denen der Wert nan nicht fehlt
So extrahieren Sie mit Pandas Daten, denen der Wert nan nicht fehlt
Wie aktualisiere ich mit SQLAlchemy?
Wie man mit Theano besetzt
Datenrabatfluss für Pferderennen
Wie mit SQLAlchemy ändern?
So trennen Sie Zeichenfolgen mit ','
Wie man RDP auf Fedora31 macht
Umgang mit Datenrahmen
Wie lösche ich mit SQLAlchemy?
Wie man mit Pythons Selen in Sekundenschnelle kratzt
[Einführung in Python] So erhalten Sie Daten mit der Funktion listdir
So brechen Sie RT mit tweepy ab
[Python] Wie man MP3-Daten fFT
Python: So verwenden Sie Async mit
Lesen von e-Stat-Subregionsdaten
So verwenden Sie virtualenv mit PowerShell
So installieren Sie Python-Pip mit Ubuntu20.04LTS
Wie fange ich mit Scrapy an?
Erste Schritte mit Python
Umgang mit dem DistributionNotFound-Fehler
Wie fange ich mit Django an?
So berechnen Sie das Datum mit Python
So installieren Sie den MySQL-Connector mit pip3
So verbinden Sie INNER mit SQL Alchemy
So installieren Sie Anaconda mit pyenv
Sammeln von Daten zum maschinellen Lernen
So extrahieren Sie Funktionen von Zeitreihendaten mit PySpark Basics
[Memo] Verwendung von Beautiful Soup4 (2) Zeigen Sie die Artikelüberschrift mit Anfragen an
[Memo] Verwendung von BeautifulSoup4 (3) Zeigen Sie die Artikelüberschrift mit class_ an
So führen Sie eine arithmetische Verarbeitung mit der Django-Vorlage durch
[Blender] So legen Sie shape_key mit dem Skript fest
Wie man mit matplotlib mehrere Figuren betitelt
Wie man die schöne Suppeninstanziierung beschleunigt
So sammeln Sie Twitter-Daten ohne Programmierung
So erhalten Sie die Eltern-ID mit sqlalchemy
[Memo] Verwendung von BeautifulSoup4 (1) HTML anzeigen
So fügen Sie ein Paket mit PyCharm hinzu
So installieren Sie DLIB mit aktiviertem 2020 / CUDA
Verwendung von ManyToManyField mit Djangos Admin
Verwendung von OpenVPN mit Ubuntu 18.04.3 LTS
Verwendung von Cmder mit PyCharm (Windows)
So verhindern Sie Paketaktualisierungen mit apt
So arbeiten Sie mit BigQuery in Python
Wie man Ass / Alembic mit HtoA benutzt
Senden Sie Daten mit Vue.js an die DRF-API