Ich weiß nicht, wie viele Biere es sein werden, aber ich werde beschreiben, wie die Informationen auf der Pferderennseite in das CSV-Format gebracht werden. Die verwendete Sprache ist Python 3.6 und die Umgebung ist Jupyter Notebook.
Ich bin neu in Python und frage mich, ob es redundanten Code oder intelligentere Techniken gibt. Diesmal besteht der Zweck jedoch nicht darin, schönen Code zu erstellen. Daher ist es gut, ihn als zukünftige Verbesserung zu erkennen.
Extrahieren Sie Informationen von den folgenden Websites. Site-Name: netkeiba.com (https://www.netkeiba.com/?rf=logo)
Auf netkeiba.com gibt es für jedes Rennen eine Webseite. Die URL dieser Webseite wird durch die folgenden Regeln bestimmt.
https://race.netkeiba.com/race/result.html?race_id=開催年+競馬場コード+開催回数+日数+レース数+&rf=race_list
Nehmen wir das Beispiel des ersten Rennens am 4. Tag von Tokio am 3. Mai 2020 auf der Rennstrecke von Tokio.
Name der Rennbahn | Rennbahncode |
---|---|
Sapporo | 01 |
Hakodate | 02 |
Fukushima | 03 |
Niigata | 04 |
Tokio | 05 |
Nakayama | 06 |
Chukyo | 07 |
Kyoto | 08 |
Hanshin | 09 |
Ogura | 10 |
Wenn das Obige angewendet wird, wird es wie folgt. https://race.netkeiba.com/race/result.html?race_id=202005020401&rf=race_list
Dies ist der Code von der URL-Generierung bis zur Informationserfassung.
web1.ipynb
# -*- coding: utf-8 -*-
import csv
import requests
import codecs
import time
from datetime import datetime as dt
from collections import Counter
from bs4 import BeautifulSoup
import re
import pandas
race_date ="2020"
race_course_num="06"
race_info ="03"
race_count ="05"
race_no="01"
url = "https://race.netkeiba.com/race/result.html?race_id="+race_date+race_course_num+race_info+race_count+race_no+"&rf=race_list"
#Holen Sie sich die Daten der entsprechenden URL im HTML-Format
race_html=requests.get(url)
race_html.encoding = race_html.apparent_encoding
race_soup=BeautifulSoup(race_html.text,'html.parser')
print(url)
Nachdem Sie die obigen Schritte ausgeführt haben, wird die generierte URL angezeigt.
Dies ist der Code, um die Tabelle aus dem erhaltenen HTML-Text abzurufen. (Zum obigen Code hinzugefügt)
web1.ipynb
#Holen Sie sich und speichern Sie nur den Renntisch
HorseList = race_soup.find_all("tr",class_="HorseList")
#Formgebung des Renntisches
#Erstellen Sie eine Liste mit der Renntabelle
Race_lists = []
#Anzahl der Zeilen in der Tabelle=15("Reihenfolge der Ankunft,Rahmen,Pferdenummer,Pferdename,Sexuelles Alter,Gewicht,Reiter,Zeit,Unterschied,Beliebt,Gewinnchancen,Nach 3F,Eckübergabe,stabil,Pferdegewicht(Erhöhen verringern))
Race_row = 15
#Zählen Sie die Anzahl der Läufer
uma_num = len(HorseList)
#Entfernen Sie unnötige Zeichenfolgen und speichern Sie sie in der Liste
for i in range(uma_num):
Race_lists.insert(1+i, HorseList[i])
Race_lists[i] = re.sub(r"\n","",str(Race_lists[i]))
Race_lists[i] = re.sub(r" ","",str(Race_lists[i]))
Race_lists[i] = re.sub(r"</td>",",",str(Race_lists[i]))
Race_lists[i] = re.sub(r"<[^>]*?>","",str(Race_lists[i]))
Race_lists[i] = re.sub(r"\[","",str(Race_lists[i]))
Race_lists[i] = re.sub(r"\]","",str(Race_lists[i]))
print(Race_lists[i])
Wenn das obige ausgeführt wird, ist die Ausgabe wie folgt. 1,1,1, Red Calm, Female 3,54,0, Satoshi Ishibashi, 1: 25,7 ,, 3,4,6,37,1 ,, Takeshi Miura Okumura, 512 (-4), 2,6,12, Sanky West, weiblich 3,54,0, Iwabe, 1: 25,7, Hana, 2,3,2,36,5 ,, Miura Kayano, 442 (-8), (Unten weggelassen)
Andere Tabellen können auf ähnliche Weise mit einigen Unterschieden erhalten werden.
Nachdem Sie die gewünschten Informationen erhalten haben, speichern Sie diese als CSV-Datei. (Zum obigen Code hinzugefügt)
web1.ipynb
#csv öffnen
out=codecs.open("./this_race_table"+race_date+race_course_num+race_info+race_count+race_no+".csv","w")
#Dieses Mal wird der Spaltenname der Übersichtlichkeit halber in CSV beschrieben..(Beachten Sie, dass Sie es nicht wirklich brauchen)
out.write("Reihenfolge der Ankunft,Rahmen,Pferdenummer,Pferdename,Sexuelles Alter,Gewicht,Reiter,Zeit,Unterschied,Beliebt,Gewinnchancen,Nach 3F,Eckübergabe,stabil,Pferdegewicht(Erhöhen verringern)\n")
#Füllen Sie den Inhalt der Renntabellenliste in csv aus
for i in range(uma_num):
out.write(str(Race_lists[i]+"\n"))
out.close()
Durch Ausführen der obigen Schritte wird eine CSV in dem Ordner erstellt, in dem die Quellcodedatei vorhanden ist.
Dies ist das Ende des Schabens.
Bitte beachten Sie, dass Web Scraping (Crawler) illegal sein kann, wie im Fall Librahack dargestellt.
Recommended Posts