Site de courses de chevaux Web scraping avec Python

Comment Web scrape avec Python

À propos de cet article

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.

Destination de raclage

Extrayez les informations des sites suivants. Nom du site: netkeiba.com (https://www.netkeiba.com/?rf=logo)

# Connaissances préalables pour la génération d'URL

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

Acquisition des informations de génération d'URL (code)

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.

Obtenir la table (code)

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.

Enregistrer au format CSV (code)

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.

Autre

Veuillez noter que le web scraping (crawler) peut être illégal, comme le montre le cas Librahack.

Recommended Posts

Site de courses de chevaux Web scraping avec Python
Web scraping avec python + JupyterLab
Web scraping débutant avec python
Web scraping avec Python Première étape
J'ai essayé webScraping avec python.
Grattage avec Python
Grattage avec Python
Grattage WEB avec Python (pour mémo personnel)
Premiers pas avec Python Web Scraping Practice
[Note personnelle] Scraping de pages Web en python3
Premiers pas avec Python Web Scraping Practice
Scraping depuis un site authentifié avec python
Pratiquer le web scraping avec Python et Selenium
Scraping Web facile avec Python et Ruby
[Pour les débutants] Essayez le web scraping avec Python
Obtenez les performances passées des coureurs du site de courses de chevaux de grattage Python
Essayez de gratter avec Python.
Grattage avec du sélénium [Python]
Scraping avec Python + PyQuery
Scraping RSS avec Python
Exécutez régulièrement le scraping WEB avec AWS-Lambda + Python + Cron
Web scraping avec Python (prévisions météo)
Web scraping avec Python (cours de l'action)
J'ai essayé de gratter avec Python
Analyse de données pour améliorer POG 1 ~ Web scraping avec Python ~
Grattage au sélénium en Python
Grattage avec Selenium + Python Partie 1
Grattage avec chromedriver en python
Grattage festif avec Python, scrapy
Enregistrez des images avec le web scraping
Grattage avec du sélénium en Python
Scrapage Web rapide avec Python (tout en prenant en charge le chargement JavaScript)
Grattage Web facile avec Scrapy
Grattage avec Tor en Python
API Web avec Python + Falcon
Les débutants en Python sont bloqués dans leur premier scraping Web
Flux de raclage des données de courses de chevaux
Web scraping avec Selenium (Python)
Scraping prévisions météorologiques avec python
Grattage avec Selenium + Python Partie 2
Application Web avec Python + Flask ② ③
J'ai essayé de gratter avec du python
Rationalisez la recherche Web avec Python
Application Web avec Python + Flask ④
Exploration Web, scraping Web, acquisition de caractères et sauvegarde d'image avec python
J'ai essayé de ramper et de gratter le site de courses de chevaux Partie 2
Essayez de gratter avec Python + Beautiful Soup
Scraping avec Node, Ruby et Python
Scraping avec Selenium en Python (Basic)
Grattage WEB avec BeautifulSoup4 (page en couches)
Grattage avec Python, Selenium et Chromedriver
Premiers pas avec les applications Web Python
Gratter le classement Web d'Alexa avec pyQuery
Grattage avec Python et belle soupe
Surveillez les applications Web Python avec Prometheus
Obtenez une capture d'écran Web avec python
Faisons du scraping d'images avec Python