Obtenez les performances passées des coureurs du site de courses de chevaux de grattage Python

Contexte

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.

Concept

ss図1.png

Exemple de code

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

Résultat d'exécution

sss.png

Réflexions

・ 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é.

Comment vérifier le sélecteur CSS

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. 無題4.png

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.

無題4.png

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. 無題5.png

Si vous utilisez pleinement ces deux éléments, vous devriez pouvoir obtenir le sélecteur SCC.

Recommended Posts

Obtenez les performances passées des coureurs du site de courses de chevaux de grattage Python
Python grattage Extraire l'environnement de course du site de courses de chevaux
Site de courses de chevaux Web scraping avec Python
Scraping depuis un site authentifié avec python
Récupérer le contenu de git diff depuis python
[Python] Récupérez le texte de la loi à partir de l'API e-GOV law
Principes de base du grattage Python
Récupérer le code retour d'un script Python depuis bat
L'édition définitive du grattage python! (Site cible: grande caméra)
Grattez automatiquement le site reCAPTCHA tous les jours (1/7: construction de l'environnement python)
J'ai essayé de ramper et de gratter le site de courses de chevaux Partie 2
Flux de raclage des données de courses de chevaux
Obtenez des commandes PowerShell à partir d'un site d'analyse dynamique de logiciels malveillants avec BeautifulSoup + Python
J'ai essayé d'obtenir une base de données sur les courses de chevaux en utilisant Pandas
[Python] Obtenir la date de mise à jour d'un article d'actualité à partir de HTML
Obtenir des données de Quandl en Python
Récupération des données sur les courses de chevaux au Colaboratory
Existence du point de vue de Python
Obtenez les tendances Qiita avec le scraping Python
python Obtenez la météo à venir de l'API météo
Obtenez des informations météorologiques avec Python et le grattage
[Python] Informations sur les lentilles de grattage sur price.com