トップページ > windows > microsoft office > EXCEL > VBA > エクセルでWEBサイトのデータを扱う

「トップページ/windows/microsoft office/EXCEL/VBA/エクセルでWEBサイトのデータを扱う」の編集履歴(バックアップ)一覧に戻る

トップページ/windows/microsoft office/EXCEL/VBA/エクセルでWEBサイトのデータを扱う - (2011/03/10 (木) 12:47:07) の編集履歴(バックアップ)


最終更新日時2012-04-13ここを編集


「WEBサイトのデータを、そのまま、または必要な一部分を抜出(取得)してエクセルに貼り付けたい。」というとき用のメモ。
いわゆる、スクレイピング、スパイダリングをエクセル(VBA)でやってやろうという話。
なお、スクレイピング関連用語の詳細や、他のプログラミング言語でデータ取得する方法は、別ページ にまとめている。

■目次

■本文

■ページの概要

「WEBサイトのデータを、そのまま、または一部を抜き出してエクセルに貼り付けたい。」というとき用のメモ。

ここのページでは、エクセルの機能を利用する方法をまとめている。
関連ページ: VBA以外も利用してWEBから情報の抜き出し(スクレイピング、スパイダリング)

想定シーン

  • 株取引を初めとしたWEBを使ったEDI(Electronic Data Interchange )のフローの一部
  • 大量の情報収集


エクセルでやる方法を大きくわけると、

(a).VBAを利用しない。

データー-外部データの取り込み-新しいwebクエリ
コメント:VBAと組み合わせないと、手作業をやめるメリットがないのでは。

(b).エクセルVBAを利用する。

VBAを利用する方法は、さらにざっくり3つにわけて説明。

(b)-1.VBAでIE(Internet Explorer)を操作する。

通信コンポーネントを使う場合と比較すると、
良い点:扱えるサイトの範囲が広い。(IEで表示できるほぼ全てのページを扱える。)
悪い点:処理に時間がかかる。

(b)-2.VBAで通信コンポーネントを利用する。

 wininet,winhttp(Windows HTTP Services),XMLHttpなど。
Windows HTTP Servicesとは 【WinHTTP】 - 意味/解説/説明/定義 : IT用語辞典
API関数と表記してあるサイトもある。

良い点:一旦書き上げてしまえば、処理が早い。
悪い点:
  • プログラムが複雑になりやすい。(たぶん。)
  • 扱えないサイトがある。(cookieの処理など。)

(b)-3.WebBrowserコントロール

詳細不明。あまりメリット感じられないので、深堀しない。
メリットデメリットをまとめたページ:【Excel VBA備忘ログ】WebBrowserコントロールの使用: ★ ダメ株主 Z ★

(い) VBAで「HTMLで書かれたWEBページ」を扱う。

流れ
1-1.HTMLをダウンロード
1-2.ダウンロードしたファイルを処理

A-1.HTMLをダウンロード

ダウンロードするには、いくつか方法がある。
  • VBAでIEを操作する。
  • VBAで通信コンポーネントを利用する。(wininet,winhttp,XMLHttpなど。)
色々なコンポーネントがあるが、長所・短所は調査中。

IEにWEBページを表示させ、コピペする。


IEの構造(IE関係のメソッドとプロパティ)
勉強用メモ - トップページ/windows/microsoft office/IE(internet explorer)



IEを非表示にした方がマシンに負荷をかけずに動かせる。
ただし、IEを非表示で動かす際には、自動クラッシュ機能をオフにしておくべき。
自動クラッシュ回復機能をオフにするには次のようにします。
1.Internet Explorer の [ツール] ボタンをクリックし、[インターネット オプション] をクリックします。
2.[詳細] タブをクリックします。
3.[ブラウズ] セクションで、[自動クラッシュ回復機能を有効にする] をオフにします。
引用元:Internet Explorer 8: プライバシー
理由:IEを表示にしておけば、何かあった場合、目視でブラウザを閉じれる。
IEを非表示にしてしまうと、目視ではブラウザが閉じれない。
結果、CPUとメモリを使用し続けるため、パソコンが遅くなる。



