Automation Anywhere で簡単ウェブスクレイピング(2)～パターンベースのデータ抽出

# 概要
定期的にウェブページ上の決まった場所からデータを抜いてきて活用する「データスクレイピング」は、Automation Anywhere の標準機能を使って簡単に実施できます。

前回の、[スクレイピング基本の記事](https://qiita.com/RPAbot/items/70c138d2534eb2a994bc)では、Automation Anywhere で単純なテーブルからデータを抜き出す方法をご紹介しました。今回の記事では、テーブル以外のパターンベースのオブジェクトからデータを抜き出す方法をご紹介します。

> 「パターンベースのデータ抽出」とは、画面上で繰り返し表示されるデータを、繰り返しを1セットとして取得する方法です。テーブルを取得する方法よりも汎用的です。複数ページのデータを一度に取り出すことも可能です。

環境

* Automation Anywhere Enterprise 11.3.2
* Automation Anywhere Community Edition

# さっそく作ってみよう!

「パターンベースのデータ抽出」の場合、Client を開いて、Web Recorderを指定して記録 (Record) します。
(**ワークベンチからコマンドを追加していく方法では作成ができません**。必要なコマンド (Extract Multiple Data/Click On) がリストにありません。)

## 1. Qiitaのトレンドランキングの場合

まず、手近な例としてQiitaトップページのトレンドランキングのリストをスクレイピングしてみましょう。ソースコードを見てみると、一覧のデータは`DIV`タグの中の属性として組み込まれているので、[前回](https://qiita.com/RPAbot/items/70c138d2534eb2a994bc)使った Extract Tableコマンドを使っても、テーブルが認識されません。このような時はExtract (Multiple) Dataコマンドを使います。

https://qiita.com
![aa-web-scraping-advanced01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/d270a2f7-05f6-5e75-ada5-b0530782b404.jpeg)


### 1-1. Web Recorder でExtract Data/パターンベースのデータを起動
まずClientの「記録 (Record)」ボタンのドロップダウンで「Web Recorder」を選択した後、「記録 (Record)」ボタンをクリックします。
![aa-web-recorder.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/42327e36-4a85-685e-3a7d-d8a389817d6d.png)

すると、対象となるページのURLを訪ねるダイアログボックスが起動します。URLにQiitaのトップページのURLを指定して「開始 (Start)」ボタンをクリックします。
![aa-web-scraping-advanced02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/8d4b873c-c7fc-d467-4d44-c5eb9da938e1.png)

以下のようなヒントが表示される場合は、「OK」ボタンをクリックします。
![aa-web-scraping-advanced03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/b84f0854-ce2b-26a1-3ee6-1e6920a1c012.png)

すると、Internet Explorer が起動して対象ページが表示され、右下にツールバーが表示されるので、ページの表示が終わるまでしばらく待ちましょう。その後、ツールバーの「Extract Data」ボタンをクリックします。
![aa-web-scraping-advanced04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/8e6da9f9-159e-fffe-293c-8679ed8b9e20.jpeg)

その後のダイアログボックスで、「パターンベースのデータ (Pattern based data)」を選択して「次へ (Next)」ボタンをクリックします。
![aa-web-scraping-advanced05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/76e1da27-a956-426c-da5f-94ac2a8103ff.png)


### 1-2. マウスで繰り返しパターンの1番目2番目を選択
Internet Explorer 上のページ上でマウスカーソルを動かしていくと、直下の HTML 要素が「緑の二重線」で縁取りされハイライトされます。
![grid-green.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/e82b6e86-6768-6827-410b-0d36c6e274aa.png)

画面上では以下のように見えます。ここで抜き出したいデータの繰り返しパターンの最初にあたる HTML 要素をマウスでクリックします。まずは記事のタイトルを抜き出したいので、最初の記事のタイトルに当たる部分にマウスを移動し、「緑の二重線」が表示されたらマウスでクリックしましょう。
![aa-web-scraping-advanced06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/0d865236-7ab3-1371-fbae-7ce05612bd68.png)

>(注) 「緑の二重線」がうまくいかないときはいったんすべてのInternet Explorer を終了して、右下のツールバーの「記録を停止 (Stop Recording)」ボタンをクリックして保存をキャンセルした後、手順の最初からやり直してください。`ESC`キーを押すと画面選択モードを抜けます。

マウスクリックが認識されると、以下のようなポップアップウィンドウが表示され、クリックした HTML 要素 (コントロール) の詳細情報が表示されます。「タイプ」には HTML タグの種類、値には得られるテキスト情報が表示されます。これでいい場合も、間違ったコントロールを選択してしまった場合でも、とりあえず「キャプチャ (Capture)」ボタンをクリックしましょう。
![aa-web-scraping-advanced07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/682f51b2-74c3-c9d2-5a26-37953766615e.png)

次に、抜き出したいデータの繰り返しパターンの2番目にあたるHTML 要素をマウスでクリックします。前述のステップで間違ったコントロールを選択してしまった場合は、適当なコントロールをクリックしてください。
![aa-web-scraping-advanced08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/03625fea-9aa0-14dd-d1d8-de57012a1b7a.png)

2番目にあたる HTML 要素が正しくクリックできていない場合は、以下のエラーが出て、その後、1番目の要素の選択からやり直しになります。
![aa-error-unable-to-establish-the-pattern.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/35379ff5-647d-c081-4c26-3cc9e7ff5721.png)

>(注)　このエラーダイアログは、たまにInternet Explorer のウィンドウの後ろに隠れて表示されるので、もし2番目の要素を指定後、しばらく何も表示されないと思った場合は、裏にダイアログボックスが隠れていないか確認してみてください。

Automation Anywhere で1番目/2番目のクリックから繰り返しパターンが正しく認識できた場合は、以下のダイアログボックスが表示されます。データとして読み込む際の列名を入力し、この HTML 要素の何を読み込むのかを選択します。(テキスト、リンク、画像など複数選択できる場合があります) 「Get Text」の場合は、表示されているテキスト要素が抜き出されます。その後「保存 (Save)」ボタンをクリックします。
![aa-web-scraping-advanced09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/144912a8-568a-e033-0b81-466fecc25e6e.png)

すると、以下のような「Extract Multiple Data Wizard」で、指定された1つ目のデータパターンが表示されます。これを必要なデータパターンだけ繰り返します。「追加 (Add)」をクリックすると、他の繰り返しパターンを指定できます。
![aa-web-scraping-advanced10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/ad9f1b1a-58a2-8ee0-53a7-70e28f8fd0da.png)



### 1-3. ほしいデータ列の数だけ繰り返す
1番目のデータパターンとして記事のタイトルを取得しましたが、他に以下のような合計5つの要素を同様に指定してみましょう。番号のついている順番に、最初の赤枠で囲ってある HTML 要素をクリック、次に対応する青枠の HTML 要素をクリックする、という具合で Extract Multiple Data Wizard に項目を足していきます。
![aa-web-scraping-advanced10-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/d7dd6623-8997-5200-295b-2232cf0d5836.png)

たとえば画像要素を選択した場合は、以下のように`IMG`タグが選択されたことが表示されます。
![aa-web-scraping-advanced11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/b299f6d1-b472-46ee-6f0e-d3858764a018.png)

データパターンを繰り返し指定した結果、5つのパターンの指定が終わると以下の画面となります。その後「次へ (Next)」ボタンをクリックします。
![aa-web-scraping-advanced12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/fe9f7916-8904-43cf-91e6-d623569c7195.png)

次の画面はそのまま「次へ (Next)」ボタンをクリックします。
![aa-web-scraping-advanced13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/d8e5d4a5-2a2b-8e51-0756-4fc5b794e9ad.png)


### 1-4. データのプレビュー、データの保存先CSV、イメージ保存先フォルダーの指定
次の画面で「Preview Data」ボタンをクリックして、選択したデータパターンが実際に正しく取り込めるかを見てみましょう。正常に指定されていれば、以下の画面のように表示されます。あとは、データをエクスポートするCSVのパス、イメージを指定している場合は、その保存先フォルダーを指定して「完了」ボタンをクリックします。
![aa-web-scraping-advanced14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/95be2b3d-fb3a-dd1c-f299-6b08d8efe66e.png)

その後、画面右下に表示されているツールバーで「記録を停止 (Stop Recording)」ボタンをクリックして Web Recorderを終了します。
![aa-web-scraping-advanced15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/7eb7cc12-e2b6-2875-b5ca-ead6fb511d1a.png)

タスクを保存するファイル名を求められるので、入力後、「保存 (Save)」ボタンをクリックして完了します。なんとこれでボットの作成が完了です！
![aa-web-scraping-advanced16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/80a915ca-1654-bb27-72c6-653f8d4a1d82.png)



### 1-5. 作成されたアクションリストの確認と実行
作成されたタスクをワークベンチで開いてみると、以下のような2行が作成されています。`Extract Multiple Data`コマンドはワークベンチ内からは追加できず、Web Recorderでの記録のみで追加できるコマンドです。
![aa-web-scraping-advanced17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/289362ba-6b1e-2526-4c66-7814c292ca9f.png)

このアクションリストを実行して作成されるCSVを開くと、以下のようにデータが取得されていることがわかります。画像は指定したフォルダーに保存され、CSVには保存が成功したかどうかのステータスが記録されます。
![aa-web-scraping-advanced18.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/cd1df84e-93f2-17b9-419a-6ad5785a5373.jpeg)

このように、Automation Anywhere はコーディングを全く行わなくても、このようなパターンベースのデータ抽出をダイアログボックス/GUIベースの操作だけで簡単に抜き出すことができるのが、他のRPAツールと比べた時の特徴です。これならVisual Studioを使いこなすプログラマーでなくても、Excelマクロがわかる程度の人であれば簡単に使いこなせそうです。


>(注) 上のデータで、「name」の列だけ最後の7行が空欄になっていますが、これは途中で以下の画像のように名前の前に「new」アイコンが表示された行が合計7つあり、データが読み込めずに空欄になったものが上に詰まった結果のようです。データが取れない行がある場合はこのような結果になりますので、このパターンを考慮したうえでのさらなる工夫が必要です。
![aa-web-scraping-advanced19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/1430408c-acdf-28ae-877e-05f1b80262e5.png)



## 2. 価格コムの売れ筋ランキングの場合

もうひとつの例として、価格コムの売れ筋ランキングの表からスクレイピングすることを考えてみましょう。価格コムの場合は HTML コードはテーブルですが、通常のテーブルではなく偶数行と奇数行で違うパターンになっています。「パターンベースのデータ抽出」は多少変則的なパターンが含まれていたりする場合でも指定した繰り返しパターンで抜き出したり、データが複数ページにまたがる場合でもページをめくってデータを抜いていくこともできます。

https://kakaku.com/kaden/lcd-tv/itemlist.aspx?pdf_Spec114=2
![aa-web-scraping-advanced20.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/271b155a-4ce1-90a3-8d00-327203a476f3.jpeg)


### 2-1. Web Recorder でExtract Data/パターンベースのデータを起動
Clientの「記録 (Record)」ボタンからWeb Recorder を起動してExtract Data/パターンベースのデータを起動するところまでは前回と同じですので省略します。

### 2-2. マウスで繰り返しパターンの1番目2番目を選択/ほしいデータ列の数だけ繰り返す
今回は、番号のついている順番に、最初の赤枠で囲ってある HTML 要素をクリック、次に対応する青枠の HTML 要素をクリックする、という具合で Extract Multiple Data Wizard に項目を合計5つ足していきます。1番目と2番目は同じタイトル要素をクリックし、それぞれGet Text、Get URLで別々のプロパティを取得します。
![aa-web-scraping-advanced21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/37ce5de7-b6ad-994b-e82e-4d2f6f346506.png)


設定が完了すると、以下のようにキャプチャされます。列名は以下の一覧にあるようにつけてください。問題なく設定されていれば「次へ (Next)」ボタンをクリックします。
![aa-web-scraping-advanced22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/5721fcab-71a1-c7d4-de31-d1dcc923f897.png)



### 2-3. 次のページに行くためのリンクを指定
このページでは、データが複数ページにまたがる(跨る)設定を行います。「このデータは複数ページに跨る」チェックボックスをONにして、ページをめくるコントロールを指定するために「キャプチャ (Capture)」ボタンをクリックします。
![aa-web-scraping-advanced23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/f21d9250-047a-ba1d-0dae-ef2397937559.png)

Internet Explorer上で、ページをめくるコントロールを指定します。マウスポインタを動かすと「緑の二重線」でハイライトされます。
![aa-web-scraping-advanced24.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/f403c739-2565-be4c-2106-25531a4d510b.jpeg)

>(注) 「緑の二重線」がうまくいかないときはいったんやり直してください。

クリックして指定が終わると、指定されたコントロールが表示されます。これでOKであれば「次 (Next)」ボタンをクリックします。
![aa-web-scraping-advanced25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/3c8a6fdb-27ef-8a88-58c5-becd9fcd9dd9.png)


### 2-4. データのプレビュー、データの保存先CSV、イメージ保存先フォルダーの指定
次の画面で「Preview Data」ボタンをクリックして、選択したデータパターンが実際に正しく取り込めるかを見てみましょう。正常に指定されていれば、以下の画面のように表示されます。あとは、データをエクスポートするCSVのパス、イメージを指定している場合は、その保存先フォルダーを指定して「完了」ボタンをクリックします。
![aa-web-scraping-advanced14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/95be2b3d-fb3a-dd1c-f299-6b08d8efe66e.png)

その後、画面右下に表示されているツールバーで「記録を停止 (Stop Recording)」ボタンをクリックして Web Recorderを終了します。
![aa-web-scraping-advanced15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/7eb7cc12-e2b6-2875-b5ca-ead6fb511d1a.png)

タスクを保存するファイル名を求められるので、入力後、「保存 (Save)」ボタンをクリックして完了します。これでボットの作成が完了です！

### 2-5. 作成されたアクションリストの確認と実行

作成されたタスクをワークベンチで開いてみると、以下のような行が作成されています。前回よりも複雑で、`Extract Multiple Data`コマンドのほかに、ページをめくる`Click on`コマンドや、ページごとのループが追加されています。
![aa-web-scraping-advanced31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/8b075745-0bda-e2c9-684d-ce9e6fd7452f.png)


このアクションリストを実行して作成されるCSVを開くと、以下のようにデータが取得されていることがわかります。画像は指定したフォルダーに保存され、CSVには保存が成功したかどうかのステータスが記録されます。データの行数は63行あるので、1ページ当たり40項目だったデータが2ページ目までめくられていることもわかります。
![aa-web-scraping-advanced33-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/de97207e-3f65-77fe-3b15-1aa59db1d818.jpeg)



ちなみに、どの画像がCSVのどの行のデータと突合するかは、イメージのURLを取っておくことでわかります。
![aa-web-scraping-advanced32-1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/e6c54c78-6aee-1e03-309d-ce938a68ddb5.png)

Automation Anywhere は複数ページにまたがるデータでも、コーディングを全く行わずに簡単に抜き出すことができます。これでさまざまなパターンベースのデータを簡単に再利用できそうです。

&nbsp;
最後までお読みいただきありがとうございました。
&nbsp;
&nbsp;
&nbsp;