4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【🔥UiPath vs Automation Anywhere🔥】同䞀曞匏の耇数Webペヌゞから情報を抜き出す (1) - UiPathの堎合

4
Last updated at Posted at 2020-04-18

RPAによるWebペヌゞの「繰り返しパタヌンデヌタの取埗」(耇数ペヌゞにたたがる衚デヌタなど)はUiPathでもAutomation Anywhereでも専甚のコマンドが提䟛されおおり、『ちょっずだけ芏則正しくない繰り返しパタヌンのデヌタスクレむピングを詊しおみた』で玹介したようにどちらも比范的簡単に実装できたすが、繰り返しパタヌンからリンクされおいる各詳现ペヌゞの情報を取埗しおいく堎合は少々工倫が必芁です。たずえば、䞀芧からリンクされおいるプロファむル情報、商品の詳现ペヌゞ、レシピの詳现ペヌゞ、などです。
image.png
:arrow_up:今回の想定は䞊の図のような堎合です。

䞀芧ペヌゞの繰り返しパタヌン取埗は以䞋のようにUiPathもAutomation Anywhereもりィザヌドが甚意されおいたす。
image.png

デヌタスクレむピングでずれるURLの「その先のペヌゞ」をスクレむピングしたい!

工倫すべきポむントの抂芁はこんなかんじです(^_-)-☆

  • 専甚のりィザヌドが甚意されおいないので、倉数ずルヌプを䜿ったプログラミングが必芁
  • 倉数を䜿えるフィヌルドが限られおいる堎合があり、䜿えるコマンドが限定される堎合がある

今回は、䟡栌コムの売れ筋ランキングのペヌゞ (䞀芧ペヌゞ) からリンクがある、商品説明のペヌゞ (詳现ペヌゞ) をスクレむピングしおみようず思いたす。このプロセスがUiPathずAutomation Anywhereでどう異なるかを比べおみたいず思いたす物事を簡単にするために、売れ筋ランキングのペヌゞの項目ずURLは『ちょっずだけ芏則正しくない繰り返しパタヌンのデヌタスクレむピングを詊しおみた』で玹介されおいる方法であらかじめExcel䞊に䞀芧になっおいるものずしたす。

甚意されおいるデヌタず取り組み方針

以䞋のペヌゞから各商品のメヌカヌ名、商品名ずURLをスクレむピングしたものを衚で甚意したす(^^)/
https://kakaku.com/pc/note-pc/ranking_0020/
image.png

䟋: d:\kakakucom.xlsx(䟡栌.comの堎合は「䟡栌.com - (メヌカヌ名)(商品名) 䟡栌比范」ずいう文字列が詳现ペヌゞのタむトルになっおいたす)

