UiPathのスクレイピングでセルに画像しかない場合の対処

# UiPath webスクレイピングTips

## はじめに

webスクレイピングをするときに表全体を取得しようとすると稀にあるのですがセルに画像だけが入っていて文字が取得できないといったことがあります。
通常、セルを一つ選択して表全体を取得するモードにすればサクッとスクレイピングできるものをこれがあるとセルを二つずつ選んでデータテーブルに起こす操作をしなければなりません。
比較的大きな表の場合操作だけで萎えるのですが、萎えてばかりもいられないのでたまには元気にならなきゃ！

ということで下記はそういう時に使えるTIPSです。

## 事前準備
・UiPathStudio を開いて新規のブランクシーケンスでプロジェクトを作成しておきます。
・次にブラウザで取得したいデータがあるページを開いておきます。
※ここではサンプルとして秋月で取り扱っているオペアンプの一覧を取得したいと思います。
※秋月のページデータが画像しか取れないという事ではありません。あしからず。


## 初期設定

シーケンスにAttachBrowserアクティビティをドラッグしてきて「indicate browser on screen」ボタンを押します。
![ds_figure1.png](https://qiita-image-store.s3.amazonaws.com/0/207819/f85198ed-5a45-c036-4a0c-1bc73fc012c9.png)


UiPathの画面が消えてエレメント選択のモードに入るので対象のwebページを選択します。
![ds_figure2.png](https://qiita-image-store.s3.amazonaws.com/0/207819/22ff9f79-b4a2-b6bf-1e93-17ab09b1f04f.png)


AttachBrowserアクティビティにスクリーンショットが貼り付くので次に「DESIGN」タブから「DataScraping」ボタンを押します。
![ds_figure3.png](https://qiita-image-store.s3.amazonaws.com/0/207819/4ec17689-bd76-7f46-3011-d8040e61c9bf.png)


## スクレイピングの設定

DataScraping Wizardモードに入ります。
エレメント選択の画面が開きますので「Next」を押し、選択画面に入ります。
![ds_figure4.png](https://qiita-image-store.s3.amazonaws.com/0/207819/a148c335-498d-ced9-9ef0-8e73034f46e6.png)


> ※エレメント選択はいくつかのやり方がありますが今回は３）の方法で行います
>>１）エレメントを一つ選択して表全体に適用し、データテーブルを作成するモード
>>２）エレメントを順番に２つ選択してデータテーブルを作成するモード
>>３）２を繰り返して任意のデータテーブルを作成するモード
>>このうち3の場合は2つずつエレメントを選択しますので奇数列のテーブルは作成できません
>>１)のやり方だとtextのみの取得となるためうまく取得できない場合があります。その場合は２)や３)で個別に選択しデータテーブルを作成するのがよいでしょう。

web画面で並んでいるデータから一つ目のエレメントを選択します。
![ds_figure5.png](https://qiita-image-store.s3.amazonaws.com/0/207819/89c5b77a-3eb7-bd15-517d-5f554dd88927.png)

表全体を取り込むかと聞いてくるのでここでは「いいえ」を選択します。
![ds_figure6.png](https://qiita-image-store.s3.amazonaws.com/0/207819/c7f9a179-aee8-12d2-ab63-bf4624678022.png)

2つ目のエレメント選択画面が表示されます。
「Next」を押してweb画面から2つ目のエレメントを選択します。
![ds_figure7.png](https://qiita-image-store.s3.amazonaws.com/0/207819/11552ec1-84a4-6473-6dcf-e794702eeb01.png)


2つ目のエレメントを選択するとWizard画面がConfigure Columnsに変わります。
ここでは何もせず「Next」を押しますが必要に応じてカラム名を変えたい場合があれば変更します。
またURLを取得したい場合は「Extract URL」にチェックを入れます。（ここでは外れたままにします）
![ds_figure9.png](https://qiita-image-store.s3.amazonaws.com/0/207819/df6f3679-14d8-21fc-62eb-f2c9afe92c35.png)
![ds_figure8.png](https://qiita-image-store.s3.amazonaws.com/0/207819/dacc1fa8-cd32-5d1f-2828-347ba5b6080a.png)

## 価格データの取得設定

取得したデータのプレビュー画面になりますが、ここでは何も表示されていません。
あとで表示させますのでこのまま無視して次に価格のデータを選択します。
プレビュー画面で「Extract Correlated Data」ボタンを押します。
![ds_figure10.png](https://qiita-image-store.s3.amazonaws.com/0/207819/c9e89571-1e3a-53e3-aed4-da3afbf92d92.png)


web選択画面になりますので価格を選択します。
例のように反転した状態でクリックしましょう。
![ds_figure11.png](https://qiita-image-store.s3.amazonaws.com/0/207819/2daffcb5-5129-fc91-bc20-98c8e593b228.png)


2つ目のエレメントを選択します。
「Next」を押しweb選択画面で2つ目のエレメントを選択します。
![ds_figure12.png](https://qiita-image-store.s3.amazonaws.com/0/207819/5cb998f7-12cf-58f0-5183-935124c7688b.png)
![ds_figure13.png](https://qiita-image-store.s3.amazonaws.com/0/207819/5be18e45-c2bb-d41f-10d7-c5d351bc1a6e.png)

wizard画面がカラム設定になりますのでここでもそのまま「Next」を押します。
web画面のほうでは連続データが反転して認識されているのがわかります。
カラム名を変更したい場合はここでも入力して変更しておきます。
![ds_figure14.png](https://qiita-image-store.s3.amazonaws.com/0/207819/1b7b078a-37f4-c719-f83e-39283b319fab.png)

プレビュー画面が表示され、列が追加されているのが確認できます。

## 属性変更してデータを表示する

これで表の認識はできている状態なので先ほど取得できていなかったColumns1の設定を変更します。
基本的にこのweb画面では画像に商品情報がIMGタグでALTパラメータとして登録されています。
興味があればページソースを確認してみてください。
では設定を変更しますのでプレビュー画面中の「Edit Data Definition」を押します。
![ds_figure15.png](https://qiita-image-store.s3.amazonaws.com/0/207819/9bf1f3bf-d9bb-7609-e2af-039d7c4a6623.png)

Data Definition画面ではタグが書かれた画面が表示されます。
この中でcolumnsタグがDataTableの列に対応しています。
![ds_figure16.png](https://qiita-image-store.s3.amazonaws.com/0/207819/f19a1c3d-add7-d8d5-4559-f62b1eb1d489.png)

この中の下記のcolumns1タグ中のattr属性を”text”から”alt”に変更します。
変更するとプレビュー画面で商品名が表示されました。
![ds_figure17.png](https://qiita-image-store.s3.amazonaws.com/0/207819/7044bd63-b8b4-6d56-66ce-18e7e42147f9.png)


またここでMaximum number of resultの項目を設定することで取得する件数を指定できます。
確認できたら「Finish」ボタンを押して確定させます。

## 複数ページにまたがるデータの取得

複数ページにまたがってデータ表示されている場合は次のIndicate Next Link画面で「Yes」を押してページ推移ボタンの指定を行います。
![ds_figure18.png](https://qiita-image-store.s3.amazonaws.com/0/207819/ba71d0f9-94ea-89b5-77e2-34235c0fb2c9.png)


web選択画面で次のページに推移するボタンを指定します。
![ds_figure19.png](https://qiita-image-store.s3.amazonaws.com/0/207819/ef74f1bf-b370-2d6e-515b-fb4ea5965c18.png)

Wizard画面が終了し、アクティビティにサムネイルが追加されました。
![ds_figure20.png](https://qiita-image-store.s3.amazonaws.com/0/207819/1459db9d-71a3-2577-a1b8-7e985047ddbe.png)

## EXCELファイルに書き出す

最後に取得したデータをEXCEL書類に書き出すために「Excel ApplicationScope」を配置し、保存先を指定します。
DoスコープにWriteRangeアクティビティを配置し、データテーブルを指定する項目に「ExtractDataTable」を書き込めば完了です。
![ds_figure21.png](https://qiita-image-store.s3.amazonaws.com/0/207819/7f5f0e70-98e1-ddd8-042d-161ddadf4803.png)

完了したらF5を押して実行させてみましょう。
実行結果のEXCELファイルは次のようになります。
![ds_figure22.png](https://qiita-image-store.s3.amazonaws.com/0/207819/ee57bb7a-2811-9e22-b1fc-0399d21ca636.png)

## さいごに

このようにWEBスクレイピングを行う場合は表の中に画像しかない場合でも属性を指定しなおすことでtextを適切に抽出することができます。
ただし、Amazonなどのように膨大な商品点数になるリストデータはRobotのメモリ利用率に十分注意して設計する必要があります。