適材適所

パソコン作業の自動化・効率化のための情報を発信するブログ(VBA,PowerShellなど)

VBAによるスクレイピングの手法-WinHTTPとIEの違いについて

この記事では

  • VBAによるスクレイピングの中でも、IE(Internet Explorere)とWinHTTPを使ったスクレイピングの違いについて述べています。
  • IEを使ったスクレイピングについては知っているけど、WinHTTPを使ったスクレイピングはわからないという人に向けて書いています。

WinHTTPでスクレイピング

VBAでスクレイピングをするシリーズ第二弾です。

第一弾

www.tekizai.net

今回はWinHTTPを使ったスクレイピングを紹介したいと思います。 WinHTTPを使ったスクレイピングは、IEを使ったスクレイピングとは違ったものになります。

今回はIEによるスクレイピングとWinHTTPによるスクレイピングの違いについて簡単に触れたいと思います。 そんなの知っているよ!!という人は、今回は読み飛ばしてください。

WinHTTPとは

Windowsの標準機能として備わっている、HTTP通信用のライブラリです。 VBAから呼び出すことで、簡単にHTTP通信を実現できます。

Internet Explorereによるスクレイピングとの違いは?

その違いを説明する前に、Internet Explorere(IE)や、Google Chromeといったブラウザが内部で何をしているかを少し理解する必要があります。

ブラウザが内部的に行っていること

ブラウザとは、ウェブページを閲覧するためのアプリケーションです。 まず、一番の基本としてウェブページの情報はHTMLという構造化されたテキストデータが基本になっています。 このようなものです。

<html>
 <head>
   ・・・
 </head>
 <body>
   ・・・
 </body>
</html>

こんな感じのものが、例えば「○○.html」という名前で誰かのコンピュータのどこかのフォルダの中に配置してあります。

ブラウザは、URLを使って、このHTMLにアクセスしに行きます。

ウェブサーバと呼ばれるコンピュータが、要求されたURLの情報に基づいて、HTMLなどを返却します。

ブラウザは、もらってきたHTMLに基づいてウェブページを組み立てます。

自分のパソコンでブラウザを通して、ウェブページにアクセスすると、自分のパソコンから世界のどこかにあるコンピュータに対して通信ができるのです。

その通信の決まり事が「HTTP」と呼ばれています。

ここで大事な点は、ブラウザは、どこかにあるHTMLにアクセスしに行っており、アクセスする際の決まり事が、HTTPと呼ばれていることです。

IEとWinHTTPの違い

手法 通信 速度 自由度 難易度 安定性
IE IEが行う ウェブページのレンダリングがあるため遅い
WinHTTP 作成者が行う ウェブサーバーとのファイルのやりとりだけなので速い 中~高

IEによるスクレイピング

IEによるスクレイピングは、通信関係はすべてIEがやってくれるので、作り手はHTMLの解析などに集中できます。

そのため難易度は比較的低めです。

その代わり、レンダリング処理があるため処理速度がどうしても遅くなります。

また、IEによるスクレイピングは動作が不安定になりがちです。画像のレンダリング速度などが通信環境やPCのスペックによって異なるため、個々の事情に合わせてスリープ処理などでチューニングする必要があります。

チューニングがうまくできていないと、IEとプログラムの同期がうまくとれずに異常終了が頻発することになります。

WinHTTPによるスクレイピング

それに対してWinHTTPの場合、HTTPの通信を自分で行う必要があり、難易度はやや高めです。

ある程度HTTPというプロトコルの仕組みについて理解しておく必要があります。

その代わりIEのケースと異なり、レンダリング処理がなく、必要なファイルだけをやりとりできるなど自由度は高くなります。
また、スリープ処理などの「ブラウザの処理を待つ」ようなことは不要です。

URLにアクセスしたら、通信が終了するまで、WinHTTPが面倒を見てくれます。そのため安定性が飛躍的に上がります。

最後に

ここまでIEとWinHTTPによるスクレイピングについて書いてきました。

どちらを使うかは、ケースバイケースです。

私は、単純なことであればIEによるスクレイピング、複雑だったり、安定性や速度が必要であればWinHTTPという風に使い分けています。

次回からWinHTTPを使ったスクレイピングを実践していきます。

ここまでお読みいただき、ありがとうございました。

www.tekizai.net