Google Apps Scriptとcheeriogsで画像とaltをすべて取得する方法

cheeriogsとは

GASで使用可能なHTMLをパースできるライブラリ。

Google Apps ScriptだけだとWebサイトのHTMLをgetContentTextを使用してHTMLをテキストで取得して正規表現で抽出しなければならないため、非常に取得しづらい。

cheeriogsを使用すれば$('title').text()とjQueryようなコードで簡単に取得できる。

cheeriogsを使用するには

スクリプトエディタでリソース => ライブラリを選択してAdd a libraryに「1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0」を追加したあと、最新バージョンを選択して保存を押せば使えるようになる。

スクリプトエディタのリソース => ライブラリからcheeriogs(Cheerio)を追加

GASでサムネイル画像とaltを取得

Google Apps Scriptで画像とaltを取得する場合は以下のようなコードになる。

今回サンプルとして総務省のWebサイトを利用したためgetContentText('shift-jis')となっているが、UTF-8であればgetContentText()で問題ない。

画像のsrcは絶対パスではなく相対パスの可能性もあるため、IMAGE関数で画像を表示できるように相対パスは絶対パスにする必要がある。

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet()
  const url = sheet.getRange('B1').getValue()
  const content = UrlFetchApp.fetch(url).getContentText('shift-jis')
  const $ = Cheerio.load(content)
  const $img = $('img')
  const domain = url.split('/')[2]
  sheet.getRange("A2:C1000").clearContent();
  
  if ($img.length) {
    $img.each((i, v) => {
      const src = $(v).attr('src')
      const srcUrl = /^https:/.test(src) ? src : 'https://' + domain + src
      sheet.getRange(i + 2, 1).setValue($(v).attr('src'))
      sheet.getRange(i + 2, 2).setFormula('=IMAGE("' + srcUrl + '")')
      sheet.getRange(i + 2, 3).setValue($(v).attr('alt'))
    })
  } else {
    sheet.getRange(2, 1).setValue('imgタグは存在しません。')
  }
}
Google Apps Scriptとcheeriogsで画像とaltをすべて取得する方法

Google Apps Scriptで画像とaltを取得するサンプル