【GAS】ログインが必要なWebページをスクレイピングする方法

Google Apps Script

GAS界隈ではV8ランタイムがサポートされたのがホットな話題になっていますね。
このブログの過去記事も(気が向いたら)書き直すか、、

さて、今日はログインが必要なページをスクレイピングする方法について書いていこうと思います。

いきなりコードです

まぁまるっきりダミーコードですが。
適宜フォームのデータなどを書き換えれば使えるようになっていると思います。

function routine() {
  const url = 'https://example.com/login';
  const contentUrl = 'https://example.com/content'
  const cookie = login(url);
  const content = getContent(contentUrl, cookie)
}

function login(url) {
  const formData = { //これは一例です
    'email': EMAIL,
    'password': PASS
  }

  const options = {
    "method": "POST",
    "payload": formData,
    "followRedirects": false
  };

  const response = UrlFetchApp.fetch(url, options);

  return response.getHeaders()["Set-Cookie"]; // cookie
}

function getContent(url, cookie) {
  const headers = { 'Cookie': cookie }; 

  var options = {
    method: 'GET',
    headers: headers,
    followRedirects: false,
  };

  const response = UrlFetchApp.fetch(url, options);

  return response.getContentText();
}

一つ一つ見ていきましょう。

routine関数について

このコードの起点はroutine関数になります。
動きとしては、login関数からCookieを頂いて、そのCookieを使ってどこかのサイトの内容を取得するといったことを想定しています。

login関数について

この関数で、ログインをした後のCookieの情報を取得することを想定しています。
Developer Consoleを開きながら、実際にログインしたときのhttpリクエストの内容やメソッド(大抵はPOSTだと思いますが)、レスポンスヘッダの内容などを読み取り、適宜内容を書き換えて使います。

getContent関数について

Cookieを頂けたら、あとはちょろいですね。
httpリクエストを発行する際に、ヘッダにCookieの情報を付与してあげれば良いだけです。

あとがき

GASでのログインは結構お手軽にできるので、ハック精神がくすぐられますね!

タイトルとURLをコピーしました