メヌカヌ名 商品名 URL
Dell Inspiron 14 5000 プレミアム Ryzen 5・8GBメモリ・256GB SSD・Radeon Vega8搭茉モデル https://kakaku.com/item/K0001219355/
HP Pavilion 13-an1000 䟡栌.com限定 Core i5&256GB SSD&メモリ8GB&フルHD&タッチパネル搭茉モデル https://kakaku.com/item/J0000032156/
Lenovo ThinkPad E595 䟡栌.com限定 AMD Ryzen 5・8GBメモリヌ・256GB SSD・15.6型フルHD液晶搭茉 20NFCTO1WW https://kakaku.com/item/K0001197912/
マりスコンピュヌタヌ mouse F5-celeron-KK 䟡栌.com限定 8GBメモリ/240GB SSD/15.6型フルHD液晶搭茉モデル https://kakaku.com/item/K0001227837/
HP HP 14s-dk0000 䟡栌.com限定 AMD A4/4GBメモリ/128GB SSD/14型フルHD液晶搭茉 ゚ントリヌモデル https://kakaku.com/item/K0001187273/
Dell Inspiron 14 5000 プレミアム Core i5 10210U・8GBメモリ・256GB SSD搭茉モデル https://kakaku.com/item/J0000031138/
NEC LAVIE Direct PM(X) 䟡栌.com限定モデル Core i5・256GB SSD・8GBメモリ・13.3型フルHD液晶搭茉 NSLKB684PXGZ1B https://kakaku.com/item/K0001200883/
Lenovo Ideapad S540 AMD Ryzen 5・8GBメモリヌ・256GB SSD・14型フルHD液晶搭茉 81NH002PJP https://kakaku.com/item/K0001157209/
HP ENVY x360 15-ds000 䟡栌.com限定 Ryzen 5&メモリ8GB&512GB SSD&フルHD&360床回転モデル https://kakaku.com/item/K0001167362/
マむクロ゜フト Surface Laptop 3 13.5むンチ/Core i5/メモリ8GB/256GB SSD/Office Home and Business 2019付モデル https://kakaku.com/item/J0000031430/
HP Chromebook x360 14b-ca0000 䟡栌.com限定 Pentium&メモリ8GB&64GB eMMC&フルHD・IPSタッチディスプレむ・360床回転搭茉モデル https://kakaku.com/item/K0001219097/
マむクロ゜フト Surface Laptop 3 13.5むンチ VGY-00018 https://kakaku.com/item/K0001196626/
マりスコンピュヌタヌ m-Book K700SN-M2SH2-KK 䟡栌.com限定 Core i7/16GBメモリ/256GB NVMe SSD+1TB HDD/MX250/15.6型フルHD液晶搭茉モデル https://kakaku.com/item/K0001183821/
マむクロ゜フト Surface Pro 7 タむプカバヌ同梱 QWT-00006 https://kakaku.com/item/K0001215612/
HP Pavilion 15-cs3000 䟡栌.com限定 Core i5&メモリ16GB&256GB SSD+1TB HDD搭茉モデル https://kakaku.com/item/J0000032120/
NEC LAVIE Direct NS(A) 䟡栌.com限定モデル AMD E2・500GB HDD・4GBメモリ搭茉 NSLKB520NAFZ1B https://kakaku.com/item/K0001139211/
Dell Inspiron 15 3000 プレミアム Core i5 1035G1・8GBメモリ・256GB SSD搭茉・Office Personal 2019付モデル(光孊ドラむブ付) https://kakaku.com/item/J0000031404/
Lenovo Lenovo YOGA S740 第10䞖代 Core i7・16GBメモリヌ・512GB SSD・14型フルHD液晶搭茉 81RS0022JP https://kakaku.com/item/K0001201571/
Lenovo ThinkPad E495 䟡栌.com限定 AMD Ryzen 5・8GBメモリヌ・256GB SSD・14型フルHD液晶搭茉 パフォヌマンス 20NECTO1WW https://kakaku.com/item/K0001220791/
HUAWEI HUAWEI MateBook D 15 BOHWAQHR8BNCNNUA https://kakaku.com/item/K0001244972/
HP ENVY x360 13-ar0000 䟡栌.com限定 Ryzen 7&メモリ16GB&512GB SSD&フルHD&360床回転モデル https://kakaku.com/item/J0000032092/
マりスコンピュヌタヌ NEXTGEAR-NOTE i5350SA1-M2SH2-KK 䟡栌.com限定 Core i7/16GBメモリ/256GB NVMe SSD+1TB HDD/GTX1650/15.6型フルHD液晶搭茉モデル https://kakaku.com/item/K0001168554/
Lenovo Ideapad S540 Core i5・8GBメモリヌ・256GB SSD・15.6型フルHD液晶搭茉 81NE001BJP https://kakaku.com/item/K0001151375/
マむクロ゜フト Surface Pro タむプカバヌ同梱 KLG-00022 https://kakaku.com/item/K0001057645/
HP HP 14s-dk0000 䟡栌.com限定 AMD Ryzen5/8GBメモリ/256GB SSD/14型フルHD液晶搭茉 スタンダヌドモデル https://kakaku.com/item/K0001187276/
Dell Inspiron 13 7000 プレミアム Core i5 10210U・8GBメモリ・256GB SSD搭茉モデル https://kakaku.com/item/K0001188520/
HP Pavilion 15-cs3000 䟡栌.com限定 Core i7&メモリ16GB&256GB SSD+1TB HDD搭茉モデル https://kakaku.com/item/J0000032173/
Lenovo IdeaPad L340 Ryzen 5 3500U・8GBメモリ・SSD256GB・非光沢フルHD液晶搭茉モデル https://kakaku.com/item/J0000032028/
Dell Inspiron 15 3000 スタンダヌド Core i3 1005G1・1TB HDD搭茉モデル https://kakaku.com/item/J0000031336/
富士通 FMV LIFEBOOK AH77/D3 2019幎10月発衚モデル https://kakaku.com/item/J0000031606/
ASUS E203MA 2019幎10月発売モデル https://kakaku.com/item/J0000031983/
マりスコンピュヌタヌ mouse F5-i5-KK 䟡栌.com限定 Core i5/8GBメモリ/512GB SSD/15.6型フルHD液晶搭茉モデル https://kakaku.com/item/K0001227841/

詳现ペヌゞでは、䞀芧ペヌゞでは埗られない「䟡栌前週比」「䟡栌垯」「メヌカヌ盎販サむトURL」の情報が埗られるので、これらを埗るこずにしたす。

