m-eye blog

ノンプログラマによるVBAとPythonの学習記録

Excel VBAでIEを操作して電車の運行情報をしゃべらせるマクロその1

f:id:m-eye:20181006130806p:plain

 

はじめに

ExcelでIEを自動的に操作して、Webサイトから電車の運行情報(平常通り運行しているか、事故・遅延情報はないかということ)を取得して、その内容をExcelに一定の時間間隔でしゃべらせてみたいと思います。

 

スクレイピングの大前提

プログラミング言語を用いて、Webサイトから情報を取得することをスクレイピング(Scraping)といいます。

当然のことながら、情報を取得したいWebサイトの内容が変更されれば、つくったマクロは無価値になり、あらたに作り直さなければならなくなります。

スクレイピングでは、Webサイトの内容が変更されていないことが前提となります。

サイトの内容の変更に追随するマクロもつくれないわけではないですが、最初はまず基本的なものから考えていきましょう。

 

電車の運行情報をしゃべらせる流れ

ざっと思い浮かぶだけでも、次のような処理が必要ですね。

  • 取得するべきサイトを確認する
  • ExcelでIEを操作する
  • IEでHTML文書を取得する
  • HTML文書を分析する
  • 必要な要素を取得する
  • ワークシートに情報を落とし込む
  • シートの内容をしゃべらせる

これらを順番にみていきましょう。

 

取得するべきサイトを確認する

まずはカンタンなサイトを2つ選んでみました。

 

山手線の運行情報 - Yahoo!路線情報

欲しい電車の運行情報のサイトの構造が複雑な場合、Yahoo!路線情報を利用するのがいいでしょうね。

f:id:m-eye:20181029192854p:plain

transit.yahoo.co.jp

ほしい情報は現在、事故・遅延に関する情報はありません。という文字列です。

この文字列を取得できるかどうかを確認していきます。

 

東急線運行情報

数ある電車の運行情報のサイトのなかでも、きわめてシンプルな構造のサイトです。

f:id:m-eye:20181029185943p:plain

http://www.tokyu.co.jp/i/unten_i.cgiwww.tokyu.co.jp

ほしい情報は東急各線は、平常通り運転しています。という文字列です。

この文字列を取得できるかどうかを確認していきます。

 

プログラミングの大きな流れをかんがえる

流れでいうと、3段階にわかれます。

頭のなかでやってもいいし、紙にかいてもいいし、VBEにコメントをかいてもいいと思います。

でも、なにも考えずにいきなり1行目からコードを書きはじめても、とっちらかってしまって、作業効率はおちるだけだと思います。

専門家は「上流工程」ということばをつかうようですが、ノンプログラマだからといって、上流工程を軽視して、いきなりコーディングをはじめていいわけではありません。

 

HTML文書を取得する

Excelで直接HTML文書を取得できるわけではないので、ExcelでIEを操作して、間接的にHTML文書を取得します。

 

ExcelでIEを操作する

ExcelでIEをうごかして、Webサイトを表示したり、IEの裏側でおこなっている操作を自動でおこなったりすることです。

やったことのないひとにとっては、まずここが「壁」になります。

しかし、なれてくれば単なる作業になります。

 

IEでHTML文書を取得する

ExcelでIEをうごかして、Webサイトを表示した時点で、HTML文書を取得したも同然ですから、そんなにむずかしい話ではありません。

もちろん、JavaScriptで動的に構成され、つぎからつぎへと変化するようなWebサイトのなかには取得がむずかしいサイトもあります。

さいしょは取得するのがカンタンそうなWebサイトのにおいをかぎわける必要がありそうです。

 

Webサイトをスクレイピングする

ここからがWebサイトごとにちがう実際のスクレイピング作業です。

 

HTML文書を分析する

ここはHTMLを実際に分析する作業と、それをVBAのコードにおとしこむ作業にわかれます。

 

必要な要素を取得する

HTML文書の分析結果をVBAのコードにおとしこんだものが実行されれば、自動的に「返り値」として要素を取得することができます。

 

ワークシートに情報を落とし込む

ここはExcelをつかっている強みで、取得した要素はシート上のセルに情報をカンタンに格納することができます。

特別になにか用意しなくても、セルに情報を展開すればいいので、こんなラクなことはありません。

 

シートの内容をしゃべらせる

Excelには、シート上のデータをしゃべらせる機能がありますので、カンタンにしゃべらせることができます。

 

おわりに

きょうはここまで。次回からはソースコードをみていきたいと思います。

 

Copyright 2018 m-eye blog All Rights Reserved.