【GAS】初めてのスクレイピング 〜会社の株価を取得〜


ある株価の情報取得をスクレイピングで自動化する

  • ターゲット企業: Google

設計

  1. 株価を取得するURLを定義
  2. 株価を格納しているタグを見つける
    1. もし存在すればタグ直後にある数字をSpreadSheetのセルに入力
    2. もしなければ何もしない

GASの記述

getStockVal.gs

function getValOfStack() {
  // データ取得するURLを定義
  const url = "https://stocks.finance.yahoo.co.jp/us/chart/GOOGL";

  // 取得した株価を出力するBookを定義
  const book = SpreadsheetApp.getActiveSpreadsheet();

  // 出力先のBookのシートを定義
  const sheetData = book.getSheetByName("シート1");

  // APIを用いて指定したURLにアクセスし、とりあえず全部取ってくる
  const res = UrlFetchApp.fetch(url);

  // 受け取った情報をUTF-8のテキストとして加工
  var html = res.getContentText('UTF-8');

  // 今回株価が入っているタグ(<td class="stoksPrice">1234</td>)みたいになっている
  const targetTag = '<td class="stoksPrice">';

  // タグが存在しているか確認(indexOfは見つからなかったら-1を返す)
  const index = html.indexOf(targetTag);

  // もし見つかればターゲットタグ以降を抜き出す
  if (index !== -1) {
    // indexは、見つけば場所を与える。ターゲットタグ分の文字列を与えてsubstringで切り取る
    var html = html.substring(index + targetTag.length);
    // 今htmlは(1234</td>......)となっている
    // 直近の閉じタグを見つける
    var index = html.indexOf('</td>');
    // indexは5を返す。初めて</td>が見つかるのは5文字目だから
    if(index !== -1) {
      // (1234</td>)から、1番目の文字から4番目までをセルにセット
      // substringは(第一引数 <= x < 第二引数)のようだ。
      sheetData.getRange(2, 2).setValue(html.substring(0, index));
    }
  }
}

SpreadSheet側

B2以外はとりあえず手動で記入