D'une manière ou d'une autre, je me suis intéressé aux courses de chevaux et à l'apprentissage automatique du ki. Le site auquel je faisais référence ne contenait pas ce que je voulais être gratté. Les informations sur les chevaux et les cavaliers sont importantes pour les courses de chevaux, mais l'ordre peut changer en fonction de l'environnement de course (terre ou gazon, si le temps est ensoleillé ou pluvieux, etc.). J'ai essayé de travailler dessus cette fois, donc je vais le résumer sous forme de mémorandum. Je vais omettre l'explication générale de html, scc, Beautiful Soup, etc. Vérifiez simplement comment l'utiliser.
Le site de courses de chevaux (netkeiba.com) lien a été ciblé. De plus, le contenu à écrire est l'élément dans le cadre rouge.
Vérifiez à quel élément correspond le contenu inclus dans le carré ci-dessus. Si c'est du chrome Menu le plus à droite → Autres outils → Outils de développement Vous pouvez vérifier le concept de la page Web en sélectionnant.
La chaîne de caractères que vous souhaitez extraire est incluse dans l'élément span, alors accédez-y directement. Il existe plusieurs méthodes d'extraction et l'exemple de code ci-dessous peut être un détour.
race_condition_scraping.py
#Télécharger le HTML
import requests
#Obtenez des informations avec Beautiful Soup
from bs4 import BeautifulSoup
#Spécifiez l'URL
r = requests.get("https://nar.netkeiba.com/?pid=race&id=p201942100701")
#HTML et analyseur(Méthode de lecture)Spécifier
soup = BeautifulSoup(r.content, "html.parser")
#Extraire l'élément span du html
tags = soup.find_all('span')
print(tags)
"""Sauts de ligne pour une visualisation facile
[<span>Présentation de ma page</span>, <span>Cheval préféré</span>, \
<span>S'identifier/Inscription des membres</span>, <span>(s)S'identifier</span>, \
<span>(s)Rejoindre gratuitement</span>, <span>(s)Se déconnecter</span>, \
<span>À 1400m/Temps: nuageux/Baba: Shige/Début: 10:30</span>, \
<span>7</span>, <span>6</span>, <span>4</span>, <span>8</span>, \
<span>3</span>, <span>1</span>, <span>2</span>, <span>8</span>, \
<span>6</span>, <span>5</span>, <span>7</span>, <span>5</span>]
"""
#Notation d'inclusion lors de l'extraction"Météo"Est immuable, alors spécifiez la condition
names = [t.text for t in tags if "Météo" in t.text]
print(names)
"""
['À 1400m\xa0/\xa0 Météo: Nuageux\xa0/\xa0 Baba: Shige\xa0/\xa0 début: 10:30']
"""
#"\xa0/\xa0"OK si séparé par
weather_ = names[0].split('\xa0/\xa0')
print(weather_)
"""
['À 1400m', 'Temps: nuageux', 'Baba: Shige', 'Début: 10:30']
"""
J'ai appris le code de raclage de @ akihiro199630, donc J'ai étudié. J'ai essayé d'explorer et de gratter le site de courses de chevaux, partie 1 J'ai fait référence au code dans l'article.
race_data_scraping.py
import requests
import lxml.html
import csv
#Spécifiez l'URL
URL = "https://nar.netkeiba.com/?pid=race&id=p201942100701"
r = requests.get(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
rlt = [] #résultat
#Convertir de la chaîne HTML en type HtmlElement
# [(div id="race_main")→(div class)→(table width)→(tr)] →(td)Est rempli d'informations
for h in html.cssselect('#race_main > div > table > tr'):#Spécifiez l'emplacement de scraping avec le sélecteur CSS
#Obtenir le numéro d'élément
h_1 = h
#Obtenez le contenu textuel du numéro d'élément
h_2 = h_1.text_content()
#nouvelle ligne("\n")Diviser en fonction de
h_3 = h_2.split("\n")
#Notation d'inclusion Exclut les éléments vides
h_4 = [tag for tag in h_3 if tag != '']
#Aucun temps n'est enregistré à la 1ère place
if len(h_4) != 13:
#8e 0 qui doit être ajouté de force
h_4.insert(8,0)
#Données de ligne dans la liste(Ajouter la liste)
rlt.append(h_4)
#Résultat d'extraction
print("h_1",h_1)
"""
h_1 <Element tr at 0x1c35a3d53b8>
"""
print("h_2",h_2)
"""
12
5
5
Super croisière
Homme 3
56.0
Culture d'Akimoto
1:34.2
7
12
459
(Urawa)Toshio Tomita
469( +1 )
"""
print("h_3",h_3)
"""Sauts de ligne pour une visualisation facile
h_3 ['', '12', '5', '5', 'Super croisière', '', 'Homme 3', '56.0', 'Culture d'Akimoto', \
'1:34.2', '7', '12', '459', '(Urawa)Toshio Tomita', '469( +1 )', '']
"""
print("h_4", h_4)
"""
h_4 ['12', '5', '5', 'Super croisière', 'Homme 3', '56.0', 'Culture d'Akimoto', '1:34.2', '7', '12', '459', '(Urawa)Toshio Tomita', '469( +1 )']
"""
#Enregistrer dans un fichier CSV
with open("result.csv", 'w', newline='') as f:
wrt = csv.writer(f)
wrt.writerow(rlt.pop(0)) #Rédacteur d'élément de 1ère ligne
wrt.writerows(rlt) #Rédacteur des résultats d'extraction
Lorsque vous souhaitez refléter les performances passées du cheval de course dans le réseau neuronal Vous aurez besoin des dernières données de la veille de la course. Si ce point n'est pas pris en compte, les résultats après la date de la course seront reflétés.
J'ai donc écrit un code simple pour obtenir la date de course du site cible, je vais donc le résumer.
race_date.py
#Spécifiez l'URL
URL = "https://nar.netkeiba.com/?pid=race&id=p201942100701"
#La date est importante car il faut remonter dans le passé à partir de la date de la course
#Diviser toutes les URL=p migration 2019 42 100701 → 2019 42 1007 01
#2019 42 1007 01 → Année?(Numéro du site de la course de chevaux?)Date numéro de course
#12 chiffres de la date de l'URL(201942100701)Extrait
url_12_ymd = URL[-12:]
print(url_12_ymd)
# 201942100701
url_12_y = url_12_ymd[:4]
print(url_12_y)
# 2019
url_12_md = url_12_ymd[6:10]
print(url_12_md)
# 1007
url_12_race = url_12_ymd[10:]
print(url_12_race)
# 01
Maintenant que j'ai extrait les informations nécessaires, je me demande si je devrais quantifier la da (saleté), les nuages et le poids, et les mettre dans le réseau neuronal. Si je suis motivé, j'aimerais continuer. Étant donné que le site (*) auquel j'ai fait référence peut obtenir des informations importantes autres que l'environnement de la course, Cela fonctionnerait-il si j'intégrais la couche ci-dessus dans le code du site?
@ akihiro199630 Je suis une personne qui travaille beaucoup sur le grattage. Dieu. Résumé du chapitre 1 de l'exploration et du grattage de Python Résumé du chapitre 4 de l'exploration et du grattage de Python [Scrapy] Corriger / traiter l'URL extraite
Recommended Posts