投資信託をほったらかしにしていたところかなり値が下がっていることに気づき、もう少し高値で売っておけばよかったなぁ・・と残念に思うことがありました。
そうだ、こんな時こそITでソリューションだ!(昭和を生きた世代なのでお許しください)
ということで、非プログラマーでもプログラムができるというPower Automate | Microsoft Power Platformでソリューションしてみます。
スクレイピングの手順自体はいろいろなサイトに載っていると思うのですが、なぜかエクセルに出力するものが多く、自分は取得した情報をいい感じに加工して別サービス(Slack)に送信したかったので、エクセルを使わない手順を記載しようと思います。
思うところはありますが、非プログラマーということでEdgeを使うことにします。
※目次
1.Edgeを起動して、データを取得するサイトを開くところまで実装
(1)PowerAutomateの新規フロー画面を開いた後、左のメニューから「ブラウザー自動化>Webフォーム入力>新しいMicrosoftEdgeを開く」をダブルクリックします。
(2)開いたウインドウにある「初期URL」に情報を取得したいページのURLをはりつけします。
今回は例としてYahooの日経平均のページを指定します。
(3)元のページにwebブラウザを起動するコードが追加されたのを確認後、今度は左のメニューから「ブラウザー自動化>Webフォーム入力>Webブラウザを閉じる」をダブルクリックして下さい。
こういうところが自分のような素人にはわかりづらいところなのですが、ここはこのまま「保存」でOKです。
手順(2)で作ったブラウザを閉じたいのでWebブラウザーインスタンスには(2)で割り当たった変数を指定しているのだと思いますが、自分と同じくらいの初心者であれば何個もブラウザインスタンスを立ち上げるなんてやらないはずなので、無条件で「保存」でいいかと思いました。
(4)元の画面に戻るとブラウザを閉じるコードも追加されています。ここで一回赤枠のボタンを押して動作確認します。実行後にエラーが発生しておらず、ブラウザが起動して指定のページが開き、すぐブラウザが閉じることが確認できればここまでの実装は問題ない。ということになります。
2.Webページ内のデータを取得するところを実装
(1)ここからはwebページから情報を取得するところを作ります。まず情報を取得するwebページをEdgeで開きます。そのあと左のメニューから「ブラウザー自動化>Webデータ抽出>Webページからデータを抽出する」をダブルクリックします。
(2)以下のようなウインドウが表示されます。この状態で(1)で開いた情報を取得するwebページを表示します。
(3)すると画面上に下のような「ライブWebヘルパー」なるウィンドウが表示され、webページ上にマウスカーソルを合わせるとwebページ上の要素が赤枠で選択可能になります。下の例だと「日経平均株価」という箇所赤く囲われている状態になっております。
(4)この状態で取得したいデータの箇所に赤枠を表示させ、右クリックを行うといくつか選択肢が表示されます。自分は単純にテキスト文字列が欲しいだけなので、「要素の値を抽出>テキスト:(‘日経平均株価’)」をクリックします。
(5)ここで値の取得に成功すると、「ライブWebヘルパー」上にも取得した値が表示されます。
(6)自分は株価と前日からの差が欲しかったので、以下の3か所の値を取得しました。
(7)「終了」を押すと元のウインドウに戻ってきます。今取得した値は「レコード3、列データ行の形式で抽出します」とのことです。内容は生成された変数、今回はDataFromWebPageに保存されます。
(8)「保存」を押すと以下の画面に戻ってこれます。3つ目にデータを抽出するコードが追加になっているのですが、本来「Edgeを起動 → データを抽出 → Edgeを閉じる」としたいため、順番を入れ替えます。
こんな感じです。
(9)取得した情報が意図通りか確認するため、取得した情報を試しにメッセージボックスに表示すると、、。情報は取得できているっぽいです。
3.取得した情報を細工する
実行し終えた後に変数の内容を確認すると以下のように配列のような形式で保管されているようでした。
つまり、「日経平均株価」だけ取得したければ DataFromWebPage[0][0]とすればよいことになります。
なんとなく今までの経験からすると、「本日の日経平均株価は26945.67円です:前日比-388.12(-1.42%)」と表示させたければ
"本日の" + DataFromWebPage[0][0] + "は" + DataFromWebPage[0][1] + "円です:" + DataFromWebPage[0][2]
みたいな感じですかね。自分はこんな感じで取得した情報を加工して、その情報を1日1回22時台のどこかでslackにメッセージを配信するようにしました。
slack配信のところも結構いろいろ詰まったのですが、そちらは機会があればまた紹介しようと思います。
以前PowerAutomateの導入についても記事にしましたので、もしよろしければご覧ください。