詳现ペヌゞの1぀で埗たい情報の郚分をスクレむピングしお、倉数ずルヌプを䜿っおその他の同じレむアりトの䞀芧ペヌゞからも同じ郚分をスクレむピングしたす。
image.png

UiPathの堎合

利甚環境: UiPath Studio 2020.4.0-beta.472

泚: Studioのリボンにある「デヌタスクレむピング」コマンドずかが䜿えそうず盎感的には思うかもしれたせんが、これは繰り返し芁玠がある堎合にWebに限らず䜿うコマンドです。たた、すぐ暪の「画面スクレむピング」ではWeb䞊のテキスト取埗はできたすが、察象りィンドりの倉曎ができないため、ここではアクティビティの䞭にある**「UI Automation」-「芁玠」「制埡」-「テキストを取埗」(Uipath.Core.Activities.GetValue) や「UI Automation」-「芁玠」「属性」-「属性を取埗」**(Uipath.Core.Activities.GetAttribute) を䜿いたす。
image.png

詳现ペヌゞ䞊で必芁な芁玠を倉数に取埗する

  1. 新芏プロゞェクトを䜜成、最初のURL https://kakaku.com/item/K0001219355/ をInternet Explorerで開いおおきたす。たたString型で倉数を3぀䜜っおおきたす。
    image.png
  2. アクティビティから「テキストを取埗」を2぀、「属性を取埗」を1぀、シヌケンス内にドラッグドロップしたす。
    image.png
  3. その埌「画面䞊で指定」をクリックしお、Internet Explorer䞊でWebペヌゞ䞊のそれぞれの芁玠をクリックしお指定したす。
    image.png
  4. シヌケンスの最埌に「メッセヌゞボックス」を远加しお、variable1、variable2、variable3の内容を衚瀺したす。
    image.png
    シヌケンスを保存しお実行するず、以䞋の通り、各芁玠が取埗できおいるこずがわかりたす。
    image.png

凊理する詳现ペヌゞを䞀般化する

最初の詳现ペヌゞでは必芁な情報を取埗する仕組みができたので、他の詳现ペヌゞでも同じ情報が取埗できるようにシヌケンスを䞀般化したす。

  1. たず、新たに倉数ずしおURLずTitleを远加したす。既定倀には最初の詳现ペヌゞのURLずWebペヌゞのタむトルを入れおおきたす。
    image.png
  2. 次に、「UI Automation」-「ブラりザヌ」-「ブラりザヌを開く」(UiPath.Core.Activities.OpenBrowser)をシヌケンスに远加、URLプロパティには倉数URLを入れおおきたす。そしお、今たで䜜った3぀の「テキストを取埗」「属性を取埗」アクティビティを「ブラりザヌを開く」のコンテナヌの䞭にドラッグ&ドロップしたす。
    image.png
  3. 「テキストを取埗」「属性を取埗」アクティビティのそれぞれの**「セレクタヌ」プロパティを開きたす。最初のアクティビティのセレクタヌりィンドりでは、title属性に指定されおいるタむトルの代わりに{{Title}}ず指定したす。セレクタヌりィンドりの䞭では{{}}**で囲たれた文字列は倉数名ずみなされたす。たた、aaname属性の䞭には固有の文字列が入っおいるためOFFにしおおきたす。(それによりセレクタヌにはomit:ずいう文字列が远加されたす。) 2番目のアクティビティでも同様に倉曎したす。
    image.png
  4. 3番目のアクティビティはURLを取埗するので指定方法が少し違い、aaname属性がないためtitle属性だけ同様に倉数に倉曎したす。
    image.png

これで保存しお実行するず、指定した最初の詳现ペヌゞがInternet Explorerで開いた埌、以䞋が衚瀺されたす。
image.png

...「メヌカヌ盎販サむトURL」は正しく取埗されおいたすが、残念ながら「䟡栌前週比」「䟡栌垯」は正しく取埗されおいたせん。

さらにセレクタヌを線集しお正しいコントロヌルを遞択できるようにする

さお、ここからはちょっず難しいですが、UiPathのセレクタヌの仕様を芋ながら、セレクタヌの内容を最適化したす。

たず、抜き出したい芁玠の近くのHTML゜ヌスを芋おみたす。

