PAD基礎⑦ webページのデータを抽出する

業務自動化

今回は、Power Automate for desktopでwebページにアクセスしてデータを抽出する…といった内容で話を進めていきます。事例としては、気象庁データのページにアクセスして、そこから自動で気温のデータを抽出していき、Excelワークシートにデータをプロットすると言った内容です。

今回のテーマ

取得するデータは、全国観測地ランキングからその日の最高気温地点や気温、観測値を抽出します。また、列名のタイトルなども抽出します。タイトルについてはリスト形式で取得しますので、列にペーストするために行と列の変換を行うようなテクニックも学習します。

イラストは一部AIで生成

これをスクレイピングと言いますが、今回学習する内容は、左から中央にかけてのwebページからデータを取ってくるところまでとします。Excelの列幅や見栄えを良くするテクニックは、次回学習していきます。

このスクレイピングについては一部のサイトにおいては禁止されている場合がございます。一例として、X(旧Twitter)、Facebook、YouTube、Amazon、楽天、Yahoo!ファイナンス、Investing.comなどは、規約でスクレイピングを禁止していると解説されています。また分単位で巡回するなど高頻度でアクセスするとサイトへの負荷も大きくなることから、限度を考慮した運用に注意してください。またサイトの仕様変更などでフローアルゴリズムが正常に動作しなくなることがありますのでご了承ください。本講座で得た知識を応用する場合には十分に妥当性の判断をお願いします。

