nxm83521
@nxm83521

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Power Automate Desktopを使ったwebサイトからの情報収集について

解決したいこと

複数の企業webサイトから、ニュースリリースを収集し、excelに転記する
ノーコードツールとしてPADを使い始めたものの、ノーコードの範囲外?なフローな気がしており、知見不足な自分では構築が難航しています。

発生している問題・エラー

webで調べた結果、「For Eachアクションを使用して、取得したデータと既存のデータを比較」、「Ifアクションを使用して、重複するデータを除外」という動作が必要なのかな、という感じですが、実装に至る具体的なフロー構築のイメージがつかめていません。

自分で試したこと

発生している問題・分からないこと
〇手段
Power Automate Desktopを使ってwebスクレイピング、データは既存のexcelファイルに出力する

〇困っていること
数日に1回のタイミングでフローを実行したいが、すでに取得済みの記事を重複して取得しないように修正したい。
webスクレイピングでデータを取得し、データテーブルに格納したもののうち、既にexcelに存在するデータについてはexcelへ転記の対象外としたい。

〇これまで試したこと
データテーブルの重複削除、統合を試してみたが、うまくいっていない。

〇代替案について
既存のexcelに対して、webスクレイピングしたデータを一度全部転記し、そこから重複するデータをexcel側の関数やofficeスクリプトを使って消す、という流れも検討しているが、膨大なデータを一度excelへ転記するという流れでよいのか、またexcel側は記事が日々たまっていくため、多くのデータに対して関数を使って処理すると、動作が重くなってしまうことを懸念しています。

〇フロー
①ブラウザを起動
②記事取得したい企業webサイトAを開く
③企業webサイトAから情報を取得、データテーブルに格納
④記事取得したい企業webサイトBを開く
⑤企業webサイトBから情報を取得、データテーブルに格納

・(上記②~⑤)を企業webサイトC、D、E、F・・・と繰り返す(35件前後を想定)

⑥既存のデータが記載されているexcelファイルを開く
⑦開いたexcelファイルの最終行、列を取得(今後のフローでデータを書き込むため)
⑧開いたexcelファイルから、既に取得済みの記事をexcelデータテーブルとして読み込む
⑨上記②~⑤で取得し、データテーブルに格納したデータと、⑦でexcelデータテーブルに取り込んだデータの値(例:3列目、4列目)を比較する。つまりwebから取得したデータを格納しているデータテーブルと、excelから取得したexcelデータテーブルの値を比較する
⑩excelデータテーブルに記載のある値と一致するデータを特定
⑪値がい位置したデータ(⑩)はスキップし、そうでないデータ(新規記事)について、上記⑥で開いたexcelファイルの⑦で取得した最終行、列の箇所からデータを書き込む
⑫excelファイルを上書きして保存
終了

0

3Answer

〇手段
Power Automate Desktopを使ってwebスクレイピング、データは既存のexcelファイルに出力する

〇困っていること
数日に1回のタイミングでフローを実行したいが、すでに取得済みの記事を重複して取得しないように修正したい。
webスクレイピングでデータを取得し、データテーブルに格納したもののうち、既にexcelに存在するデータについてはexcelへ転記の対象外としたい。

この部分を切り分けてみてはどうでしょうか?
1.webスクレイピング、データは既存のexcelファイルに出力する
2.excelに存在するデータについてはexcelへ転記の対象外とする
この部分を
excelに存在するデータについてはexcelから削除する
という形にして、フローを2つ作る

1と2をサブフローで作り、それを動かすメインフローに1と2のサブフローを実行するようにすれば、形は違えどワンクリックで実行できます。
また
excelに存在するデータについてはexcelから削除する
についてはマクロを組み込みPADからマクロの実行に置き換えることで1つのフローで実行可能になります

すべてを一度で終わらせようとするとなかなかうまく行かないので視点を変えてみるのはいかがでしょうか。

1Like

Comments

  1. @nxm83521

    Questioner

    回答ありがとうございます。
    ご指摘のように、一度で終わらせるというのは断念して、フロー毎に区切って考えてみようと思います。

以下のどちらかの方法で可能と思います。
どちらの方法もwebスクレイピングが一番時間が掛かり、重複の削除自体は殆ど一瞬だと思います。

案1.Excelの「重複の削除」機能を使う方法
①企業webサイトの情報をデータテーブルに格納
②「データテーブルをマージする」アクションでWebデータテーブル同士をマージ
③「Excel ワークシートから列における最初の空の行を取得する」アクションか「Excel ワークシートから最初の空の列や行を取得する」アクションで空行取得
④「Excel ワークシートに書き込む」アクションでマージしたWebデータを書き込む
⑤重複の削除をする対象の範囲を選択
*「Ctrl+A」や「UI 要素をウィンドウ内にドラッグ アンド ドロップ」アクションで行選択する等
⑥Excelの「重複の削除」を実行
*「キーを送信する」アクションで{Alt}AM{Tab:5}{Return:2}をキー送信するか「ウィンドウの UI 要素をクリックする」アクションを使う

案2.PADの「重複行を削除する」アクションを使う方法
①取得済みの記事をexcelデータテーブルとして読み込む
*取得欄の設定を「ワークシートに含まれる使用可能なすべての値」か「名前付きセルの値」にすれば最終行、列の取得は不要
②企業webサイトの情報をデータテーブルに格納
③「データテーブルをマージする」アクションでexcelデータテーブルにWebデータテーブルをマージ
*最初のデータテーブル欄の方にexcelデータテーブルを設定
④ ②、③を繰り返す
⑤「データテーブルから重複行を削除する」アクションで重複データを削除
⑥「Excelワークシートに書き込む」アクションでデータを上書き
*書き込む値欄はexcelデータテーブルの変数を設定
*書き込みモード欄を「指定したセル上」にした場合は取得済みの1行目の記事の位置を指定
*②で「名前付きセルの値」を選択している場合は、書き込みモード欄を「名前付きセル」に設定

1Like

Comments

  1. @nxm83521

    Questioner

    回答ありがとうございます。
    webスクレイピングは動作が重くなることを考え、数ページに絞ったので構築後の挙動がおかしくなることもなさそうです。
    引き続き構築作業を行ってみます。
    2パターンを詳細にありがとうございます!

スクレイピングは、サイトの管理者に許可を得ているとか、規約に従って専用の API にアクセスしているとかでなければ、迷惑行為になるかもしれないということは認識してますか?

クローラーを作って某図書館サイトにアクセスしたら業務妨害とかで逮捕された事例もありますので、甘く見ない方がいいと思います。

逮捕までいかなくても、被害が深刻な場合は損害賠償の訴訟を受けるかもしれません。

訴訟までいかなくても、アクセス遮断なら Web サーバーの設定で管理者だけの判断で容易に可能なので、多分に可能性はあると思います。帯域ごと遮断され、多数の利用者が巻き添えを喰らうことになるかもしれません。

回答するのは迷惑行為の手助けをすることになるかもしれないということで、上記の辺りに問題がないことを示してもらえないと回答は得にくいと思います。

0Like

Comments

  1. @nxm83521

    Questioner

    回答ありがとうございました。質問の意図と全く異なる回答且つ釈迦に説法ですが、コメント頂いた労力に感謝申し上げます。

  2. 釈迦に説法です

    あなたが釈迦だって言うの? 思い上がりも甚だしいのでは?

  3. @nxm83521

    Questioner

    投稿の質問に回答できないのならコメント不要です。ご足労ありがとうございました。

Your answer might help someone💌