三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
Ken3三流君の連絡先:
[google formsで連絡する]
上記の問い合わせフォームに質問・感想など気軽に書き込んでください

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

Power QueryでJavaScriptの壁を越える!doAction関数とPOST送信を分析してJRAオッズを取得する方法

Excel Power Query】JRAオッズ自動取得!JavaScript「doAction」で動くサイトを攻略するPOST送信徹底解説

概要

「Webサイトからデータを取得したいのに、なぜかうまくいかない…」そんな経験はありませんか?多くのサイトで採用されているJavaScript「doAction」という仕組みの裏側を解明し、Power QueryでPOST送信を再現する方法を初心者向けに徹底解説します。

この動画では、JRA日本中央競馬会)の公式サイトを具体例に、普段のURLアクセス(GETメソッド)では取得できない動的なコンテンツを、Power Queryを使って自動で取得する手順を紹介します。開催地やレースを自由に選択してオッズ情報を手に入れる方法まで、段階を追って一緒に作成していきましょう。この記事と動画を見れば、今まで諦めていたWebサイトからのデータ取得に応用できる知識が手に入ります!

ExcelシートにJRA単勝オッズが取得されているスクリーンショット

解説動画

まずは、実際の一連の流れをご覧ください。この記事では、動画内の各ステップをスクリーンショット付きで詳しく解説していきます。


www.youtube.com

動画をYouTubeで見る


操作の説明:JRAオッズ取得までの全ステップ

STEP 1: Power Queryエディタの準備

まずは、Power QueryでWebサイトの情報を取得するための準備をします。

  1. Excelの[データ]タブを開く
  2. [データの取得] > [その他のデータソースから] > [空のクエリ] を選択します。

ここに、Excelメニューの「データ > データの取得 > その他のデータソースから > 空のクエリ」を指し示しているスクリーンショットを挿入

これにより、Power Queryエディタが起動します。次に、エディタの[詳細エディター]を開き、後述するソースコードを貼り付けます。

ここに、Power Queryエディタが起動し、「詳細エディター」ボタンがハイライトされているスクリーンショットを挿入

[動画で確認する→ 00:04:07 取得手順② エディタ起動]

STEP 2: 初回接続と資格情報の設定

ソースコードを貼り付けて実行すると、初回のみ「資格情報」の設定を求められます。これは、外部のWebサイトへアクセスして良いかどうかの許可設定です。

ここでは[匿名]を選択し、[接続]をクリックします。

ここに、「資格情報を編集してください」のダイアログが表示され、「匿名」が選択されているスクリーンショットを挿入

[動画で確認する→ 00:08:28 初回接続の重要ポイント]


【本題】なぜPOST送信が必要なのか?サイトの仕組みを解明

ここからがこの解説の核心部分です。なぜ、単純なURLアクセスではJRAのオッズを取得できないのでしょうか。その謎を解明していきます。

調査①:ページのソースコードから「doAction」を発見

JRAのトップページで「オッズ」ボタンの上で右クリックし、「ページのソースを表示」または「検証」を選択すると、HTMLソースコードを見ることができます。

ここに、JRAサイトの「オッズ」ボタンと、そこから表示されたHTMLソースコードonClick="doAction(...)"の部分がハイライトされているスクリーンショットを挿入

すると、オッズボタンのリンク先(href)は#になっており、代わりにonClick="doAction(...)"というJavaScriptが実行される仕組みになっていることが分かります。これが、単純なURLではアクセスできない理由です。

[動画で確認する→ 00:13:11 調査② doActionの発見]

調査②:外部JSファイルでdoActionの正体を突き止める

doActionの具体的な処理内容を探るため、HTMLソースの上部で読み込まれているJavaScriptファイルの中から、common2.jsという共通ファイルに注目します。

ここに、common2.jsファイルの中身が表示され、function doAction( url , cname )document.getElementById( "commForm01" ).submit();の部分がハイライトされているスクリーンショットを挿入

このファイルの中身を見ると、doAction関数は、引数で渡されたurlcnameを使って、commForm01という名前のフォームをsubmit()(送信)していることが判明します。

調査③:フォームの送信方式が「POST」であることを確認

最後に、HTMLソースコードの下部にあるcommForm01の定義を確認します。

ここに、HTMLソースコードの下部にある<form id="commForm01" method="POST" ...>の行がハイライトされているスクリーンショットを挿入

ここにmethod="POST"と明記されていることから、このサイトのページ遷移はPOST送信によって行われていることが確定します。

解決策:Power QueryでPOST送信を再現する

この仕組みをPower Queryで再現するには、Web.Contents関数にHeadersContentのオプションを追加します。

let
    strURL = "[https://www.jra.go.jp/JRADB/accessO.html](https://www.jra.go.jp/JRADB/accessO.html)",
    strPARA = Text.ToBinary("cname=pw15oli00/6D"),
    strHEAD = [#"Content-Type"="application/x-www-form-urlencoded"],
    ソース = Web.Contents(strURL, [Headers = strHEAD, Content = strPARA])
    // ...以降の処理...
in
    ソース

これで、JRAサイトの仕組みに対応したデータ取得が可能になります。

[動画で確認する→ 00:18:46 Power Queryへの応用]


応用編:動的にオッズ情報を取得する

仕組みが分かれば、あとは応用です。動画では、Excelのセル(名前付き範囲)を使って、開催地やレース番号を動的に変更し、目的のオッズ情報をピンポイントで取得する方法までを解説しています。

[動画で確認する→ 00:35:40 応用編② Excelの名前機能でパラメータを渡す]


このブログで伝えたかったこと

まとめ

この解説で最も伝えたかったのは、単なる操作手順に留まらない、**Webサイトの裏側にある「仕組み」を理解し、それに基づいてPower Queryを構築する「思考のプロセス」**です。一見複雑に見える動的なWebサイトも、HTMLやJavaScriptのソースを丁寧に読み解くことで、データ取得の糸口を見つけることができます。

未解決の課題と対処法

動画の終盤で触れている通り、現状では馬連馬単など、複数のHTMLテーブルに分割されて表示されるオッズ情報を完全には取得できません。

ここに、馬連オッズを取得しようとして、最初の馬の組み合わせしか表示されていない失敗例のスクリーンショットを挿入

これは、現在のクエリがページ内の最初のテーブル(Table[0])のみを取得しているためです。

この課題に対処するには、Power Queryの**Table.Combine()関数**が有効です。ページ内の全テーブルをリストとして取得し、この関数で一つに結合することで、完全なオッズ表を作成することが可能になります。この詳細については、また別の機会にご紹介したいと思います。


参考リンク

動画内で使用したソースコード・関連動画

ランダムな占い

再生リスト:[占い 今日のラッキーカラー]をショート動画

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



[連絡先はココのフォームから]←連絡先の入力フォームです、気軽に書いてください
本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)