質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.33%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Power Automate Desktop

Power Automate Desktopとは、Microsoft Power Automateの一つ。Windows上で行うキーボードやマウス操作などの組み合わせをコードなしで自動化できます。さらにPythonスクリプトの実行やAI機能連携を始め、機能も豊富です。

Q&A

解決済

1回答

161閲覧

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

nxm83521

総合スコア2

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Power Automate Desktop

Power Automate Desktopとは、Microsoft Power Automateの一つ。Windows上で行うキーボードやマウス操作などの組み合わせをコードなしで自動化できます。さらにPythonスクリプトの実行やAI機能連携を始め、機能も豊富です。

0グッド

0クリップ

投稿2025/01/16 00:56

実現したいこと

〇やりたいこと
複数の企業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ファイルを上書きして保存
終了

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

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

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

⑨~⑪が問題の箇所だと思いますので以下がヒントになれば。
(突貫工事ですのでもっとスマートなやり方があるかもしれませんが。)
↓をPADの新規フローにコピペすればそのまま動かせるかと思います。

Variables.CreateNewDatatable InputTable: { ^['Column1', 'Column2'], [$'''001''', $'''AAA'''], [$'''002''', $'''BBB'''], [$'''003''', $'''CCC'''] } DataTable=> DataTable Variables.CreateNewDatatable InputTable: { ^['Column1', 'Column2'], [$'''002''', $'''BBB'''], [$'''004''', $'''DDD'''], [$'''005''', $'''EEE'''] } DataTable=> DataTable2 Variables.CreateNewDatatable InputTable: { ^['Column1', 'Column2'], [$'''''', $''''''] } DataTable=> DataTable3 Variables.DeleteRowFromDataTable DataTable: DataTable3 RowIndex: 0 LOOP FOREACH CurrentItem2 IN DataTable2 SET NewVar TO $'''false''' LOOP FOREACH CurrentItem IN DataTable IF CurrentItem[0] = CurrentItem2[0] THEN SET NewVar TO $'''true''' EXIT LOOP END END IF NewVar = $'''false''' THEN Variables.AddRowToDataTable.AppendRowToDataTable DataTable: DataTable3 RowToAdd: CurrentItem2 END END

ポイントとしては、Excel既存のDataTableと新しく取得したデータのDataTableをループで回し、
行内の要素ごとに比較するところです。
(「For Eachアクションを使用して、取得したデータと既存のデータを比較」、「Ifアクションを使用して、重複するデータを除外」をやりました。)
↑サンプルは1列目を一意の番号としたのでそれのみ比較していますが、
一意の列が無いのであれば列ごとに比較が必要です。

DataTable:Excel上に元々あるデータ
DataTable2:新たに取得したデータ
DataTable3:最終的に書き込むようのデータ(重複排除データ)

投稿2025/01/30 04:47

htk_htk

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nxm83521

2025/02/02 09:35

回答ありがとうございます! 頂いたフローで引き続き作業を行ってみます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.33%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問