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

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

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

最終更新日時&date() &link_edit(text=ここを編集)

#html2(){{{{{{
<TABLE align="right">
<TR>
<TD>
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tomokazu0525-22&o=9&p=8&l=as1&m=amazon&f=ifr&md=1X69VDGQCMF7Z30FM082&asins=4789818772" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
</TD>
<TD>
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tomokazu0525-22&o=9&p=8&l=as1&m=amazon&f=ifr&md=1X69VDGQCMF7Z30FM082&asins=4883376435" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
</TD>
</TR>
</TABLE>
}}}}}}

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

■目次
#contents_line()

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

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

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


エクセルで処理する方法を大きくわけると、
**(a).VBA他のプログラム言語を利用しない。
[[データー-外部データの取り込み-新しいwebクエリ >http://www.1147mono.com/Excel/katsuyou_07.htm]]
コメント:VBAと組み合わせないと、手作業をやめるメリットがないのでは。

**(b).エクセルVBAを利用する。
VBAを利用する方法は、さらにざっくり3つにわけて説明。
***(b)-イ.VBAでIE(Internet Explorer)を操作する。
通信コンポーネントを使う場合と比較すると、
良い点:扱えるサイトの範囲が広い。(IEで表示できるほぼ全てのページを扱える。)
悪い点:処理に時間がかかる。

***(b)-ロ.VBAで通信コンポーネントを利用する。
 wininet,winhttp(Windows HTTP Services),XMLHttpなど。
[[Windows HTTP Servicesとは 【WinHTTP】 - 意味/解説/説明/定義 : IT用語辞典 >http://e-words.jp/w/Windows20HTTP20Services.html]]
API関数と表記してあるサイトもある。

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

***(b)-ハ.VBAでWebBrowserコントロールを扱う。

詳細不明。あまりメリット感じられないので、深堀しない。
メリットデメリットをまとめたページ:[[ 【Excel VBA備忘ログ】WebBrowserコントロールの使用: ★ ダメ株主 Z ★ >http://app.f.m-cocolog.jp/t/typecast/37471/36872/41516185]]




*(い) VBAで「HTMLで書かれたWEBページ」を扱う。
流れ
1.HTMLをダウンロード
2.ダウンロードしたファイルを処理

**STEP1.HTMLファイルをダウンロードする、WEBページのデータをエクセルファイルに取り込む
ダウンロードするには、いくつか方法がある。
方法イ.VBAでIEを操作する。
方法ロ.VBAで通信コンポーネントを利用する。(wininet,winhttp,XMLHttpなど。)


***方法イ.VBAでIE(Internet Explorer)を操作し、WEBページのデータをエクセルファイルに取り込む(IEにWEBページを表示させ、コピペする。)

ステップ1.URLを与えて表示させる
[[IEを起動してWebページを表示 サイト名:ExcelVBA便利帳 >http://www2s.biglobe.ne.jp/~iryo/vba/IE/window1.html#no01]]

ステップ2.コピペする
[[Office TANAKA - Excel VBA Tips[クリップボードを操作する(2)] >http://officetanaka.net/excel/vba/tips/tips81.htm]]
または
[[HTML情報を取得する サイト名:ExcelVBA便利帳 >http://www2s.biglobe.ne.jp/~iryo/vba/IE/hdata1.html#no01]]


関連情報ページ:[[勉強用メモ - VBA/IE(internet explorer) >http://www42.atwiki.jp/tomokazu0525/pages/322.html]]


***方法ロ.VBAで通信コンポーネントを利用する。(wininet,winhttp,XMLHttpなど。)
色々なコンポーネントがあるため、別ページに記載。
[[勉強用メモ - トップページ/windows/microsoft office/EXCEL/VBA/通信コンポーネントを利用(wininet,winhttp,XMLHttp等 >http://www42.atwiki.jp/tomokazu0525/pages/324.html]]



**STEP2.ダウンロードしたデータを処理する。
***データ処理(解析)方法1. ダウンロードデータをXPATHで処理
[[勉強用メモ - トップページ/windows/microsoft office/EXCEL/VBA/XPATH >http://www42.atwiki.jp/tomokazu0525/pages/94.html]]
HTMLに関しては、XPATH式をVBAで適用するのは難易度が高く、手間がかかる。(javascriptの知識が必要)

***データ処理(解析)方法2. ダウンロードデータを正規表現で処理
[[勉強用メモ - トップページ/windows/microsoft office/EXCEL/VBA/正規表現 >http://www42.atwiki.jp/tomokazu0525/pages/103.html]]

***データ処理(解析)方法3. ダウンロードデータをCSSセレクタで処理
[[勉強用メモ - EXCEL/VBA/CSSセレクタ >http://www42.atwiki.jp/tomokazu0525/pages/98.html]]


*(ろ). VBAから「XML(XTHML,XBRL)」を扱う。
[[勉強用メモ - トップページ/windows/microsoft office/EXCEL/VBA/XML >http://www42.atwiki.jp/tomokazu0525/pages/323.html]]
[[勉強用メモ - トップページ/windows/プログラミング/XBRL >http://www42.atwiki.jp/tomokazu0525/pages/167.html]]



*(は). VBAで扱うのが面倒なページ
**面倒パターンA.FRAMEのあるWEBページ
[[Frame プロパティ>http://msdn.microsoft.com/ja-jp/library/system.windows.controls.frame_properties.aspx]]
サイト名:MSDN
[[frames Collection>http://msdn.microsoft.com/en-us/library/ms537459(VS.85).aspx]]
サイト名:MSDN


[[三流君VBAでIE操作 フレーム操作 Document.Frames>http://www.ken3.org/cgi-bin/group/vba_ie_frame.asp]]
サイト名:
[[InternetExplorer操作 Frameと遊ぶ Objectを探る方法>http://www.ken3.org/vba/backno/vba116.html]]
[[IE.Document.frames>http://invest-prg.rich-prj.com/p_progtip/ie_ctrl.html#frames]]
サイト名:[[投資プログラマー’S WEB InternetExplorer操作によるコントロールへのアクセス >http://invest-prg.rich-prj.com/p_progtip/ie_ctrl.html]]

フレームの属性の見つけ方(英語)。機械翻訳の日本語もあるが、翻訳がお粗末すぎて余計にわからん。
[[How To  Find the src Attribute of a Frame Element >http://support.microsoft.com/?scid=kb%3Ben-us%3B297950&x=9&y=18]]


**面倒パターンB.URLは同一なのに表示が変化するWEBページ (クリックでページ遷移など)
***スクリプト言語javascript
[[Excel→Javascriptポップアップウィンドウへの入力について>http://www.moug.net/faq/viewtopic.php?t=37039]]

[[win32 ウィンドウ>http://msdn.microsoft.com/ja-jp/library/cc410656.aspx]]

[[IE SELECT後 .fireEventでJavaScriptのイベントを起動>http://www.ken3.org/vba/backno/vba155.html]]

***ログイン等が必要なページ
[[ 三流君VBA:InternetExplorer.application操作 .Clickでクリック >http://www.ken3.org/vba/backno/vba097.html]]

*(に).画像ファイルなどのファイルを扱う。
HTMLの文字列だけではなく、ファイルを扱う方法。
[[三流君VBA:URLDownloadToFile APIを使用してWebからファイルをダウンロードしてみた >http://www.ken3.org/vba/backno/vba120.html]]
[[VBAでスクレイピングして画像をダウンロードしてシートに貼り付ける >http://www.simple-sys.com/blog/2008/04/26/338/]]
サイト名:[[simple blog いろいろ勉強中   >http://www.simple-sys.com/blog/]]


*未整理

[[三流君VBAでIE操作 メルマガ バックナンバー 全て>http://www.ken3.org/cgi-bin/group/vba_ie_backno.asp]]

**IE:その他
[[Excel VBAのマクロで,IEを自動操作しよう (DOMセレクタ関数をVBAで自作>http://d.hatena.ne.jp/language_and_engineering/20090710/p1]]
コメント:ページ中段の「IE自動操作用の関数ライブラリを作ろう」のコーナーが役立つ。
[[複数起動させたIEのイベントを拾うには>http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200511/05110061.txt]]
[[VBAでIEのページを印刷可能?>http://www.moug.net/faq/viewtopic.php?t=38664]]

ページタイトル:[[IEオブジェクトを作る(IE7編)>http://www.happy2-island.com/vbs/cafe02/capter00711.shtml]]
サイト名:[[Happy!Happy!Island>http://www.happy2-island.com/]]


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

■関連ツール
[[URLエンコード・デコードフォーム>http://www.tagindex.com/tool/url.html]]




&link_edit(text=ここを編集) 
*ページフッタ
**このページの1階層上のページ
&link_parent() 
**このページの1階層下のページ
#lsd()
**このページに含まれるタグ
&tags()
**このページへのアクセス数
今日:&counter(today)
昨日:&counter(yesterday)
これまで合計:&counter(total)