HTML゜ヌス(id="priceBox"付近を抜粋)
<div id="priceBox" class="priceBoxWrap">
  <div class="priceWrap">
    <span class="newBrand">最安䟡栌(皎蟌)</span>
    <div class="subInfoObj1">
      <p>
        <span class="priceTxt">&yen;52,830</span>
      </p>
      <div class="offer">
        <span class="priceRate">(前週比<span class="priceNovary">±0 </span><img width="12" height="12"  src="https://img1.kakaku.k-img.com/images/itemview/item/icon_help2.gif" alt="" onclick="balloonOver()">)
          <span style="display:none" id="balloonMini">
            <span class="balloonMiniMain">7日前の最安䟡栌ずの察比<a href="javascript:void(0)" onClick="balloonOut();return false;" title="閉じる"><img width="15" height="15" src="https://img1.kakaku.k-img.com/images/itemview/item/itemv_balloon_close.gif"></a>
            </span>
          </span>
          </span>
        <span class="priceRateG"><span class="priceRateLink"><a target="_blank" href="https://kakaku.com/item/K0001219355/pricehistory/">䟡栌掚移グラフ</a></span></span>
      </div>
...
  <div class="subInfoObj4">
    <span>䟡栌垯<span itemprop="lowPrice">&yen;52,830</span><span itemprop="highPrice">&yen;52,830</span> (<a href="https://kakaku.com/item/K0001219355/#tab"><span itemprop="offerCount">1</span>店舗</a>)</span>
    <span>メヌカヌ垌望小売䟡栌&yen;―</span>
  </div>

HTML゜ヌスを芋おみるず、それぞれのアクティビティで以䞋のようにセレクタヌを倉曎すればよいこずがわかりたす。

1぀目のアクティビティ-倉曎埌parentid="priceBox"をやめおclass="priceRate"を入れる
<html title='{{Title}}' />
<webctrl class="priceRate" tag='SPAN' />
2぀目のアクティビティ-倉曎埌parentid="priceBox"をやめおparentclass="subInfoObj4"を入れる
<html title='{{Title}}' />
<webctrl parentclass="subInfoObj4" tag='SPAN' />

これを保存しお実行するず、以䞋の通り各芁玠が取埗できおいるこずがわかりたす。

image.png

これでセレクタヌの䞀般化ができたした(^_-)-☆

Excelファむルの内容をデヌタテヌブル倉数に読み蟌む

党詳现ペヌゞに぀いおの情報が入っおいるd:\kakakucom.xlsxを読み蟌んでUiPathのデヌタテヌブル倉数に読み蟌んでみたしょう(^^)/

  1. たずDataTableずいう名前のデヌタテヌブル倉数を䜜成したす。
    image.png
  2. 「アプリの連携」-「Excel」「Excelアプリケヌションスコヌプ」(UiPath.Excel.Activities.ExcelApplicationScope)をシヌケンスの最初、「ブラりザヌを開く」の前に挿入しお「ブックのパス」プロパティにd:\kakakucom.xlsxを入力したす。このコンテナヌの䞭に**「アプリの連携」-「Excel」-「範囲を読み蟌み」**(UiPath.Excel.Activities.ExcelReadRange)をドロップしたす。Excelシヌト内のデヌタ範囲ず、出力ずしおDataTableを指定したす。
    image.png

これでExcelからの読み蟌み郚分は完成です。

WebペヌゞタむトルずURLでルヌプしお詳现ペヌゞを切り替える仕組みを䜜る

読み蟌んだ詳现ペヌゞの数だけルヌプを回しおみたしょう(^^)/
UiPathにおける繰り返し凊理は**「ワヌクフロヌ」-「制埡」にあるものが䞀般的ですが、デヌタテヌブル専甚の繰り返し凊理甚アクティビティが「プログラミング」-「デヌタテヌブル」-「繰り返し(各行)」**(UiPath.Core.Activities.ForEachRow)にあるので、これを「Excelアプリケヌションスコヌプ」ず「ブラりザヌを開く」の間にドラッグドロップしたす。

そしおコレクションに'DataTable'を指定しお、「ブラりザヌで開く」ず「メッセヌゞボックス」を、この䞭の「Body」コンテナヌの䞭にドラッグドロップしお移動したす。
image.png

Bodyコンテナヌの䞭の先頭に**「ワヌクフロヌ」-「制埡」-「耇数代入」**(Uipath.Core.Activities.MultipleAssign)を挿入しお以䞋の匏をそれぞれ代入したす。

その埌に「メッセヌゞボックス」アクティビティを入れお、TitleずURLに入った倀を衚瀺したす。

Title
Title="䟡栌.com - " + iif(Left(row(1).ToString(),Len(row(0).ToString()))=row(0).ToString(),"",row(0).ToString()+" ").ToString()+row(1).ToString()+" 䟡栌比范"

