「トップページ/windows/microsoft office/EXCEL/VBA/エクセルでWEBサイトのデータを扱う」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
■最終更新日時 2011年のいつか &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=as4&m=amazon&f=ifr&ref=ss_til&asins=4844333844" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></TD></TR>
<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=4883376435" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
</TD>
</TR>
<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>
</TR>
</TABLE>
}}}}}}
「WEBサイトのデータを、そのまま、または必要な一部分を抜出(取得)してエクセルに貼り付けたい。」というとき用のメモ。
いわゆる、スクレイピング、スパイダリングをエクセル(VBA)でやってやろうという話。
なお、スクレイピング関連用語の詳細や、他のプログラミング言語でデータ取得する方法は、[[ 別ページ >http://www42.atwiki.jp/tomokazu0525/pages/57.html]]にまとめている。
&mobile(){&amazon(4844333844,text,image,width=56,height=80)}
■目次
#contents_line()
■本文
*■ページの概要
「WEBサイトのデータを、そのまま、または一部を抜き出してエクセルに貼り付けたい。」というとき用のメモ。
ここのページでは、エクセルの機能を利用する方法をまとめている。
関連ページ:[[VBA以外も利用してWEBから情報の抜き出し(スクレイピング、スパイダリング) >http://www42.atwiki.jp/tomokazu0525/pages/57.html]]
**想定シーン
・株取引を初めとしたWEBを使ったEDI(Electronic Data Interchange )のフローの一部
・大量の情報収集
***VBAでスクレイピングしている具体例
知識の無い状態で見ても理解不能かと思いますが。
[[App StoreからiPhoneアプリ情報を取得するExcel VBAサンプル - iPhone.goodegg.jp 2009-09-21 >http://iphone.goodegg.jp/archives/5027]]
**エクセルでの処理方法
エクセルで処理する方法を大きくわけると、
***処理方法(a).VBA他のプログラム言語を利用しない。
[[データー-外部データの取り込み-新しいwebクエリ >http://www.1147mono.com/Excel/katsuyou_07.htm]]
コメント:VBAと組み合わせないと、手作業をやめるメリットがないのでは。
***処理方法(b).エクセルVBAを利用する。
本ページではVBAでの利用を対象にする。
***処理方法(C).エクセルVBA以外の言語も利用する。
本ページでは、これも対象。後述する通信コンポーネント等は、こちら(だと思う)。
**対象のWEBページ(サイト)のデータ形式(ファイル形式)ごとにやり方が異なる
***(い)HTMLファイル
***(ろ)XML
***(は)画像ファイル
***(に)その他もろもろのページ(HTMLだが処理が面倒なページ、javascriptなどで動的なページ)
*(い) VBAで「HTMLで書かれたWEBページ」を扱う。
流れ
1.HTMLをダウンロード
2.ダウンロードしたファイルを処理
**STEP1.HTMLファイルをダウンロードする、WEBページのデータをエクセルファイルに取り込む
ダウンロードするには、いくつか方法がある。
方法イ.VBAでIEを操作する。
方法ロ.VBAで通信コンポーネントを利用する。(wininet,winhttp,XMLHttpなど。)
***方法イ.VBAでIE(Internet Explorer)を操作し、WEBページのデータをエクセルファイルに取り込む(IEにWEBページを表示させ、コピペする。)
■IEを操作する方法は、後述する通信コンポーネントを使う方法と比較した場合の良い点悪い点。
良い点:
・扱えるサイトの範囲が広い。(IEで表示できるほぼ全てのページを扱える。)
・直感的にわかりやすい
悪い点:処理に時間がかかる。
ステップ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など。)
wininet,winhttp(Windows HTTP Services),XMLHttpなど。
[[Windows HTTP Servicesとは 【WinHTTP】 - 意味/解説/説明/定義 : IT用語辞典 >http://e-words.jp/w/Windows20HTTP20Services.html]]
API関数と表記してあるサイトもある。
良い点:一旦書き上げてしまえば、VBAよりは処理が早い。
悪い点:
・プログラムが複雑になりやすい。(たぶん。)
・扱えないサイトがある。(cookieの処理など。)
色々なコンポーネントがあるため、別ページに記載。
[[勉強用メモ - トップページ/windows/microsoft office/EXCEL/VBA/通信コンポーネントを利用(wininet,winhttp,XMLHttp等 >http://www42.atwiki.jp/tomokazu0525/pages/324.html]]
***方法ハ.VBAでWebBrowserコントロールを扱う。
詳細不明。あまりメリット感じられないので、深堀しない。
メリットデメリットをまとめたページ:[[ 【Excel VBA備忘ログ】WebBrowserコントロールの使用: ★ ダメ株主 Z ★ >http://app.f.m-cocolog.jp/t/typecast/37471/36872/41516185]]
**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]]
*(は).画像ファイルなどのファイルを扱う。
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で扱うのが面倒なページ
**面倒パターン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]]
&mobile(){&amazon(4844333844,text,image,width=56,height=80)}
#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=as4&m=amazon&f=ifr&ref=ss_til&asins=4844333844" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></TD></TR></TABLE>}}}}}}
&link_edit(text=ここを編集)
*ページフッタ
**このページの1階層上のページ
&link_parent()
**このページの1階層下のページ
#lsd()
**このページに含まれるタグ
&tags()
**このページへのアクセス数
今日:&counter(today)
昨日:&counter(yesterday)
これまで合計:&counter(total)
■最終更新日時 2011年のいつか &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=as4&m=amazon&f=ifr&ref=ss_til&asins=4844333844" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></TD></TR>
<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=4883376435" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
</TD>
</TR>
<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>
</TR>
</TABLE>
}}}}}}
「WEBサイトのデータを、そのまま、または必要な一部分を抜出(取得)してエクセルに貼り付けたい。」というとき用のメモ。
いわゆる、スクレイピング、スパイダリングをエクセル(VBA)でやってやろうという話。
なお、スクレイピング関連用語の詳細や、他のプログラミング言語でデータ取得する方法は、[[ 別ページ >http://www42.atwiki.jp/tomokazu0525/pages/57.html]]にまとめている。
&mobile(){&amazon(4844333844,text,image,width=56,height=80)}
■目次
#contents_line()
■本文
*■ページの概要
「WEBサイトのデータを、そのまま、または一部を抜き出してエクセルに貼り付けたい。」というとき用のメモ。
ここのページでは、エクセルの機能を利用する方法をまとめている。
関連ページ:[[VBA以外も利用してWEBから情報の抜き出し(スクレイピング、スパイダリング) >http://www42.atwiki.jp/tomokazu0525/pages/57.html]]
**想定シーン
・株取引を初めとしたWEBを使ったEDI(Electronic Data Interchange )のフローの一部
・大量の情報収集
***VBAでスクレイピングしている具体例
知識の無い状態で見ても理解不能かと思いますが。
[[App StoreからiPhoneアプリ情報を取得するExcel VBAサンプル - iPhone.goodegg.jp 2009-09-21 >http://iphone.goodegg.jp/archives/5027]]
**エクセルでの処理方法
エクセルで処理する方法を大きくわけると、
***処理方法(a).VBA他のプログラム言語を利用しない。
[[データー-外部データの取り込み-新しいwebクエリ >http://www.1147mono.com/Excel/katsuyou_07.htm]]
コメント:VBAと組み合わせないと、手作業をやめるメリットがないのでは。
***処理方法(b).エクセルVBAを利用する。
本ページではVBAでの利用を対象にする。
***処理方法(C).エクセルVBA以外の言語も利用する。
本ページでは、これも対象。後述する通信コンポーネント等は、こちら(だと思う)。
**対象のWEBページ(サイト)のデータ形式(ファイル形式)ごとにやり方が異なる
***(い)HTMLファイル
***(ろ)XML
***(は)画像ファイル
***(に)その他もろもろのページ(HTMLだが処理が面倒なページ、javascriptなどで動的なページ)
*(い) VBAで「HTMLで書かれたWEBページ」を扱う。
流れ
1.HTMLをダウンロード
2.ダウンロードしたファイルを処理
**STEP1.HTMLファイルをダウンロードする、WEBページのデータをエクセルファイルに取り込む
ダウンロードするには、いくつか方法がある。
方法イ.VBAでIEを操作する。
方法ロ.VBAで通信コンポーネントを利用する。(wininet,winhttp,XMLHttpなど。)
***方法イ.VBAでIE(Internet Explorer)を操作し、WEBページのデータをエクセルファイルに取り込む(IEにWEBページを表示させ、コピペする。)
■IEを操作する方法は、後述する通信コンポーネントを使う方法と比較した場合の良い点悪い点。
良い点:
・扱えるサイトの範囲が広い。(IEで表示できるほぼ全てのページを扱える。)
・直感的にわかりやすい
悪い点:処理に時間がかかる。
ステップ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など。)
wininet,winhttp(Windows HTTP Services),XMLHttpなど。
[[Windows HTTP Servicesとは 【WinHTTP】 - 意味/解説/説明/定義 : IT用語辞典 >http://e-words.jp/w/Windows20HTTP20Services.html]]
API関数と表記してあるサイトもある。
良い点:一旦書き上げてしまえば、VBAよりは処理が早い。
悪い点:
・プログラムが複雑になりやすい。(たぶん。)
・扱えないサイトがある。(cookieの処理など。)
色々なコンポーネントがあるため、別ページに記載。
[[勉強用メモ - トップページ/windows/microsoft office/EXCEL/VBA/通信コンポーネントを利用(wininet,winhttp,XMLHttp等 >http://www42.atwiki.jp/tomokazu0525/pages/324.html]]
***方法ハ.VBAでWebBrowserコントロールを扱う。
詳細不明。あまりメリット感じられないので、深堀しない。
メリットデメリットをまとめたページ:[[ 【Excel VBA備忘ログ】WebBrowserコントロールの使用: ★ ダメ株主 Z ★ >http://app.f.m-cocolog.jp/t/typecast/37471/36872/41516185]]
**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]]
*(は).画像ファイルなどのファイルを扱う。
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で扱うのが面倒なページ
**面倒パターン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]]
&mobile(){&amazon(4844333844,text,image)}
#html2(){{{{{{<TABLE><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=as4&m=amazon&f=ifr&ref=ss_til&asins=4844333844" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></TD></TR></TABLE>}}}}}}
&link_edit(text=ここを編集)
*ページフッタ
**このページの1階層上のページ
&link_parent()
**このページの1階層下のページ
#lsd()
**このページに含まれるタグ
&tags()
**このページへのアクセス数
今日:&counter(today)
昨日:&counter(yesterday)
これまで合計:&counter(total)