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.
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
・ 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.
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.
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.
Verwenden anderer Entwicklertools, Sie können den CCS-Sektor mit Kopieren → Kopierauswahl innerhalb des gewünschten Informationsbereichs kopieren. Manchmal funktioniert es.
Wenn Sie diese beiden Funktionen vollständig nutzen, sollten Sie in der Lage sein, den SCC-Selektor zu erhalten.
Recommended Posts