Docly Child

WebページをスクレイピングしてExcelに書き込む

517 views

この記事では、サイトからスクレイピングした情報を、AUTOROの「各要素を繰り返す」アクションで1行ずつExcelに書き込む方法を紹介します。

※この記事では、AUTOROやスプレッドシート/Excelの各行を繰り返す処理に少し慣れてきた方向けの方法を紹介しています。
スプレッドシート/Excelの繰り返し処理に慣れていない、または初めてだという場合は、こちらの記事もご参照ください。

 ワークフロー設定例

サイトから取得したい情報をスクレイピングし、結果をExcelのワークシートに書き込みます。

◇完成のイメージ画像

実際のブラウザでスクレイピング箇所を確認します。

使用するサイト:

https://autoro.io/case/

今回取得するのは、以下画像の赤枠の部分です。
ScrapePageアクションでは、赤枠部分をまとめて一気に取得することが可能です。

スクレイピングする位置のCSSセレクタを確認します。

今回は1ページ内の全検索結果のうち、記事タイトルとリンク(URL)を取得することが目的です。よって、各検索結果が共通で持っているCSSセレクタを見つけ出す必要があります。

※CSSセレクタ取得の詳細はこちらをご参照ください

確認の結果、今回取得した要素群のCSSセレクタは以下であることが判明しました。

#anchor-archive > ul > li > a

※リンクのURLはa要素に含まれます。

スクレイピング箇所の確認ができたら、実際にスクレイピングアクションを設定します。

  • ScrapePageアクションを設定します。
  • CSSセレクタに2の確認結果を入力します。
  • ブラウザには、OpenBrowserのアウトプットが設定されていることを確認します。
    ※空欄の場合にはOpenBrowserのアウトプットを引継ぐ設定をします。

ScrapePageアクションを設定したら、ワークフローを実行してみましょう。
実行結果を見ると、以下のようなコードが並んでいます。
innerText取得した要素のテキスト
href取得した要素が持っているリンク先URL

今回はスクレイピングの実行結果の中から「innerText」と「href」の2つの項目をスプレッドシートに書き込んでいきます。

今回は、RoboticCrowdのローカルストレージに存在するExcelファイルを取得します。このために、「ファイルを取得する(GetFile)」アクションを使用します。

・「ストレージプロバイダ」に、Local(Robotic Crowd Strage)を指定
・「ファイル」に、任意のExcelファイルを指定

なお、DropBoxやGoogleDriveに保存されているExcelファイルを扱いたい場合は、以下記事をご参照ください。

ファイルID/ディレクトリID

 

取得したファイルから、編集したいシートを選択・取得します。

「シートを選択する(SelectSheet)」アクションを使用して、各パラメータを下記画像のように指定します。

 

シート名が不明な場合

「ワークシート名」に半角数字の1を入力すると、一番左のシートが取得できます。これはシート名が不明な場合に有効な方法となります。

もし左から2番目のシートを選択したい場合は、半角数字の2を入力してください。

なお、取得したいシート名が半角数字のみで構成されている場合は、以下のような記述としてください。

// 取得したいシート名が半角数字の20230201の場合
${String(20230201)}

拡張子が.xlsの場合

ファイルの拡張子が.xlsxではなく.xlsの場合や、xlsxのサイズが大きすぎる場合は、ミドルウェア入力欄に”xlsx”を指定してください。

なお、ミドルウェアにxlsxを指定してしまうと、上記の「一番左のシートを1とする半角数字指定によるシート取得」が不可能となります。

ScrapePageの実行結果はリスト形式になっているので、ForEachの繰り返しを利用して、各要素をスプレッドシートに書き込みを行います。

  • ForEachの繰り返しを設定します。
  • 「繰り返すリスト」には、ScrapePageのアウトプットを紐つけます。
  • 「要素を格納する変数名」には、「data」と入力します。
 

スプレッドシートへの書き込みには、WriteCellアクションを利用します。

  • WriteCellアクションをForEachの中に設定します。
  • worksheetの項目には、Selectsheetのアウトプットを紐つけます。
  • セルラベルにはA2,B2から1段ずつ入力するために、行番号は繰り返し回数を格納する変数に2を足した数字を設定します。詳細は以下記事をご参照ください。

繰り返し回数のカウント

繰り返し回数が1回目 → row(繰り返し回数を格納する変数)には0が格納されているので、row=0+2 → A2
繰り返し回数が2回目 → row(繰り返し回数を格納する変数)には1が格納されているので、row=1+2 → A3
  • 値には、A列に${data.innerText},B列に${data.href}を入力します。
 

シートの編集が終了したため、「ファイルを保存する(SaveFile)」アクションで保存します。

これにより、ローカルストレージにファイルが別名で保存されます。

※上書き保存はできません。

このサンプルではRoboticCrowdのローカルストレージに保存していますが、他のオンラインストレージに保存したい場合は、ストレージプロバイダに他のオンラインストレージのコネクションをご登録ください。

参考:コネクション

参考:Google Driveにファイルを保存する

OneDrive/SharePointに存在するExcelファイルを取り扱いたい場合は、ExcelOnlineに属するアクションをご使用ください。

項目

アクション名
Excel

アクション名
ExcelOnline

備考

ファイルの取得

GetFile

GetWorkbook

 

シートの取得

SelectSheet

なし

Onlineではシート取得と範囲読み込みが1つのアクションで可能

情報の読み込み

ReadCell

ReadRange

GetWorksheetCells

 

情報の書き込み

WriteCell

WriteRange

UpdateWorksheetCells

 

ファイルの保存

SaveFile

なし

OnlineではOneDrive上で自動上書き保存されます(スプレッドシートと同様)

# ブラウザを開く
+open_browser_1:
action>: OpenBrowser
url: 'https://autoro.io/case/'
lang: 'ja-JP'
headless: true
useShadowDomSelector: false
private: false

# スクレイピング
+scrape_page_1:
action>: ScrapePage
browser: +open_browser_1
selector: '#anchor-archive > ul > li > a'
text_only: false
ignoreError: true
private: false

# ファイルを取得
+get_file_1:
action>: GetFile
provider: ''
filename: ''
private: false
meta:
display:

# ワークシートを選択
+select_sheet_1:
action>: SelectSheet
filename: +get_file_1
sheetname: 'シート1'
private: false

# 検索結果について繰り返し
+for_each_1:
for_each>:
data: +scrape_page_1
withIndex: row
_do:

# セルに書き込む
+write_cell_1:
action>: WriteCell
worksheet: +select_sheet_1
celllabel: 'A${row + 2}'
value: ${data.innerText}
private: false

# セルに書き込む
+write_cell_2:
action>: WriteCell
worksheet: +select_sheet_1
celllabel: 'B${row + 2}'
value: ${data.href}
private: false

# ファイルを保存
+save_file_1:
action>: SaveFile
provider: ''
filename: +get_file_1
directory: ''
createPath: false
private: false
meta:
display:
<ForEach>Spreadsheet/スプレッドシート /繰り返し/各要素を繰り返す

このページは役に立ちましたか?