今回の学習をする前に、事例とするwebページをアクセスできるようにしておきましょう。
サイトURLは 気象庁|各種データ・資料(https://www.jma.go.jp/jma/menu/menureport.html)となります。

それでは新規フローを立ち上げましょう。いつものようにフロー入力の重要項目は赤アンダーライン、変数関連は青アンダーラインで示していきます。

新規フローを立ち上げよう

まずは、「新しいフロー」をクリックして、① 新規フローを立ち上げます。
② フローの作成画面で、新しいフロー名を入力します。フロー名は任意でお好きなファイル名を入力してください。

作成ボタンを押すと、新規フロー画面が立ち上がります。

③の場所が空のワークスペースで、ここから新しいフローを左のアクションからドラッグ&ドロップしてくることで、ブロック的にフローを作成してくことができます。

webサイトを立ち上げよう

まず最初に今回は事例としてブラウザはEdgeとして立ち上げ、その際、先ほどの気象庁各種データのwebサイトのURLを指定します。

①アクションのブラウザー自動化を開き、「新しいMicrosoft Edgeを起動」をドラッグ&ドロップします。

② 起動モードは「新しいインスタンスを起動する」とします。
③ 初期URLは、 https://www.jma.go.jp/jma/menu/menureport.html とします。 その際、先ほど立ち上げたサイトのURLをコピー&ぺーストしてくると便利です。

④ ウインドウの状態は、標準のままでかまいません。
⑤ ターゲットデスクトップは、ローカルコンピューターのままでかまいません。
⑥ ブラウザの操作方法も、ブラウザー拡張機能のままでかまいません。
⑦ これによって、ブラウザーには、変数として Browser が割り当てられます。

このブラウザーはインスタンス(実体)としての紐づけがされ、立ちあげたwebサイトのウインドウがこの変数 %Browser% として設定されたことになります。

ウィンドウにフォーカスする

このテクニックは、複数のウィンドウが立ち上がっている中で、使用するウィンドウをアクティブに優先するための基本テクニックです。

今回立ち上がったばかりのウィンドウなので、基本アクティブになっています。本来は、すでにアクティブにいることで問題にはなりませんが、自分のテスクトップでいろいろウィンドウが立ち上がっている際には、ブラウザーを指定しておく方が無難です。
一般的にも良く使うウィンドウを切り替えができる機能なので知っておくと便利です。

①アクションのUIオートメーションからウィンドウを開き、「ウィンドウにフォーカスする」をドラッグ&ドロップします。

② ウィンドウの検索モードは、右の「V」をクリックして、ウィンドウのインスタンス/ハンドルごとを選択します。
③ ウィンドウインスタンスは、先ほど立ち上げたwebサイトのブラウザを指定します。「V」をクリックして、変数 %Browser% を選択します。

変数を取り扱うときは、変数の前後に「%  %」をつけて、テキスト文字との区別を行います(PADのお作法です)

webページのボタンをクリックしてページを変える

「最新の気象データ」をクリック

さて、これからはwebページの操作を行っていきます。今回は、「最新の気象データ」のボタンをクリックして、その先のページを表示します。

①アクションのブラウザ自動化からwebフォーム入力を開き、「webページのボタンを押します」をドラッグ&ドロップします。

② 設定画面が出てきますので、UI要素の枠内をクリックします。
③ 「UI要素の追加」のボタンが出てきますので、これをクリックします。
④ すると今度は、UI要素ピッカー というウィンドウが新たに立ち上がります。この状態で、ブラウザ側の画面の一部(クリックしても影響のないところ)をマウスオーバーします。

UI要素:ユーザーインターフェースとなる画面上のボタン・テキスト・チェックボックスやリンクなどをPADが認識するための目印となる設定画面。今回これを使って設定します。

⑤ 今度は、このUI要素ピッカーを使って、押すボタン「最新の気象データ」をCtrl+右クリックで指定します。

⑥ webページ上で、気象の項目欄「最新の気象データ」のボタンの上にマウスを持っていくと、赤枠と共にAnchorが点灯しますので、この状態で、Ctrlキーとマウスの右クリックを同時押しします。すると、このボタンをクリックすることがPAD内に設定されることになります。

⑦ このアクションの設定のUI要素の枠を再びクリックすると、今度は設定されたデータが表示されます。Ancher周辺をマウスオーバーすると、Ancher‘今日の最高・最低気温、24時間降水量・・・’ と表示され、先ほどの設定が記録されていることがわかります。

⑧ これによって、ロボットが自動で「最新の気象データ」ボタンを押すことを覚えさせることができたのですが、次の準備のために、私たちも押して最新の気象データの画面を出しておきましょう。

⑨ 最後に設定完了のための保存を押しておきましょう。

「気温の状況」をクリック

さらに深堀りをして行きましょう。次は「気温の状況」のボタンをクリックします。

①アクションのブラウザ自動化からwebフォーム入力を開き、「webページのボタンを押します」をドラッグ&ドロップします。

② 設定画面が出てきますので、UI要素の枠内をクリックします。
③ 「UI要素の追加」のボタンが出てきますので、これをクリックします。(今回はすでに、UI要素が一つ設定されているので画面のイメージが変わります)
④ すると今度も、UI要素ピッカー というウィンドウが新たに立ち上がります。この状態で、ブラウザ側の画面の一部(クリックしても影響のないところ)をマウスオーバーします。

⑤ 今度は、このUI要素ピッカーを使って、押すボタン「気温の状況」をCtrl+右クリックで指定します。

⑥ webページ上で、気象の項目欄「気温の状況」のボタンの上にマウスを持っていくと、赤枠と共にAnchorが点灯しますので、この状態で、Ctrlキーとマウスの右クリックを同時押しします。
すると、このボタンをクリックすることがPAD内に設定されることになります。

⑦ このアクションの設定のUI要素の枠を再びクリックすると、今度は設定されたデータが表示されます。Ancher周辺をマウスオーバーすると、Ancher‘気温の状況’ と表示され、先ほどの設定が記録されていることがわかります。

⑧ これによって、ロボットが自動で「気温の状況」ボタンを押すことを覚えさせることができたのですが、次の準備のために、私たちも押して気温の状況の画面を出しておきましょう。

⑨ 最後に、設定完了のための保存を押しておきましょう。

ランキング をクリック

次は、最深部へ向けて、「ランキング」を押して、データを表示していきます。

①アクションのブラウザ自動化からwebフォーム入力を開き、「webページのボタンを押します」をドラッグ&ドロップします。

② 設定画面が出てきますので、UI要素の枠内をクリックします。
③ 「UI要素の追加」のボタンが出てきますので、これをクリックします。(今回はすでに、UI要素が二つ設定されています)
④ すると今度も、UI要素ピッカー というウィンドウが新たに立ち上がります。この状態で、ブラウザ側の画面の一部(クリックしても影響のないところ)をマウスオーバーします。

⑤ 今度は、このUI要素ピッカーを使って、押すボタン「ランキング」をCtrl+右クリックで指定します。

⑥ webページ上で、気象の項目欄「ランキング(上位10地点)」のボタンの上にマウスを持っていくと、赤枠と共にAnchorが点灯しますので、この状態で、Ctrlキーとマウスの右クリックを同時押しします。すると、このボタンをクリックすることがPAD内に設定されることになります。

⑦ このアクションの設定のUI要素の枠を再びクリックすると、今度は設定されたデータが表示されます。Ancher周辺をマウスオーバーすると、Ancher‘ランキング(上位10地点)’ と表示され、先ほどの設定が記録されていることがわかります。

⑧ これによって、ロボットが自動で「ランキング」ボタンを押すことを覚えさせることができたのですが、次の準備のために、私たちも押してランキングの画面を出しておきましょう。

⑨ 最後に、設定完了のための保存を押しておきましょう。

webページからデータを抽出する

気温データの抽出

いよいよ、データを取得していきます。まずは「その日の最高気温高い方から」のデータから。ここでは設定画面の後、次頁に渡ってwebのデータ抽出方法を解説します。

①アクションのブラウザ自動化から、今度はwebデータ抽出を開き、「webページからデータを抽出する」をドラッグ&ドロップします。

② 設定画面が出てきますので、次にブラウザ側の画面の一部(クリックしても影響のないところ)をマウスオーバーします。
③ するとライブwebヘルパーというウィンドウが立ち上がります。そして、抽出プレビュー画面になっていることを確認してください。
④ この状態で、webページ側の方にマウスを持っていきます。

⑤ まず順位の「1」のセルにマウスを合わせ、Table data cell の状態で右クリック。
「要素の値を抽出」⇒「テキスト(1)」を選択します。
⑥ すると、抽出プレビューに「1」が抽出されます。
⑦ 順位、都道府県、市町村、地点、観測値と列を右クリックで「テキスト抽出」そして、行は、2、3・・・と右クリックにて「テキスト抽出」すると抽出プレビューには表としてデータが抽出されていきます。取得したい表となるまで繰り返します。

      各列と各行を繰り返しテキスト抽出します(各列から行うとよい)。

ここでは、順位から観測地(の時分)までのデータをランキングデータとして抽出します。途中、表が崩れる場合もありますが、気にせずに 縦・横のテキストデータを抽出していくと、規則を自動で理解してくれますので、抽出プレビューのような表に仕上がっていきます。

⑧ 表が仕上がったら「終了」を押して抽出プレビューを確定します。

⑨ データの抽出が完了したら、取得したデータは、設定画面の変数 DataFromWebPage に格納されます。

タイトル(列名)の抽出

気温データなどの抽出の次は、各項目のタイトルを抽出します。これは、一列分のデータになるのでリストとなります。リストは表示する際にはN行1列の縦データになるので、後程表示するには変換が必要です。

①アクションのブラウザ自動化からwebデータ抽出を開き、「webページからデータを抽出する」をドラッグ&ドロップします(動作上は6項と基本同じです)

② 設定画面が出てきますので、次にブラウザ側の画面の一部(クリックしても影響のないところ)をマウスオーバーします。
③ するとライブwebヘルパーというウィンドウが今回も立ち上がります。そして、抽出プレビュー画面になっていることを確認してください。
④ この状態で、webページ側にマウスを持っていきます。

⑤ まず「順位」のセルにマウスを合わせ、Table header cell の状態で右クリック。
「要素の値を抽出」⇒「テキスト(順位)」を選択します。
⑥ すると、抽出プレビューに「順位」が抽出されます。
⑦ 名称、月、現在地、高値、安値、前日比、変動%、時刻と列を右クリックで「テキスト抽出」すると抽出プレビューには縦型のリストとしてデータが抽出されていきます。

    各列と各行を繰り返しテキスト抽出します(各列から行うとよい)。

途中、表が崩れる場合もありますが、気にせずに 列のテキストデータを抽出していくと、規則を自動で理解してくれますので、抽出プレビューのような表に仕上がっていきます。

表にはなっていますが、縦型のリストデータになっていますので注意が必要です

⑧ 表が仕上がったら「終了」を押して抽出プレビューを抜けます。

※ このテキストでは処理の便宜上、上から、順位、都道府県、市町村、地点、観測値までを使います。

これで、気象データの基本データが抽出できました。
次からはデータプロットです。

データが取り出せているかチェック

ここまできたら、実際にデータが取り出せているか一度テストしてみてチェックしましょう。

①  一旦セーブ💾して、実行「▶」してみましょう。
② フローテストが正常に終了することを確認したのち、変数 DataFromWebPage のところをダブルクリックしてフロー変数の編集を出します。
 ※ データ抽出は通信状態やPCの性能により約数秒~1分程度見ておく必要があります。

③ 変数の値が11行6列となっていて、「表示」を押すと明細が出てくればOKです。
④ 次に、同じように 変数 DataFromWebPage2 のところをダブルクリックしてフロー変数の編集を出します。
⑤ 同様な操作で変数の値の明細が出てきて、11行1列となっていればOKです(使用するデータは順位から観測地の5つの表題)。

データの抽出は問題なくできていますでしょうか。。。

ただし、%DataFromWebPage2% においては、縦型のリスト形式になっているので、このままExcelに貼り付けると、11行1列として貼り付けるので、これを1行11列に変換しないと、タイトルとして貼り付けられません。

このため、行と列を変換してあげる必要があります。これを行うには、後述しますが、縦のリストデータをひとつづつ取り出し、ループを使って表題に埋め込む作業を自動化します。

それを念頭にデータプロットを行います。

データをプロットする

Excelを立ち上げる

データをプロットする前に、まずはExcelを立ち上げます。Excelの立ち上げは、過去にも何回か行っているので復習ですね。

①アクションのExcelから「Excelの起動」をドラッグ&ドロップします。

② 新規で立ち上げるので、空のドキュメントを使用 を選びます。

③ 変数 ExcelInstance(エクセルインスタンス)に立ち上げたExcelの実体が格納されます。

※ 復習ですが、この変数を使って、どのExcelファイルかを今後指定してくことになりますが、今回はExcelはひとつしか立ち上げませんので、%ExcelInstance% のみとなります。

これから、2つのデータ変数をExcelにプロットしていきます。
 DataFromWebPage   最高気温のデータ(表データ)
 DataFromWebPage2 タイトル(縦のリストを横にします)

では、データをプロットしていきましょう!

気温のデータをプロットする

まずは、気温のデータ(%DataFromWebPage%)をExcelにプロットします。

①アクションのExcelから「Excelワークシートに書き込む」をドラッグ&ドロップします。

このようなイメージでプロット設定します。

※ こちらはExcelシートにデータの表をそのまま貼り付けられるので、特に問題はありませんね。

② 使用するExcelシートは、先ほど立ち上げた変数 %ExcelInstance% です。
③書き込む値は、最高気温のデータとなっている 変数 %DataFromWebPage% となります。({X} を押して、変数リストからダブルクリックで選ぶと便利です)
④ 書き込みモードは指定したセル上となります。
⑤ 書き込み位置は、1行目にタイトルを入れたいので、A列の2行目からとします。

ループを使ってタイトル(列名)を繰り返し取り出す

次は、タイトルですが、縦の行データを列に変換してプロットする簡易的な方法を一例として紹介します。その際にはひとつづつ配列データを取り出し、ループを使って繰り返し、列に貼り付けるやり方です。

①アクションのループから「Loop」をドラッグ&ドロップします。

② 使用するデータは、変数 %ExcelInstance2% の中から、順位~観測地の5つのデータであるので、開始値は「1」、終了は「5」、増分を「1」づつとします。

※ ループについては過去のテキストでも考え方を説明しています

このループを使って、順位をA1、都道府県をB1、市町村をC1と規則通りループを使ってプロットしていくような仕組みを作って行きます。(Aは1、Bは2に相当  ※A、B…の代わりに1,2…R1C1形式でも構わない)

③ ループステップ値は、変数 LoopIndex に割り当てられます。今回は、開始値が1で増分が1なので実質ループ回数に相当します。

タイトル(列名)をExcelにプロットする

最後に、タイトルのデータをプロットして行きます。考え方は先ほど示したように、データがリスト構造となっているので、縦の行数の部分をLoopIndexで変動させ、プロット位置も応じて変動させます。

①アクションのExcelから「Excelワークシートに書き込む」を「Loop」の間にドラッグ&ドロップします。

② 使用するExcelシートは、先ほど立ち上げた変数 %ExcelInstance% です。
③書き込む値は、最高気温のデータとなっている 変数 %DataFromWebPage2% を使います。({X} を押して、変数リストからダブルクリックで選ぶと便利です)

ただし、配列データは[0][0]からはじまる(0行0列め)ので、DataFromWebPageの行数もLoopIndexから「1」引いた数のデータから始めることになります。

よって、書き込む値は、%DataFromWebPage[LoopIndex-1][0] となります。

④ 書き込み列は、ループの回数に応じて、AからEへと増えていくので、変数 %LoopIndex% を入力します。

⑤ 書き込み行は、1行目からとします。

今回のフロー作成は、ここまでです。 おつかれさまでした! それでは早速動作確認してみましょう。

フローを動かしてみよう

フロー作成はこれで完成です。実際に動くかテストしてみましょう。
※ 先にも述べていますが、このデータの確からしさの判断はあくまで自己責任にてお願いします。

①  一旦セーブ💾して、実行「▶」してみましょう。

② 気象庁各種データサイトにアクセスし始めて、ロボットが自動でクリックして内部データがあるページにたどり着きましたでしょうか。
③ そして、設定した「その日の最高気温の高い観測地」の抽出が出来たらOKです。

Excelワークシートに、ただデータを貼り付けただけなので、少し見た目が・・・今度は、これをロボットに整形してもらって、より表らしくすることを考えて行きましょう。

まとめ

いかがだったでしょうか。今回はwebでの自動操作方法を中心にデータ抽出をゴールとして学習してきました。実際にはクリックだけでなく、データ入力、ラジオボタンの選択など、さまざまな操作ができることが、このPower Automate for desktopで気軽に行えます。

これまでと少し趣向が違う新しい機能を勉強したので、少し難しいと感じたかも知れませんが、web操作の設定方法のコツを掴めば意外と簡単にwebの自動操作ができるようになります。
例えば、検索窓にキーワードを入力したり、プルダウンリストを出して選択したり・・・人が操作できそうなことは一通りできます。是非、いろいろ活用してみてくださいね!

少しだけ注意点としては、リンク先が仕様変更で急に変わるものもあったり、日付属性などで制限されているページである場合には、クリックするリンク先が変わるものもあるので、そのようなリンク先では参照する場所(URL)や設定したUI要素が変わることから制御が効かないこともあるという点です。また前述しましたがスクレイピングにはサイトによって制限されているものもあるので利用規約などを調べて活用してみてください。

次回は、この取得してきたデータに対して、Excelのショートカットキーなどを駆使して、表らしく見栄えをよくするテクニックを学んでいきましょう。それでは、最後までお読みいただきありがとうございました。

付録:気象データのcsvファイルダウンロードについて

今回は、PADの勉強目的でもあり、web表示されているデータの抽出を行いましたが、実は気象データはcsvファイルでも配信されています。

こちらについては、全観測値から寄せ集められたデータが生データの形で見ることができるので、統計など実運用などで活用するガチ気象勢はこちらをクリック操作でcsvファイルのダウンロードをしてデータ活用することも可能です。
こちらであれば、Power Autoamte for desktop のクリック動作だけで、全国各地の気象データがcsv形式で取り出すことができます。このようなやり方もあるのだと参考に知っておいていただけると良いでしょう。

方法① 「最新の気象データ」⇒その他のデータ「天候の状況」⇒「地点別データ一覧表」⇒「csvダウンロード」
方法② 「最新の気象データ」⇒右上の「最新の気象データcsvダウンロード」のバナーをクリック ⇒提供されている各データを選択

もし、よろしければ皆さんの宿題にどうぞ!  それではまたの機会に・・・ありがとうございました。

タイトルとURLをコピーしました