「Google Apps Script クローリング&スクレイピングのツボとコツがゼッタイにわかる本」の感想・備忘録

スポンサーリンク

点数

83

感想

Google Apps Scriptの作成方法から、HTMLの取得・解析、POSTデータの送信などが解説されていた。

本書の内容だけで実用的なスクレイピングを行うことはできないと思うが、入門書としては十分な内容だと思う。

Google Apps Scriptとは

  • JavaScriptをベースとした言語。
  • 主にGoogleのアプリケーションを操作するために使われる。
  • DOM操作などのAPIはない。
  • Googleのクラウド上で動作する。
  • 開発はブラウザ上で行う。
  • 実行時間や実行回数に制限がある。
    https://qiita.com/kakakaori830/items/84a7dcba2d6119ed320a
  • スクリプトまたは関数をライブラリとして作成すると再利用可能となる。
  • OAuth認証, Slack, スクレイピングなどはライブラリとして公開されている。
  • Googleのアプリケーションとの連携はサービスとして用意されている。

Google Apps Scriptのプロジェクト

・プロジェクトはコンテナバインドプロジェクトとスタンドアロンプロジェクトの2種類がある。

コンテナバインドプロジェクト

・スプレッドシートやドキュメントに紐づく。

スタンドアロンプロジェクト

  • 独立したアプリ。
  • URLでアクセス。

Google Apps Scriptのトリガー

  • トリガーにはシンプルトリガーとインストーラブルトリガーの2種類がある。

シンプルトリガー

  • 以下の6種類
    • onGet
    • onPost
    • onOpen,
    • onEdit
    • onSelectionChange
    • onInstall

インストーラブルトリガー

  • 特定の時間に起動、など。
  1. GoogleDrive > 新規 > その他 > Google Apps Script
  2. 以下を入力
    function myFunction() {
    console.log('hello')
    }
  3. プロジェクトを保存
  4. 実行
    実行ログにログが出力される。
  5. デプロイ > 新しいデプロイ > 種類の選択 > ウェブアプリ
    公開する場合は「アクセスできるユーザー」を「全員にする」。

「ライブラリの追加」から以下のIDを入力し、Parserライブラリを追加する。

1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw

コード

const getHtml = ()  => {
  const content = UrlFetchApp.fetch('https://xxx.xx').getContentText('utf-8')
  const title = Parser.data(content).from('<title>').to('</title>').build()
  console.log(title)
  const urls = Parser.data(content).from('<a href="https://').to('"').iterate()
  console.log(urls)
  const content2 = UrlFetchApp.fetch(`https://${urls[0]}`).getContentText('utf-8')
  const title2 = Parser.data(content2).from('<title>').to('</title>').build()
  console.log(title2)
}
  • build()は最初にヒットしたもの、iterate()は配列、を返す
  • from, toは完全一致なので、上記の例ではhrefの前にidやclassがあるとヒットしない
  • fetchメソッドの第2引数でmethodやpayloadを指定することができる。
const login = () => {
  const content = UrlFetchApp.fetch('https://xxx.xx/login', {
    method: 'POST',
    payload: {
      login_id: 'hoge',
      password: 'hogehoge'
    },
    followRedirects: true
  }).getContentText('utf-8')
  console.log(content)
}
const putSpreadSheet= ()  => {
  const sheet = SpreadsheetApp.openById('xxxxxxxxxxxxxxx').getSheetByName('Google App Script')
  sheet.getRange(1, 1).setValue('これはGASからsetValueで入力されました。')
  sheet.getRange(1, 2, 1, 3).setValues([['これはGASからsetValueで入力されました。', 'これはGASからsetValueで入力されました。']])
}
  • スプレッドシートのIDはURLの「/d/xxx/edit」のxxxの部分
  • 行番号と列番号は1から始まる
  • getRangeメソッドは引数指定方法が4種類ある
    • getRange(行番号, 列番号)
    • getRange(行番号, 列番号, 行数)
    • getRange(行番号, 列番号, 行数, 列数)
    • getRange(“A1:E10”)
  • setValuesメソッドの引数は二次元配列
  1. スプレッドシート > 拡張機能 > Apps Script、で以下を作成
    function muliple100(x) {
    return x * 100
    }
  2. セルに=muliple100(2)を入力

コメント