LoginSignup
5
6

More than 3 years have passed since last update.

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

Posted at

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

  • ターゲット企業: 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以外はとりあえず手動で記入
スクリーンショット 2019-06-02 22.57.47.png

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6