- Internet Explorerを使ってウェブスクレイピング
- お題をどうするか
- お題はこのブログの記事タイトル一覧を取得する
- IEを操作するためには、「InternetExplorer」オブジェクトを使う
- ウェブページにアクセスする
- Microsoft HTML Object Library
- HTMLとはなんだ
- 次回は
Internet Explorerを使ってウェブスクレイピング
ウェブスクレイピングとは、ウェブサイトの情報を自動で抽出する技術のことです。
最近はRPAでウェブページの情報をげっとだぜ~という流れもあり、興味がある人もいるのでは?
このページを見られている皆さんは、何かしらのウェブページの情報を取得して、何かをしたいはずです。
皆さんはどんな目的でしょうか。例えば、ECサイトの検索結果を一覧でエクセルに書き込みたい!!とか、お気に入りサイトの画像を保存したい・・・とか。
本質的にはアプリケーション層のhttpプロトコルでターゲットのウェブサーバーと通信するだけなので、アプローチの仕方はいっぱいあります。
その中でもVBAを使ったウェブスクレイピングの手法のひとつに、WindowsのウェブブラウザであるInternet Exploreを操作する方法があります。
「httpとか細かいことはわからないけど、とにかくスクレイピングしたいんだ!!」
という人にはおすすめです。
今回は、このIEを使ったウェブスクレイピングについてハンズオン形式で、4回に渡って紹介したいと思います。
お題をどうするか
これから紹介するにあたり
「どんな例がいいだろう」
と考えたんですが、ウェブサイトの作りってどんどん変わっていってしまうんですよね。
「変わらないサイトはないだろうか」
って考えたら、
ないんですよ。
変わらないサイトって、
ちょっとやばいですよね。
それでも変わらないサイトってないか、やばいサイトはないかと考えたんですけど、
ありました。
このブログです。
お題はこのブログの記事タイトル一覧を取得する
なんとも 非実用的なお題に落ち着いてしまいました。
まぁ、スクレイピングの勉強だと思ってやってみましょう。
IEを操作するためには、「InternetExplorer」オブジェクトを使う
InternetExplorerオブイジェクトというもの通して、IEを操作することができます。
じゃあオブジェクト作るか・・・
Sub sample() Dim ie as End Sub
ってやってもインテリセンスの候補の中には「InternetExplorer」はありません。
あった方が絶対便利だよね!!ということで、参照設定してみます。
「Microsoft Internet Controls」というものを探し出してチェックしてください。
するとインテリセンスが働いて、ちゃんと出てきました。
Sub sample() Dim ie as InternetExplorer Set ie = New InternetExplorer End Sub
ついでにNewしてオブジェクトを生成します。
これでほぼ、IEを操作する準備が整いました。
次に、ieを見えるようにします。
Sub sample() Dim ie As InternetExplorer Set ie = New InternetExplorer ie.Visible = True Set ie = Nothing End Sub
これでieが見えるようになりました。
でも何のページも表示されません。
後は、このieというオブジェクトに対してあーだこーだ操作して、ページの情報をゲットしていく流れになります。
ウェブページにアクセスする
実際にアクセスするには、どうすればいいでしょうか。
こうします。
Sub sample() Dim ie As InternetExplorer Set ie = New InternetExplorer ie.Visible = True ie.Navigate "https://www.tekizai.net/" Set ie = Nothing End Sub
InternetExplorerオブジェクトのNavigateメソッドを呼び出します。引数はアクセスしたいウェブページURLです。
よし、これで大体できただろう。
Microsoft HTML Object Library
大切なことを忘れていました。
このままではただ、ウェブにアクセスするだけです。
まだまだ道のりは長いです。
今回の目的はウェブページの情報を取得することです。
そのために必要になるのが、「Microsoft HTML Object Library」なるものです。
まずは参照設定してください。
そして、コードを追加します。
Sub sample() Dim ie As InternetExplorer Set ie = New InternetExplorer ie.Visible = True ie.Navigate "https://www.tekizai.net/" Do While (ie.Busy Or ie.ReadyState <> READYSTATE_COMPLETE) DoEvents Loop Dim htmlDoc As HTMLDocument Set htmlDoc = ie.Document Set ie = Nothing End Sub
新たに ①
Do While (ie.Busy Or ie.ReadyState <> READYSTATE_COMPLETE) DoEvents Loop
と ②
Dim htmlDoc As HTMLDocument Set htmlDoc = ie.Document
が加わりました。
①は読み込み完了まで待つ命令です。
ieがBusyの間、もしくは、ieのReadyState というプロパティがREADYSTATE_COMPLETE(完了)になるまで、処理をOSに返します。
ie.BusyはBoolean型で、真か偽を返します。
READYSTATE_COMPLETEは、ReadyState の状態を表す定数です。
定数はこうなっています。
Enum READYSTATE READYSTATE_UNINITIALIZED = 0 READYSTATE_LOADING = 1 READYSTATE_LOADED = 2 READYSTATE_INTERACTIVE = 3 READYSTATE_COMPLETE = 4 End Enum
READYSTATE_UNINITIALIZEDDefault:デフォルトの初期化状態 READYSTATE_LOADING:ロード中 READYSTATE_LOADED:初期化終了 READYSTATE_INTERACTIVE:ブラウザは操作できるが、すべてのデータはロードしきっていない READYSTATE_COMPLETE:準備完了
そのため、ブラウザの状態がREADYSTATE_COMPLETEになるまで待ちます。
②は、「ウェブページのHtmlを表すオブジェクト」を取得しています。
出ましたね・・・HTML。これを語らずして、スクレイピングは語れません。
HTMLとはなんだ
HTMLとはHyperText Markup Languageの略です。
解説になってませんね。
簡単に説明します。
HTMLは、ウェブページの骨格みたいなものです。
ウェブページは、文、リンク、画像、デザイン、スクリプトなど・・・様々な要素から成り立っています。
HTMLはそのウェブページの設計図です。
ここはどんな文で、リンクを貼って、画像はこれを使って、デザインはこうして・・・
IEをはじめとするウェブブラウザは、ページを表示するために、まずこのHTMLを解読します。
そして、そこに書いてある情報を基に、様々なデータを集めて一つのページに仕上げて表示しています。
我々がすいすいネットサーフィンをしている影で、ウェブブラウザさんはせっせと涙ぐましい努力を重ねてくれております。
ありがとう、ウェブブラウザさん・・・
次回は
なんだか話がブラウザすげーになってきてしまいました。
今回は一旦ここまでにして、次回に続きたいと思います。
次回は、HTMLを操作してみたいと思います。
お読みいただき、ありがとうございました。