【Python】スクレイピングで電車の運行情報を取得してみた
はじめに
最近、Slackというチャットサービスを個人的に利用していて
Slack APIを使って電車の運行情報をチャットで流せないかなーて考え中
電車の運行情報のAPIを公開されているけどお金がかかる・・・
プライベートで公開されている方もいるけど、こだわり始めるとその方のサーバに負荷かけそう
大手サイトのWEBページから取得できたらいいなーと思っていたら、
Qiitaに情報が載っていた
このサイトを見るまで「スクレイピング」という単語を知らなかった・・・
情報元
電車の運行情報で、時々利用するのが以下のサイト。
Pythonを動かしているときにちょうど遅延情報が出ていた。
江ノ島電鉄線は利用したこと無いけど
見た目はこんな感じ
htmlの構造はこんな感じ
このサイトから、Python3.5とライブラリ「Beautiful Soup4」を利用して運行情報を取得する
環境構築の準備
私はAnacondaをWindowsにインストールしているため、以下のコマンドで今回用の環境を構築
conda create -n py35 python=3.5 anaconda activate py35 pip install beautifulsoup4
実装
あまり深く考えず、参考にしたサイトを見よう見真似でコード作成
# -*- coding: utf-8 -*- import urllib.request import bs4 url = 'http://transit.yahoo.co.jp/traininfo/detail/148/0/' html = urllib.request.urlopen(url).read() soup = bs4.BeautifulSoup(html, 'lxml') informationElement = soup.find('div', {'id': 'mdServiceStatus'}) information = informationElement.find('p').find(text=True, recursive=False) postingDateElement = informationElement.find('p').find('span') postingDate = '' if postingDateElement is not None: postingDate = postingDateElement.find(text=True, recursive=False) print(information + postingDate)
実行結果
とりあえず運行情報が取得できるようになったので、DBも利用してSlackを通して運行情報を知らせるサーバを構築しよう