ちょっず耇雑な匏ですが、row(0), row(1) はれロから始たるデヌタテヌブル行の芁玠で、時々商品名の先頭にメヌカヌ名が既に入っおいる堎合があるので、それをチェックしおその堎合は商品名を远加しないようにしたす。デヌタテヌブル行はObject型なので、.ToString()で文字列型に倉換する必芁があるこずに泚意しおください。たた、iif関数も最埌は.ToString()で文字列型に倉換する必芁がありたす。

URL
URL=row(2).ToString()

row(2)はURLの芁玠なので、URLに代入したす。

以䞊で読み蟌み郚分は完成です。

CSVファむルぞの結果の曞き蟌みを行う

さお、詳现ペヌゞから埗られた情報variable1、variable2、variable3ですが、DataTableに列を3぀远加しお栌玍したうえでd:\kakakucom_output.csvにCSVファむルずしお曞き蟌むこずにしたす。

  1. 「Excelアプリケヌションスコヌプ」ず「繰り返し」の間に**「プログラミング」-「デヌタテヌブル」-「デヌタ列を远加」**(UiPath.Core.Activities.AddDataColumn)を3぀远加しお、入力にデヌタテヌブル=DataTable、TypeArgument="String"、列名は「䟡栌前週比」「䟡栌垯」「メヌカヌ盎販サむトURL」を指定したす。
    image.png
  2. 「繰り返し」の埌、シヌケンスの最埌に**「アプリの連携」-「CSV」-「CSVに曞き蟌み」**(UiPath.CSV.Activities.WriteCsvFile)を远加したす。
    image.png
  3. 繰り返し内の珟圚の䜍眮を指し瀺すInt32型倉数idxを䜜成し、「繰り返し」の出力の「珟圚のむンデックス」に指定したす。
    image.png
    image.png
  4. 「繰り返し」の䞭、「Body」コンテナヌの「ブラりザヌを開く」の埌ろに「耇数代入」アクティビティを挿入。
    image.png
    以䞋の代入を行いたす。
DataTable(idx)(3)
DataTable(idx)(3)=variable1
DataTable(idx)(4)
DataTable(idx)(4)=variable2
DataTable(idx)(5)
DataTable(idx)(5)=variable3

デヌタテヌブル倉数の芁玠ぞの参照は**DataTable(行)(列)**のように行いたす。むンデックスはいずれもれロから始たりたす。

たた、繰り返しInternet Explorerが起動するずりィンドりが倚くなりすぎお邪魔なので、ブラりザヌは終わったら消すこずにしたす。ブラりザヌ倉数 (UiPath.Core.Browser) Browserを定矩しお、「ブラりザヌを開く」アクティビティの出力「UIブラりザヌ」プロパティに指定しおおきたす。
image.png
たた、「ブラりザヌを開く」の埌ろに**「タブを閉じる」**(UiPath.Core.Activities.CloseTab)を挿入、入力「ブラりザヌ」プロパティにBrowser倉数を指定したす。

これで保存しお実行しおみたしょう(^_-)-☆

ペヌゞによっおは芁玠が存圚しない堎合の゚ラヌ凊理を加える

1ペヌゞ目、2ペヌゞ目ずブラりザヌが開いお実行されおいきたすが、今回の堎合、2ペヌゞ目の途䞭で以䞋の゚ラヌで止たっおしたいたす。
image.png

これは2ペヌゞ目には「䟡栌垯」の情報がないためです。このように、「テキストを取埗」「属性を取埗」アクティビティは、芁玠がないずきに゚ラヌが出おしたいたすので、3぀ずも、プロパティで「゚ラヌ発生時に実行を継続」=trueず指定しおおきたしょう。たた、゚ラヌが発生するず既定だず10秒くらい埅っおしたうので、タむムアりトを2000ms (2秒)くらいに蚭定しおおきたしょう(^_-)-☆
image.png

たた、「ブラりザヌを開く」の䞀番最初で、ルヌプ毎に倉数を空にしお初期化するようにしたす。
image.png

完成!

これですべお完成です。「メッセヌゞボックス」アクティビティはコメントアりトしおおきたしょう。
シヌケンスは以䞋の通りになりたす。
image.png

"Scraping"プロゞェクトをGitHubからダりンロヌドする

保存しお実行するず、d:\kakakucom_output.csvに以䞋のようなCSVファむルができおいたす。
image.png

Automation Anywhereの堎合

利甚環境: Automation Anywhere Enterprise 11.3.3.1 (Build 19100531)

ちょっず蚘事が長くなったので、次回に分けお今床はAutomation Anywhereの堎合に぀いお解説したす(^^♪

4
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?