earthpg:GAS専門のプログラミングスクール

GASで極める!動的ページのウェブスクレイピングからログイン処理まで徹底解説

動的なページをGASでスクレイピングって、普通のスクレイピングとどう違うんだろ?しかも、ログイン処理まで必要って難しそうで…
猫男
猫男
catman
catman
心配無用さ、catmanがGASを使ったスクレイピングの極意を教えてやる。まずは基本からだ。

GASで始めるウェブスクレイピングの基本

スクレイピングを始めるには、まずGASの基本的な機能を理解しよう。

GASでの基本的なスクレイピング構造

GASでは、UrlFetchAppを活用してウェブページのHTMLを取得できる。以下がその基本形だ。

function fetchHtml(url) {
  const response = UrlFetchApp.fetch(url);
  return response.getContentText();
}

✅ このスクリプトは指定したURLのページを取得し、その中身をテキストとして返す。

動的ページをスクレイピングするためのGASテクニック

動的ページはJavaScriptで構築されるため、静的なHTMLだけを取得しても十分ではない。ここで、HTMLParserを活用する。

function parseHtml(url) {
  const html = fetchHtml(url);
  const $ = Cheerio.load(html);
  return $('title').text();
}

✅ Cheerioライブラリを使用して、取得したHTMLを解析し、特定の要素を選択して抽出する。

Cheerioって聞いたことある!HTMLを解析するのに便利なんだね。
猫男
猫男

ログインが必要なページのスクレイピング

ログイン処理を含むスクレイピングでは、GASでのPOSTリクエスト活用がカギとなる。

GASでのログイン処理の実装

ログインページへのPOSTリクエストを送り、クッキー情報を保持する。

function loginAndFetch(url, username, password) {
  const options = {
    'method': 'post',
    'payload': {
      'username': username,
      'password': password
    }
  };
  const response = UrlFetchApp.fetch(url, options);
  return response;
}

✅ 上記のコードはPOSTリクエストを使用してユーザー認証を行い、セッション情報を得る。

セッションを維持したスクレイピング

一度ログインした後、ページ遷移を行う。

function fetchAfterLogin(sessionUrl) {
  const options = {
    'headers': {
      'Cookie': 'session_id=xxxxx'
    }
  };
  const response = UrlFetchApp.fetch(sessionUrl, options);
  return response.getContentText();
}

✅ ここでは、保持したセッションIDをヘッダに追加して、次のページを取得する。

catman
catman
これでログインが必要なページも自由にスクレイピングできるようになるだろう。次はXPathによる要素選択技を見てみよう。

XPathを用いたGASスクレイピングの応用

XPathはHTMLドキュメントから特定の情報を抽出するための強力なツールだ。

GASでXPathを使う方法

function fetchWithXPath(url, xpathExpression) {
  const html = fetchHtml(url);
  const wrappedHtml = Xml.parse(html);
  const result = XmlService.evaluate(xpathExpression, wrappedHtml).asText();
  return result;
}

✅ XPath式を用いて、HTMLから特定の要素を抽出するために役立つ。

練習問題

次のサイトをGASでスクレイピングして、ページタイトルをコンソールに出力するスクリプトを書きましょう。

解答・解説

function exampleScrape(url) {
  const html = fetchHtml(url);
  const $ = Cheerio.load(html);
  Logger.log($('title').text());
}

✅ このスクリプトでは、指定したURLのページタイトルを抽出してログに出力している。

これなら自分でも試せそう!スクレイピング技術って面白いね。
猫男
猫男
catman
catman
その意気だ。これからもGASを使いこなして、多くの情報を自分のものにしていくといい。