Je ne sais pas combien de bières il y aura, mais je décrirai comment mettre les informations sur le site des courses de chevaux au format CSV. Le langage utilisé est Python 3.6 et l'environnement est Jupyter Notebook.
Je suis nouveau sur Python, donc je me demande s'il existe du code redondant ou des techniques plus intelligentes. Cependant, cette fois, le but n'est pas de créer un beau code, il est donc bon de le reconnaître comme une amélioration future.
Extrayez les informations des sites suivants. Nom du site: netkeiba.com (https://www.netkeiba.com/?rf=logo)
Sur netkeiba.com, il y a une page Web pour chaque course. L'URL de cette page Web est déterminée par les règles suivantes.
https://race.netkeiba.com/race/result.html?race_id=開催年+競馬場コード+開催回数+日数+レース数+&rf=race_list
Prenons l'exemple de la 1ère course de la 4ème journée de Tokyo qui s'est tenue le 3 mai 2020 à l'hippodrome de Tokyo.
--Date: 2020 (= 2020) --Code de piste: 05 (= Tokyo) --Nombre de fois: 02 (= 2 fois) --Jours: 04 (= 4ème jour) --Nombre de courses: 01 (= 1ère course)
Nom de l'hippodrome | Code de l'hippodrome |
---|---|
Sapporo | 01 |
Hakodate | 02 |
Fukushima | 03 |
Niigata | 04 |
Tokyo | 05 |
Nakayama | 06 |
Chukyo | 07 |
Kyoto | 08 |
Hanshin | 09 |
Ogura | 10 |
Lorsque ce qui précède est appliqué, cela devient comme suit. https://race.netkeiba.com/race/result.html?race_id=202005020401&rf=race_list
C'est le code de la génération d'URL à l'acquisition d'informations.
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"
#Récupérez les données de l'URL correspondante au format HTML
race_html=requests.get(url)
race_html.encoding = race_html.apparent_encoding
race_soup=BeautifulSoup(race_html.text,'html.parser')
print(url)
Après avoir fait ce qui précède, vous verrez l'URL générée.
C'est le code pour obtenir le tableau à partir du texte HTML obtenu. (Ajouté au code ci-dessus)
web1.ipynb
#Obtenez et enregistrez uniquement la table de course
HorseList = race_soup.find_all("tr",class_="HorseList")
#Mise en forme de la table de course
#Créez une liste pour inclure la table de course
Race_lists = []
#Nombre de lignes dans le tableau=15("Ordre d'arrivée,Cadre,Numéro de cheval,Nom du cheval,Âge sexuel,Poids,Cavalier,temps,Différence,Populaire,Gagnez des chances,Après 3F,Ordre de passage de coin,stable,Poids du cheval(Augmentation Diminution))
Race_row = 15
#Comptez le nombre de coureurs
uma_num = len(HorseList)
#Supprimer les chaînes inutiles et stocker dans la 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])
Lorsque ce qui précède est exécuté, la sortie sera la suivante.
1,1,1, Red Calm, Femme 3,54,0, Satoshi Ishibashi, 1: 25,7 3,4,6,37,1
Takeshi Miura Okumura, 512 (-4),
2,6,12, Sanky West, Femme 3,54,0, Iwabe, 1: 25,7, Hana, 2,3,2,36,5`` Miura Kayano, 442 (-8),
(Omis ci-dessous)
D'autres tableaux peuvent être obtenus de la même manière, avec quelques différences.
Maintenant que vous disposez des informations souhaitées, enregistrez-les sous forme de fichier CSV. (Ajouté au code ci-dessus)
web1.ipynb
#ouvrir csv
out=codecs.open("./this_race_table"+race_date+race_course_num+race_info+race_count+race_no+".csv","w")
#Cette fois, le nom de la colonne est décrit en CSV pour plus de clarté..(Notez que vous n'en avez pas vraiment besoin)
out.write("Ordre d'arrivée,Cadre,Numéro de cheval,Nom du cheval,Âge sexuel,Poids,Cavalier,temps,Différence,Populaire,Gagnez des chances,Après 3F,Ordre de passage de coin,stable,Poids du cheval(Augmentation Diminution)\n")
#Remplissez le contenu de la liste de la table des courses en csv
for i in range(uma_num):
out.write(str(Race_lists[i]+"\n"))
out.close()
L'exécution de ce qui précède créera un CSV dans le dossier où se trouve le fichier de code source.
C'est la fin du grattage.
Veuillez noter que le web scraping (crawler) peut être illégal, comme le montre le cas Librahack.
Recommended Posts