Holen Sie sich vergangene Leistung von Läufern von Python Scraping Pferderennen Website

Hintergrund

Derzeit für Pferderennen x maschinelles Lernen, Ich arbeite daran, Informationen über Pferderennen von einer Webseite zu kratzen.

Ich versuche, die bisherigen Ergebnisse der Läufer in die Eingabeinhalte einzubeziehen. Rufen Sie daher die URL der Läuferseite aus der Rennergebnistabelle des Pferderennens ab, greifen Sie darauf zu und Ich beschloss, die vergangenen Ergebnisse des Renntages zu erhalten.

Konzept

ss図1.png

Beispielcode

Die Idee sind die folgenden drei Punkte. ・ Einheitliche Erfassungsmethode mit CSS-Selektor ・ Erhalten Sie die URL jedes Pferdes aus der Rennergebnistabelle und erhalten Sie die auf dieser URL veröffentlichten früheren Ergebnisse. ・ Obwohl diesmal 12 Pferde laufen, werden Variablen variabler Länge verwendet, damit andere Pferde erworben werden können.

Vor diesem Artikel habe ich Extrahieren der Rennumgebung von der Python-Scraping-Pferderennwebsite vorgestellt. Ich habe Beautiful Soup für die Rennumgebung verwendet. Es fühlt sich jedoch besser an, den CSS-Selektor für die einheitliche Verarbeitung zu verwenden, daher habe ich ihn neu geschrieben.

scraping_of_race_and_past_horse_result.py


import requests
import lxml.html 
import csv

rlt = [] #Ergebnis
horse_URL = []#Holen Sie sich den Namen des Pferdes

#Holen Sie sich Text mit Scalping
def get_scarping_data(key_page,css_select_str,*URL):
    #Informationen zur Anzahl der erfassten URLs abrufen
    for i in range(len(URL)):
        #Zeichenfolge von URL abrufen
        r = requests.get(URL[i])#Geben Sie die URL an
        r.encoding = r.apparent_encoding #Verhindern Sie verstümmelte Zeichen
        html = lxml.html.fromstring(r.text) #Erfasste Zeichenfolgendaten
        #Artikel erhalten
        for css_id in html.cssselect(css_select_str):        
            #Rennumgebung der Rennergebnisseite
            if key_page == "condition_in_race_page" :
                #Elementnummer Text
                css_id = css_id.text_content()
                #Einschlussnotation Beim Extrahieren"Wetter"Ist unveränderlich, geben Sie die Bedingung an
                css_id_ = [css_id for t in css_id if "Wetter" in css_id]
                css_id_ = css_id_[0].split('\xa0/\xa0')
                #Zeilendaten in der Liste(Liste hinzufügen)
                rlt.append(css_id_)
            #Rennergebnis Website Rennergebnis
            if key_page == "result_in_race_page" :
                #Elementnummer Text
                css_id = css_id.text_content()
                #Neue Zeile("\n")Teilen basierend auf
                css_id = css_id.split("\n")
                #Einschlussnotation Schließt leere Elemente aus
                css_id_ = [tag for tag in css_id if tag != '']
                #Der 1. Platz hat keinen Zeitrekord#8. 0, die zwangsweise hinzugefügt werden muss
                if len(css_id_) != 13 : css_id_.insert(8,0)
                #Zeilendaten in der Liste(Liste hinzufügen)
                rlt.append(css_id_) 
            #Ehemaliger Aufführungsort von Rennpferden
            if key_page == "horse_race_data" : 
                #Elementnummer Text
                css_id = css_id.text_content()
                #Von der erworbenen Elementnummer
                css_id = css_id.split("\n")
                #Einschlussnotation leer"\xa0"Wann"Video"Entfernen
                css_id_ = [tag for tag in css_id 
                if tag != '' and tag != "\xa0" and tag != "Video" and tag != "Kabinenkommentar" and tag != "Bemerkungen" ]
                #Zeilendaten in der Liste(Liste hinzufügen)
                rlt.append(css_id_)        
    #Extraktionsergebnis
    return rlt

#Holen Sie sich die URL des Rennpferdes
def get_scarping_past_horse_date(URL):            
    response = requests.get(URL)
    root = lxml.html.fromstring(response.content)
    #1~Informieren Sie sich über bis zu 12 Pferde
    for i in range(2,14):#2~13  13 - 2 + 1 = 12 
        css_select_str = "div#race_main tr:nth-child({}) > td:nth-child(4) > a".format(i)
        #Informieren Sie sich über Rennpferde
        for a in root.cssselect(css_select_str):
            horse_URL.append(a.get('href'))
    #Extraktionsergebnis
    return horse_URL

