GASでスクレイピングする際のログイン処理

概要

GAS(GoogleAppsScript)を使って、スクレイピングをしたいことがあった。
その際に、ログイン処理があったので調べた際のメモ。

コード

実際のコードは以下の通り。

ログイン処理用の関数

function login() {
  var login_id = "ログインID";
  var login_password = "ログインパスワード";
  var LOGIN_URL = "ログインURL";

  try {
    var options = {
      method: "post",
      followRedirects: false,
      contentType: "application/x-www-form-urlencoded",
      payload: {
        login_id: login_id,
        login_password: login_password,
        save_login_info: '0',
        url: "ここにURL"
      }
    };
    var response = UrlFetchApp.fetch(LOGIN_URL, options);
    var cookies = response.getHeaders()["Set-Cookie"];

    var headers = { 'Cookie' : cookies };
    var options_c = {
      method : "get",
      headers : headers,
      followRedirects: true, //リダイレクトあり
    };
  } catch (e) {
    Logger.log('\n' + JSON.stringify(e, null, '  '));
  };
 return options_c;
}

メイン関数。必要な情報はログイン関数で取得して、それをUrlFetchApp.fetchのオプションとして渡してあげるだけ。

function getData() {
  var options_c = login();
  var searchUrl = "スクレイピングURL"
  response = UrlFetchApp.fetch(searchUrl, options_c);
  var content = response.getContentText("UTF-8");

ログイン時のpayloadで渡す情報はサイトごとに異なるので調べないと分からない。
Chromeの開発者ツールを開いた状態でログインを行い Network > Post(Methodタブを右クリックで表示) > FormData から確認して埋め込む。
サイトによってはログインごとに違う値が埋め込まれることがあるので、その場合この方法での自動ログインは難しいが、あるサイトは上記でログインができるようになった。
あとは受け取ったデータをいい感じに加工してあげるだけ。

GASでログイン処理できるだけで、色々捗りそうなのでこれを使ってちょっとしたツールを作ってきたい。