Je veux obtenir des informations sur le fonctionnement de Yahoo Route

Contexte

Un certain robot Twitter a été créé et des informations sur l'exploitation des trains étaient de toute façon nécessaires. À la suite de diverses réflexions, je me suis demandé si je pouvais extraire les informations de fonctionnement de ** uniquement des routes spécifiques ** gratuitement de quelque part. J'ai trouvé que le grattage de la route Yahoo était la meilleure solution.

API et autres sites qui fournissent l'état de fonctionnement

Après avoir recherché diverses choses, il fournit actuellement des informations sur le fonctionnement de l'itinéraire

  1. Json des informations sur les retards ferroviaires (Au format json, les itinéraires avec retards, etc. sont totalisés et retournés)
  2. Api après la station (Il semble excellent! Mais il y a des frais)
  3. État de fonctionnement de la route Yahoo (Le plus connu, mais pas d'API !!!)

Après tout, si vous voulez le faire gratuitement, json d'informations sur les retards ferroviaires ou [état de fonctionnement de l'itinéraire yahoo](https: // transit. yahoo.co.jp/traininfo/top). Dans le premier cas, les informations d'itinéraire différées à l'échelle nationale sont renvoyées. Après cela, les informations sont mises à jour toutes les 10 minutes ... Même 10 minutes sont fatales dans la course du matin.

La dernière ligne yahoo, ** En fait, le contenu est après la station ** .... lol (inconnu de manière inattendue) Il y a aussi des informations de fonctionnement pour chaque itinéraire, et elles sont précises et rapides en temps réel! Puis *** Si vous n'avez pas d'API, grattez-la! *** ***

Informations sur l'opération de grattage de la route Yahoo

L'auteur, qui n'a jamais fait de grattage "su", essaie de gratter. Apparemment, ** "Beautiful Soup" ** est utilisé ... Voyons la merveilleuse soupe!

Qu'est-ce que la belle soupe? ??

BeautifulSoup est une bibliothèque Python qui récupère des données à partir de fichiers HTML et XML. Apparemment, vous pouvez ** rechercher des éléments HTML à partir du HTML récupéré à l'aide d'un analyseur syntaxique. Je ne connais pas les détails, alors essayons-le tout de suite!

allons! Grattage!

Cliquez ici pour le site que vous voulez gratter cette fois! État de fonctionnement de la ligne Tokaido de la ligne yahoo Tout d'abord, jetons un œil au html de la page スクリーンショット 2019-12-14 11.46.02.png En regardant le HTML au moment du retard, il y a une classe de problème de la balise dd

<div id="mdServiceStatus">
  <dl>
  <dt>
  <span class="icnAlertLarge">[!]</span>Retard de train</dt>
  <dd class="trouble">
   <p>En raison de l'influence de l'inspection à l'intérieur de la ligne Utsunomiya, la ligne descendante(À Atami)Certains trains sont retardés.<span>(Posté à 09:25 le 14 décembre)</span></p>
 </dd>
 </dl>
</div><!--/#mdServiceStatus-->

D'un autre côté, si vous regardez dans le HTML normal, il existe une classe normale pour la balise dd.

<div class="elmServiceStatus">
    <dl>
    <dt><span class="icnNormalLarge">[○]</span>Fonctionnement normal</dt>
    <dd class="normal">
        <p>Actuellement, il n'y a aucune information concernant les accidents / retards.</p>
    </dd>
    </dl>
</div>

En d'autres termes Sur délai: ** balise dd de classe de problème ** Heure normale: ** balise dd de classe normale **

** Sur la base de cette balise dd, il semble possible de déterminer s'il s'agit d'un fonctionnement retardé ou normal! ** Faisons-le tout de suite!

Installation

Tout d'abord, mettez Beautiful Soup avec pip

$ pip install beautifulsoup4 

code

import requests
from bs4 import BeautifulSoup

#URL de l'état de fonctionnement de la ligne Tokaido
ToukaidouLine_URL = 'https://transit.yahoo.co.jp/traininfo/detail/27/0/'

#Obtenir des pages Web à l'aide de requêtes
ToukaidouLine_Requests = requests.get(ToukaidouLine_URL)

#Analysez les pages Web avec BeautifulSoup
ToukaidouLine_Soup = BeautifulSoup(ToukaidouLine_Requests.text, 'html.parser')

#.Trouvez la balise dd de classe de problème avec find
if ToukaidouLine_Soup.find('dd',class_='trouble'):
    message = 'La ligne Tokaido est retardée'
else:
    message = 'La ligne Tokaido est en fonctionnement normal'

print(message)

Résultat d'exécution

La ligne Tokaido est retardée

Impressions

N'est-ce pas vraiment facile? ?? Apporter des informations à partir de la page Web est un rêve devenu réalité! Histoire ultérieure: quand je l'ai montré à Yahoo, c'était un secret qu'on m'a dit "C'est une zone grise"

Recommended Posts

Je veux obtenir des informations sur le fonctionnement de Yahoo Route
J'ai essayé d'obtenir les informations de localisation du bus Odakyu
Keras Je veux obtenir la sortie de n'importe quelle couche !!
Je veux obtenir le nom de la fonction / méthode en cours d'exécution
Je veux obtenir les données de League of Legends ③
Je veux obtenir les données de League of Legends ②
Je souhaite personnaliser l'apparence de zabbix
Je veux obtenir les données de League of Legends ①
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
Je veux grep le résultat de l'exécution de strace
Je veux bien comprendre les bases de Bokeh
J'ai essayé de visualiser les informations spacha de VTuber
Je souhaite augmenter la sécurité de la connexion SSH
Je veux obtenir le chemin du répertoire où le fichier en cours d'exécution est stocké.
Je veux tracer les informations de localisation de GTFS Realtime sur Jupyter! (Avec ballon)
Je souhaite utiliser uniquement le traitement de normalisation SudachiPy
Je veux déterminer l'authenticité d'un élément du tableau numpy
Je veux connaître la nature de Python et pip
Je veux connaître la légende du monde des technologies informatiques
J'ai essayé d'obtenir diverses informations de l'API codeforces
[Pytorch] Je souhaite attribuer manuellement les paramètres d'entraînement du modèle
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
Je veux lire la version html de la version "OpenCV-Python Tutorials" OpenCV 3.1
Développement LINEbot, je souhaite vérifier le fonctionnement dans l'environnement local
Je veux vérifier la position de mon visage avec OpenCV!
Je veux connaître la population de chaque pays du monde.
PhytoMine-I a essayé d'obtenir les informations génétiques de la plante avec Python
Je veux épingler Spyder à la barre des tâches
Je veux sortir froidement sur la console
Je veux gérer la rime part1
Je veux gérer la rime part3
Je veux afficher la barre de progression
Je veux gérer la rime part2
Je veux gérer la rime part5
Je veux gérer la rime part4
Je veux obtenir des informations de fstab à la destination de la connexion ssh et exécuter la commande
Je souhaite extraire les informations d'étiquette (titre et artiste) d'un fichier de musique (flac, wav).
J'ai essayé d'obtenir les résultats de Hachinai en utilisant le traitement d'image
Je ne veux pas l'admettre ... Représentation dynamique du système de Neural Network
J'ai mesuré 6 méthodes pour obtenir l'indice de la valeur maximale (valeur minimale) de la liste
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Je veux expliquer en détail la classe abstraite (ABCmeta) de Python
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
Je souhaite trier une liste dans l'ordre des autres listes
Je veux exprimer mes sentiments avec les paroles de Mr. Children
Je veux analyser les sentiments des gens qui veulent se rencontrer et trembler
Je veux prédire le succès des joueurs NBA utilisant le SDK Qore
Je souhaite laisser une commande arbitraire dans l'historique des commandes de Shell
J'ai essayé d'obtenir automatiquement le RSS de la chanson la plus populaire de l'iTunes Store
Je souhaite arrêter la suppression automatique de la zone tmp dans RHEL7
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
[Pour les débutants] Je veux obtenir l'index d'un élément qui satisfait une certaine expression conditionnelle
[Python] Obtenez les principaux sujets de Yahoo News
Obtenons les informations Wiki en utilisant l'API MediaWiki
Je veux gérer la rime part7 (BOW)
Je souhaite stocker les informations de la base de données dans la liste
J'ai essayé de corriger la forme trapézoïdale de l'image