winhttpライブラリを使ったHTMLダウンロード

WinHTTP は、古参の HTTP ライブラリ WinInet の後継ライブラリです。ただし、必ずしも下位互換ではないため、場合によっては WinInet との使い分けが必要になる場合もあるようです。引用元: WinHTTP ライブラリで Web スクレイピング(1)~ GET 編~ | YU-TANG's MS-Access Discovery



wininet

Webページのデータを取得し加工したい場合がありますが、IEを使ったり、ActiveX(WebBrouser)コントロールなどを使うと、簡単に受信できる反面、余計な画像も取得されて動作が非常に遅くなります。ここでは、WinInetのAPI関数で直接HTTPによりデータを受信します。
引用元:WinInetによるHTTPデータの受信

この本に色々載ってそう。
VBAによるTCP/IPプログラミング入門
第5章 WinInet APIを利用したTCP/IPプログラム



MSHTMLライブラリおよび、createDocumentFromUrlを使う方法。



XMLHTTP

サイト側がAPIを公開しており、その戻り値がXMLのときに使いやすい。
でも、2009年時点ではwinhttpのほうが主流みたいです。


XMLHttpRequest は、MSXML ライブラリが提供する、COM オブジェクト 引用元: XMLHttpRequest を作成する - Entering Passive Mode

XMLHTTPはリダイレクトをうまく扱えない
解説 : XMLHttpRequest
扱う対象がXMLという意味ではなく、戻り値がXML。らしい。


XMLHttpRequest

MSXML は XMLHttpRequest の実装を 2 種類用意している。それは、「XMLHTTP」「ServerXMLHTTP」だ。 引用元: XMLHttpRequest を作成する - Entering Passive Mode



ServerXMLHTTP

WinHTTP と呼ばれる API を基盤とする実装だ。
WinHTTP は、当初はサーバ間の HTTP 通信のために作成され、
WinInet よりもセキュリティ面で安全なように、
Cookie やキャッシュなどの情報は一切共有しない。
引用元: XMLHttpRequest を作成する - Entering Passive Mode



A-2.ダウンロードしたHTMLファイルを処理する。

HTMLファイルをXPATHで処理

勉強用メモ - トップページ/windows/microsoft office/EXCEL/VBA/XPATH
HTMLに関しては、XPATH式をVBAで適用するのは難易度が高く、手間がかかる。(javascriptの知識が必要)

HTMLファイルを正規表現で処理


HTMLファイルをCSSセレクタで処理



(ろ). VBAから「XML(XTHML,XBRL)」を扱う。




(は). VBAで扱うのが面倒なページ

A.FRAMEのあるWEBページ

Frame プロパティ
サイト名:MSDN
frames Collection
サイト名:MSDN



フレームの属性の見つけ方(英語)。機械翻訳の日本語もあるが、翻訳がお粗末すぎて余計にわからん。
How To Find the src Attribute of a Frame Element


B.クリック等でページ遷移など表示が変化するWEBページ

スクリプト言語javascript




ログイン等が必要なページ


(に).画像ファイルなどのファイルを扱う。



未整理



IE:その他


ページタイトル: IEオブジェクトを作る(IE7編)
サイト名: Happy!Happy!Island


■関連用語
#XMLSS:スプレッドシートスキーマ
「Excel本来のxls形式に準じるような多くの情報をXMLとして保存し、そしてまたxls形式と同様にアイコンをダブルクリックすればExcelが立ち上がるようなファイル形式」
http://park18.wakwak.com/~little-box/xml_basic/8-009.htm





ページフッタ

このページの1階層上のページ

このページの1階層下のページ

このページに含まれるタグ

このページへのアクセス数

今日: -
昨日: -
これまで合計: -