Webページの情報を抽出し、CSVファイル出力するロボットを作ってみた
こんにちは!
RPA新人開発者の戸波です。
当社のRPA担当でRPAブログを開設し、1年が経ちました。
当ブログを開設するまでは、学んだことをアウトプットする機会がほとんどなく、ただ知識を入れていくだけの日々でした。
しかしブログという場ができたことで、書くことで私が学んだことをアウトプットしたり、書いた記事を読み返すことで過去に学んだことの振り返りができたり、よりしっかりと知識をつける点で私自身にとってよい経験となっています。
2年目も、私の視点から学んだことやお役立ち情報を発信していけたらと思っております。
今後とも、当ブログをどうぞよろしくお願いいたします。
今まで学習したことのおさらいとして、今回は実際のWebページから情報を抽出し、CSVファイルに出力するロボットを作成します。
今回、ロボットを作成するにあたってのポイントは以下になります。
- 値判定ステップの中でコンバータを使って変数の値から数値のみを抽出し、判定に利用する
- 「繰り返し」「次へ」ステップを利用し、ページャーを操作する
苦手なポイントがある方はぜひこのロボットを作って練習してみてくださいね!
例として、「きょうの料理ビギナーズ」のサイトから調理時間ごとにレシピ名と調理時間を抽出し、CSVファイルにまとめてみます。
きょうの料理ビギナーズのサイトでは、検索の際の調理時間の区分が以下の5つになっています。
例えばこのページを実際に利用するとして、15分以内のレシピの中から、5分以内で作ることができる料理を知りたいときはどうしたらよいでしょうか。
「15分以内」の絞り込みだけでも2000件以上もあるレシピを、1つ1つ確認していくのは効率的とはいえませんね。
そこで今回は、15分以内で作れるメニューを調理時間でさらに細かく区分し、そのレシピ名と調理時間をCSVファイルに分けて出力するロボットを作成します。
このロボットでやりたいこと
今回ロボットでやりたいことは以下の2つです。
- 調理時間が5分以内、10分以下、15分以下のレシピと調理時間を抽出する
- 調理時間の区分ごとに、3つのCSVファイルに出力する
ロボットの全体フロー
今回のロボットの全体像は以下のようになっています。
繰り返しループで次のページを表示する処理の中にさらにループを入れ、そのループの中ではレシピ・調理時間の抽出と、CSVファイル出力のために値を変数に出力するという2つの処理を行っています。
繰り返しループがすべて終了し最後のページまで表示したら、CSVファイルに出力します。
今回のロボットを作成するにあたり、使った変数は以下の通りです。
「きょうの料理ビギナーズ」タイプ内には、「レシピ名」と「調理時間」という2つの変数があります。
変数「出力用変数_○分以内」は、調理時間ごとにCSVファイルを書き込むための変数とし、ループのたびに追記されます。
変数「出力用変数_○分以内」は、ループをまたいでも値を保持していてほしいため、グローバル変数に設定します。
ロボットの作成手順
前準備編(ページ表示~レシピ絞り込み)
今回ロボット作成に当たって使用するページの読み込みから、15分以内で作れるレシピの絞り込みをWebページの検索機能で読み込むところまでを作成します。
「ページ読込」ステップで、「きょうの料理ビギナーズ」のページを開きます。
「オプション選択」ステップで「レシピを絞り込む」の調理時間を「15分以内」に設定します。
ページ下部にある「この条件で検索する」ボタンをクリックします。
調理時間15分以内のレシピが表示されます。
せっかくなので、「人気順」をクリックしてレシピを抽出してみましょう。
15分以内に調理できるレシピが、人気順に表示されています。
レシピと調理時間の抽出
ページ内のすべてのレシピ名とその調理時間が含まれるようにループ範囲を指定します。
1つ分のレシピを抽出できるように「含めるクラス」には1件分のレシピと調理時間を含むclass属性(recipe-category-recipe)を指定します。
下の画像で指定している範囲は、上の画像の緑枠の部分になります。
ループすると、1件1件レシピが選択されます。
レシピ名と調理時間を抽出します。
このとき、変数の中身は以下のようになっています。
調理時間ごとに条件分岐し、変数に値を格納する
今回は、先ほどWebページから抽出した「レシピ名:なすと豚肉のみそ炒め」「調理時間:10分」のデータを使いながらフローについて説明します。
調理時間によって条件分岐し、対応した「出力用変数_○分以内」に値を追記します。
調理時間が5分以下、10分以下、15分以下(それ以外)に対応したブランチを作成し、ブランチの先頭に値判定ステップを設定します。
15分以下(それ以外)のブランチの値判定ステップは省略しても問題なく動くため、今回は省略します。
3つの値判定ステップの切り替え制御は、トライステップを利用します。
「出力用変数_○分以内」に追記するデータは、レシピ名と調理時間をカンマ区切りとし、改行コードを末尾に設定します。
データの格納フローは、以下となります。
調理時間の値で値判定をする際に、変数「調理時間」の値の中の数値は必要ですが「分」は必要ありませんね。
そこで、値判定ステップのアクションタブでコンバータを選択し、変数「調理時間」を抽出します。
変数「調理時間」を取得します。
「数値を抽出」で数値だけを抽出します。
数値だけが抽出され、調理時間の判定に使えるようになります。
取得した変数から数値だけを抽出したものを値判定に利用したいとき、どうすればよいでしょうか。
そんなときは、コンバータ内で「エクスプレッションを評価」を利用します。
エクスプレッションに記述された式を判定し、テスト出力部分に結果が表示されます。
「INPUT」を使うことで、編集した変数をコンバータ内でも扱うことができます。
今回の例であれば、INPUTには「10」が入ります。
ここまでの手順を参考に「調理時間が6分以上10分以下」の値判定ステップも同様に作成してください。
「変数の割当」ステップで、変数「レシピ名と調理時間」にレシピ名と調理時間をカンマ区切りで割り当てます。
CSVファイルに出力するため、先ほどの変数「レシピ名と調理時間」を変数「出力用変数_○分以内」に割り当てます。
ループするごとに、「出力用変数_○分以内」の値に変数「レシピ名と調理時間」の値が追記されてほしいため、以下のように値を割り当てます。
調理時間が10分以内、または15分以内の分岐についても、変数「レシピ名と調理時間」と変数「出力用変数_○分以内」の設定を行ってください。
ここまで説明した部分を一つのフローにすると、以下のようになります。
繰り返し・次へを利用して、「次へ」をクリックできるようにする
このWebページのページャーは、以下のようになっています。
しかし、3ページ目を開くと「最初へ」というボタンも表示されるなど、毎回同じボタンの内容・数でページャーが表示されるとは限りません。
ボタンのページのループを繰り返しても毎回「次へ」ボタンをクリックできるように、繰り返し・次へステップを使ってループを実装し、ページを表示してみましょう。
ページ内にあるレシピと調理時間をすべて抽出し、変数に出力してから次のページに進み…というように、抽出・出力の処理が1ページ分すべて終了してから次のページに進みます。
そのため、繰り返し・次へステップで作るループの中に、レシピと調理時間の抽出・変数への出力の処理を含むようにします。
以下のフローの赤丸の部分、「タグ繰り返し」の手前にブランチを設定し次のページを表示する処理を作成することで、抽出・変数への出力処理が終了してからページを進めることができます。
ロボットが、「次へ」のボタンを見つけるために探す範囲を設定します。
Webページ全体から「次へ」ボタンを探すのは非常に手間のかかる方法なので、探す範囲を設定します。
そこで利用するのが、「名前付きタグ設定」です。
ちょうどページャーの部分だけが入るように設定し、「ページャー」と名前を付けます。
ページャーと名付けた名前付きタグの中から「次へ」タグを探します。
タグパターンに「次へ」を設定し、ループを繰り返しても自動で「次へ」ボタンをクリックできるようにします。
作成したブランチのフローも含めた、現時点での全体のフローは以下のようになります。
CSVファイルに出力する
ここまでのフローで取得し、出力用変数に入れたレシピと調理時間をCSVファイルに出力します。
繰り返しループですべてのページを「次へ」で参照し、レシピと調理時間も取得した後にCSVファイルを出力できるように、ブランチを設定します。
CSVファイルを出力するために作成したブランチにアクションステップを挿入し、アクションとして「ファイルシステム」>「ファイル出力」を選択します。
「ファイル出力」アクションのアクションタブで、以下のように設定します。
ファイルエンコーディングでは、CSVファイルに出力する際の文字コードを指定します。
今回は、CSVファイルに出力した際の文字化けを防ぐために「Windows日本語(windows-31j)」を選択します。
これを、「出力用変数_10分以内」、「出力用変数_15分以内」でも同様に設定します。
これで、抽出したレシピと調理時間をCSVファイルに出力できました。
作成したブランチのフローも含めた、全体のフローは以下のようになります。
いかがでしたでしょうか。
今回はさまざまなアクションを使いながら、情報を抽出・出力するロボットを作成しました。
今回は値判定ステップでコンバータを利用しましたが、コンバータ内でINPUTを使うと直前に編集した値や変数を利用できることがポイントです。
1ステップで、変数を取得する・形式を編集する・編集された形式のまま変数の値を判定に利用する、という3つができるため、ステップ数が多くならずに済みます。
このロボットで紹介したステップの使い方が、皆様の業務効率化のためにもお役に立つことができますと嬉しく思います。
今回も、最後までお読みいただきありがとうございました!
<RPAの導入につきまして>
本Blogは、お役に立ちましたでしょうか?
RPAは、一般的な業務システムとは異なり、PoCを実施し、導入・運用開始で終わりでははありません。
導入時点からようやくスタートです。
業務効率化、人員最適化等の目標に応じた計画策定や人員配置、自動化ロボットの開発・運用といったPDCAサイクルが必要です。
弊社では、貴社の課題に適した自動化プランのご提案や開発者育成研修も実施し、貴社と並走したサポートをご提供いたします。
お気軽にお問い合わせください。
BizRobo!や弊社サポートについて詳しくはこちら >>> サービス紹介 - BizRobo! (自動化ツール)
■その他のBlog
- 【Tips】DBステップでデータ登録/参照時に任意の主キーを利用する
- BizRobo!CAMPUS!!第10回~正規表現編 続編~に参加しました!
- 【Tips】2段階認証が設定されたGoogleアカウントのGmailを利用する
- Webページの情報を抽出し、CSVファイル出力するロボットを作ってみた
- MacにBizRobo!の開発環境を導入してみよう
- Box連携 〜BoxAPIのアカウント登録、事前準備編〜
- BizRobo!CAMPUS!!第5回~開発の心得編~に参加しました!
- 新人開発者ブログ開始のご挨拶
- 【Robot-Hub】現在公開中のロボット(ほぼツール)たちを紹介します
- SSSAPIを使ってスプレッドシートを使ってみよう