#Holen Sie sich zuerst die Rennumgebung von der ursprünglichen Rennseite
URL = "https://nar.netkeiba.com/?pid=race&id=p201942100701" 
#Holen Sie sich die Rennumgebung
rlt = get_scarping_data("condition_in_race_page","div#main span",URL)
#Erhalten Sie Rennergebnisse
rlt = get_scarping_data("result_in_race_page","#race_main > div > table > tr",URL)
#Holen Sie sich die URL des Rennpferdes
horse_URL = get_scarping_past_horse_date(URL)
print(len(horse_URL))#Das Ausgabeergebnis ist 12 für den Läufer 12
#Erhalten Sie vergangene Noten von der URL des erworbenen Pferdes
#Artikel(1 Zeile)Erhalten
rlt = get_scarping_data("horse_race_data", "#contents > div.db_main_race.fc > div > table > thead > tr",horse_URL[0])
#Andere Bewertungsdaten als Elemente
rlt = get_scarping_data("horse_race_data", "#contents > div.db_main_race.fc > div > table > tbody > tr",*horse_URL)
#In CSV-Datei speichern
with open("scraping_of_race_and_past_horse_result.csv", 'w', newline='') as f: 
    wrt = csv.writer(f) 
    wrt.writerows(rlt) #Schreiben des Extraktionsergebnisses

Ausführungsergebnis

sss.png

Reflexionen

・ Ich habe die URL erhalten, unter der die Pferdeinformationen aus dem Rennergebnis veröffentlicht wurden, und konnte die vergangenen Ergebnisse abrufen. ・ Obwohl ich in der Lage war, frühere Ergebnisse zu erhalten, werden auch die neuesten Informationen veröffentlicht. Daher ist es erforderlich, Ergebnisse zu erhalten, die auf das Renntermin zurückgehen. -Die erfassten Informationen wurden nicht in das neuronale Netzwerk eingegeben. ・ Erfassen Sie automatisch das Renntermin. Überprüfen Sie nicht jedes Mal → Als Methode wird der numerische Wert der Renninformationen (12 Stellen am Ende der URL) unter Berücksichtigung der Regelmäßigkeit erhöht.

So überprüfen Sie die CSS-Auswahl

Für das Scraping muss der folgende Code (Zeichenfolge) beherrscht werden. (#contents > div.db_main_race.fc > div > table > tbody > tr') ↑ Fassen Sie zusammen, wie Sie diesen Teil erhalten.

how_to_search_css_sector.py


for h in html.cssselect('#contents > div.db_main_race.fc > div > table > tbody > tr'):#Geben Sie den Scraping-Speicherort mit der CSS-Auswahl an

Zuerst habe ich nur einen Code kopiert oder geschrieben, der so aussah und es ausprobiert, aber es hat nicht funktioniert. .. .. Als ich nachgeschlagen habe, war CSS beteiligt. Um herauszufinden, aus welchem CSS-Selektor das gewünschte Element besteht Verwenden Sie das Chrome-Tool CSS-Auswahl kopieren. 無題4.png

Klicken Sie nach der Installation mit der rechten Maustaste, um ein CSS-Auswahlelement kopieren zu erstellen. Sie können den CSS-Selektor herausfinden, indem Sie den CSS-Selektor kopieren für das gewünschte Element ausführen und ihn in den Text einfügen, um ihn zu überprüfen.

無題4.png

Verwenden anderer Entwicklertools, Sie können den CCS-Sektor mit Kopieren → Kopierauswahl innerhalb des gewünschten Informationsbereichs kopieren. Manchmal funktioniert es. 無題5.png

Wenn Sie diese beiden Funktionen vollständig nutzen, sollten Sie in der Lage sein, den SCC-Selektor zu erhalten.

Recommended Posts

Holen Sie sich vergangene Leistung von Läufern von Python Scraping Pferderennen Website
Python-Scraping Extrahieren Sie die Rennumgebung von der Pferderennseite
Pferderennseite Web Scraping mit Python
Scraping von einer authentifizierten Site mit Python
Holen Sie sich den Inhalt von Git Diff aus Python
[Python] Ruft den Gesetzestext aus der e-GOV-Gesetz-API ab
Grundlagen der Python-Scraping-Grundlagen
Holen Sie sich den Rückkehrcode eines Python-Skripts von bat
Die endgültige Ausgabe von Python Scraping! (Zielort: Große Kamera)
Kratzen Sie die reCAPTCHA-Site jeden Tag automatisch ab (1/7: Aufbau der Python-Umgebung)
Ich habe versucht, den Pferderennplatz Teil 2 zu kriechen und abzukratzen
Datenrabatfluss für Pferderennen
Rufen Sie mit BeautifulSoup + Python PowerShell-Befehle von einer Website für dynamische Malware-Analysen ab
Ich habe versucht, mit Pandas eine Pferderenn-Datenbank zu erstellen
[Python] Ruft das Aktualisierungsdatum eines Nachrichtenartikels aus HTML ab
Scrapping von Pferderenndaten im Colaboratory
Existenz aus Sicht von Python
Holen Sie sich Qiita-Trends mit Python-Scraping
Python Holen Sie sich das kommende Wetter von der Wetter-API
Holen Sie sich Wetterinformationen mit Python & Scraping
[Python] Informationen zu Scraping-Objektiven von price.com