こんにちは、K田です。
RPAを使って「Amazonにある書籍の価格を調べる」ことをやってみる。前回は前準備とKindle版の価格と書籍版の価格の取得を行いました。
今回はそのPart.3です。
今回やること
前回、全体の工程を4つに分けました。
- 初期設定……ワークフローで使う変数の設定と準備
- 価格のスクレイピング……AmazonのHPから価格を取得して整形
- Excelへの書き込み……結果を書き込むExcelを開いて目標の行に変数を書き込む
- ウインドウを閉じる……AmazonのHPのブラウザ(Chrome)を閉じる
前回は「1.」「2.」をやりましたので、今回は「3.」「4.」の部分をやってみます。
UiPath上での各工程がどこに当たるのかを図示してみました。黄枠の部分が今回の工程「3.」「4.」に相当します。
Excelへの書き込み
AmazonのHPから取得した本の価格をExcelに書き込む処理を行います。下記で示した通り、順に説明していきます。
- Excelを開く
- 書き込むセル位置を確定させる
- セルに取得した値を書き込む
Excelを開く
まずはじめにExcelを開く処理を行います。Excelを開くにはアクティビティ「Excelアプリケーションスコープ」を使用します。
開きたいExcelのフルパスを「””」ダブルクォーテーションで挟み、赤枠内に入力します。自分が開きたいExcelを指定して開くことができるので、「Excelを開く」はこれで実現できます。
黄色枠内には開いたExcelに対して行う操作のアクティビティを入れていきます。「セルを読み込む」「セルを書き込む」「ブックの保存」などいろいろできます。
しかし注意すべき点は、「黄色枠内にアクティビティを配置する必要がある」ということです。アクティビティをうっかり枠外に出さないように注意しましょう。
書き込むセル位置を確定させる
次に書き込むセル位置を確定させる処理を行います。
下図の例ですと、1行目と2行目はタイトルと項目名で使用しているため、3行目のセル「A3」から順に「A3、A4、A5…」とセル内が空欄かどうか調べていきます。
セル「A6」が初めの空欄なので、書き込むセルは「A6」に確定できます。
方法はいろいろありますが、今回はアクティビティ「繰り返し(後判定)」を用いて、特定のセルから順に1つ下のセルを調べます。
空欄のセルが見つかれば、そこが書き込むセルになります。結果的に「最終行の取得」と同じになります。
完成したワークフローは以下の通りです。
繰り返しには今回はアクティビティ「繰り返し(後判定)」を使用します。条件式は「temp_value<>””」です。
条件式について補足しましょう。
<>
「<>」の記号は「~ではない」という条件式です。
""
「”(半角ダブルクォーテーション)」を2つ入力すると「空白(空欄)」という意味になります。
以上のことより調べたセル(temp_value)が空欄ではない(<>””)という条件になります。この条件に合うまで「カウントアップ」と「セルを読み込み」を繰り返すことになります。
これで書き込むセルが確定します。最後に取得した値を書き込めば完了です。
ひとつずつ行を下の方に移動していく操作を実現するために、アクティビティ「代入」を使用します。
左辺の変数「cnt_row」は行数を表しています。初期値は「2」に設定しています。
右辺は「cnt_row+1」でカウントアップしています。
カウントアップの挙動をもう少し詳しく説明します。
1回目
「cnt_row」の初期値は「2」で設定していますので、1回目は
「cnt_row」=「2+1」で「3」となりますので、3行目のセルが空欄かどうか調べます。
2回目
「cnt_row」は1回目に「3」となりましたので、2回目は
「cnt_row」=「3+1」で「4」となりますので、4行目のセルが空欄かどうか調べます。
3回目
「cnt_row」は2回目に「4」となりましたので、3回目は
「cnt_row」=「4+1」で「5」となりますので、5行目のセルが空欄かどうか調べます。
上記のように毎回行数を増やして下の行に移動するようにして、空欄セルが見つかるまで繰り返しを行います。
タイトルと項目の見出し部分を除いた3行目から調べる設定にしています。
注目しているセルの内容を読み込むために、アクティビティ「セル読み込み」を使用します。
左辺の変数「save_excel_sheet_name」はシート名を表しています。初期値は「”価格”」に設定しています。
右辺「“A”+cnt_row.ToString」は(Aが列名)+(cnt_rowが行数)でセルの場所を表しています。
空欄セルの行数「cnt_row」が確定することで「書き込むセルが確定できた」と言えます。
セルに取得した値を書き込む
書き込むセルが確定できたので、最後に取得した値を書き込みましょう。
トライRPA! UiPathで本の価格調査 Part.2にて取得したデータ
- 取得した日付「price_date」
- Kindle版の価格「price_kindle」
- 単行本版の価格「price_book」
を使用します。
完成図が下図です。
Excelセルにデータ入力するにはアクティビティ「セルに書き込み」を使用します。例えば取得日付の書き込みなら次のようになります。
黄色枠でシート名、赤枠でセル位置、青枠で書き込む値を指定できます。
黄色枠「save_excel_sheet_name」はシート名を表しています。初期値はシート名である「“価格”」に設定しています。
赤枠「“A”+cnt_row.ToString」は(Aが列名)+(cnt_rowが行数)でセルの位置を表しています。
青枠「price_date」は取得した日付を表しています。
データの書き込み先であるExcel表は下記のようになります。
「日付」はA列、「Kindle版」はB列、「書籍版」はC列となっています。行数は同じなので、先ほど説明しましたセル位置を表す赤枠「“A”+cnt_row.ToString」の列の部分(”A”)をB、Cのように指定すれば、重複することなく書き込みが可能です。今後、追加で列を挿入した場合、書き込む列が変わった場合は列「A、B、C」の部分のみ修正すれば対応できます。
ウインドウを閉じる
私は「ウインドウを閉じる」という作業を何度か忘れてしまったせいで、ウインドウが山のように溜まった経験があります。ウインドウは開き過ぎますとPCの動作環境に負担を与え、動作が遅くなる可能性があります。使わないウインドウは小まめに閉じるように心がけましょう。
ウインドウを閉じるには、アクティビティ「アプリケーションを閉じる」を使用します。「画面上で指定」をクリックすると、画像で閉じるウインドウを指定できます。
画面全体が薄い青色に着色されます。今回は「アプリケーションを閉じる」なのでウインドウ全体をセレクターとします。これでクリックします。
指定するとアクティビティ「アプリケーションを閉じる」の画面上で指定の部分が画像にて指定できました。これで「ウインドウを閉じる」操作は完了です。
結果
以上により
- Excelへの書き込み……結果を書き込むExcelを開いて目標の行に変数を書き込む
- ウインドウを閉じる……AmazonのHPのブラウザ(Chrome)を閉じる
までのワークフローが出来ました。
下記が日付、Kindle版と書籍版の価格が記入されたExcel表になります。
本ワークフローを実行した結果、過去の履歴を消すことなく、7行目に書き込みがされています。
これで「UiPathを使って本の価格調査をする」という目的が達成できました。
さらに別ブログ「トライRPA! WorkFusionで本の価格調査 Part.3」と同じ結果が得られました。
発展とまとめ
今回の発展として、本以外の商品価格を調べることができます。例えば、家電製品などは価格の変動が大きいので、定期的に調査してグラフ化すると傾向が分かるでしょう。価格以外でも天気予報の気温や降水確率などを履歴データとして残すことも可能だと思います。
トライRPA! UiPathで本の価格調査 Part.1でも紹介したように、UiPathは画像認識による指定が多いので、これまでプログラミングの知識がない方でも導入しやすいツールになっております。「これからRPAをはじめよう!」とお考えの方にはオススメのツールです。まずは作って動かしてみて「自分が作ったロボットが動く感動」を体験いただきたいと思います。
また機会がありましたら、別のRPAを使った同じ操作を当ブログで紹介できればと考えております。
以上、最後まで読んでいただきましてありがとうございました。