Actuellement, pour les courses de chevaux x l'apprentissage automatique, Je travaille sur la récupération d'informations sur les courses de chevaux à partir d'une page Web.
J'essaie d'incorporer les résultats passés des coureurs dans le contenu d'entrée. Par conséquent, récupérez l'URL de la page du cheval courant à partir du tableau des résultats de la course de chevaux, accédez-y J'ai décidé d'obtenir les résultats passés de la journée de course.
L'idée est constituée des trois points suivants. ・ Méthode d'acquisition unifiée avec sélecteur CSS ・ Obtenez l'URL de chaque cheval à partir du tableau des résultats de la course et obtenez les résultats passés publiés sur cette URL. ・ Bien qu'il y ait 12 chevaux qui courent cette fois, des variables de longueur variable sont utilisées afin que d'autres chevaux puissent être acquis.
Avant cet article, j'ai présenté Extraction de l'environnement de course du site de courses de chevaux de grattage Python. J'ai utilisé Beautiful Soup pour l'environnement de course. Cependant, je l'ai réécrit car il est préférable d'utiliser le sélecteur css pour un traitement unifié.
scraping_of_race_and_past_horse_result.py
import requests
import lxml.html
import csv
rlt = [] #résultat
horse_URL = []#Obtenez le nom du cheval
#Obtenez du texte avec un scalping
def get_scarping_data(key_page,css_select_str,*URL):
#Obtenir des informations sur le nombre d'URL acquises
for i in range(len(URL)):
#Obtenir la chaîne de l'URL
r = requests.get(URL[i])#Spécifiez l'URL
r.encoding = r.apparent_encoding #Empêcher les caractères déformés
html = lxml.html.fromstring(r.text) #Données de chaîne de caractères acquises
#Obtenir l'article
for css_id in html.cssselect(css_select_str):
#Environnement de course du site de résultats de course
if key_page == "condition_in_race_page" :
#Texte du numéro d'élément
css_id = css_id.text_content()
#Notation d'inclusion lors de l'extraction"Météo"Est immuable, alors spécifiez la condition
css_id_ = [css_id for t in css_id if "Météo" in css_id]
css_id_ = css_id_[0].split('\xa0/\xa0')
#Données de ligne dans la liste(Ajouter la liste)
rlt.append(css_id_)
#Résultat de la course sur le site des résultats de la course
if key_page == "result_in_race_page" :
#Texte du numéro d'élément
css_id = css_id.text_content()
#nouvelle ligne("\n")Diviser en fonction de
css_id = css_id.split("\n")
#Notation d'inclusion Exclut les éléments vides
css_id_ = [tag for tag in css_id if tag != '']
#La 1ère place n'a pas de record de temps#8e 0 qui doit être ajouté de force
if len(css_id_) != 13 : css_id_.insert(8,0)
#Données de ligne dans la liste(Ajouter la liste)
rlt.append(css_id_)
#Site de performances passées de chevaux de course
if key_page == "horse_race_data" :
#Texte du numéro d'élément
css_id = css_id.text_content()
#Du numéro d'élément acquis
css_id = css_id.split("\n")
#Notation d'inclusion vide"\xa0"Quand"Vidéo"Retirer
css_id_ = [tag for tag in css_id
if tag != '' and tag != "\xa0" and tag != "Vidéo" and tag != "Commentaire de cabine" and tag != "Remarques" ]
#Données de ligne dans la liste(Ajouter la liste)
rlt.append(css_id_)
#Résultat d'extraction
return rlt
#Obtenez l'URL du cheval de course
def get_scarping_past_horse_date(URL):
response = requests.get(URL)
root = lxml.html.fromstring(response.content)
#1~Obtenez des informations sur jusqu'à 12 chevaux
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)
#Obtenez des informations sur les chevaux de course
for a in root.cssselect(css_select_str):
horse_URL.append(a.get('href'))
#Résultat d'extraction
return horse_URL
#Tout d'abord, récupérez l'environnement de course à partir du site de course d'origine
URL = "https://nar.netkeiba.com/?pid=race&id=p201942100701"
#Obtenez l'environnement de course
rlt = get_scarping_data("condition_in_race_page","div#main span",URL)
#Obtenez les résultats de la course
rlt = get_scarping_data("result_in_race_page","#race_main > div > table > tr",URL)
#Obtenez l'URL du cheval de course
horse_URL = get_scarping_past_horse_date(URL)
print(len(horse_URL))#Le résultat de sortie est 12 pour le coureur 12
#Obtenir les notes précédentes à partir de l'URL du cheval acquis
#article(1 ligne)Avoir
rlt = get_scarping_data("horse_race_data", "#contents > div.db_main_race.fc > div > table > thead > tr",horse_URL[0])
#Données de note autres que les éléments
rlt = get_scarping_data("horse_race_data", "#contents > div.db_main_race.fc > div > table > tbody > tr",*horse_URL)
#Enregistrer dans un fichier CSV
with open("scraping_of_race_and_past_horse_result.csv", 'w', newline='') as f:
wrt = csv.writer(f)
wrt.writerows(rlt) #Ecrire le résultat de l'extraction
・ J'ai obtenu l'URL où les informations sur le cheval sont publiées à partir du résultat de la course et j'ai pu obtenir les résultats précédents. ・ Bien que j'aie pu obtenir des résultats antérieurs, les dernières informations sont également publiées, il est donc nécessaire d'obtenir des résultats qui remontent à la date de la course. -Les informations acquises n'ont pas été entrées dans le réseau neuronal. ・ Acquérir automatiquement la date de la course. Ne vérifie pas à chaque fois → En tant que méthode, la valeur numérique des informations de course (12 chiffres à la fin de l'URL) est incrémentée en tenant compte de la régularité.
Pour gratter, il est nécessaire de maîtriser le code suivant (chaîne de caractères). (#contents > div.db_main_race.fc > div > table > tbody > tr') ↑ Récapitulez comment obtenir cette partie.
how_to_search_css_sector.py
for h in html.cssselect('#contents > div.db_main_race.fc > div > table > tbody > tr'):#Spécifiez l'emplacement de scraping avec le sélecteur CSS
Au début, je viens de copier ou d'écrire un code qui lui ressemblait et de l'essayer, mais cela n'a pas fonctionné. .. .. Quand j'ai recherché, CSS était impliqué. Pour savoir de quel sélecteur CSS l'élément que vous voulez est composé Utilisez l'outil Copy Css Selector de Chrome.
Une fois installé, cliquez avec le bouton droit pour créer un élément Copy Css Selector. Vous pouvez trouver le sélecteur CSS en exécutant Copy Css Selector sur l'élément de votre choix et en le collant dans le texte pour le vérifier.
En utilisant d'autres outils de développement, Vous pouvez copier le secteur CCS avec Copie → Sélecteur de copie dans la plage d'informations souhaitée. Parfois ça marche.
Si vous utilisez pleinement ces deux éléments, vous devriez pouvoir obtenir le sélecteur SCC.
Recommended Posts