見出し画像

GASで株価検索急増企業を毎日取得するスクリプトを作ったよ!

はじめてのGASで自動処理のスクレイピングを作りました!記念すべき記事笑 ふー。ちかれた。


はじめに

ほんとうに、ChatGPTってすごいですね!できました。
先日、スプレッドシートが便利だったので自分でスクリプトを組むことを中断した記事はこちら。

記事にも、たくさんLikeをいただいてうれしいです!けど、できなかったことが悔しいので、GASでスクリプトを作成しました!
ずっとChatGPTに聞いてスクリプトをもらって、伝えて、修正して、の繰り返しだったので、ChatGPTが作ってくれたようなものですけど。

情報元webページ

・データ取得したかったページは日経の株価検索急増ランキング。
↓こちら。

できたスクリプトはこちら

yyyy-mm-ddでシートを作成し、その日ごとのシートに記載をしていくようにしています。

複数のシートを解析していけば、推移なども取れたり、傾向も取れていくのかもしれませんね。

function scrape() {
  // 該当ページURLを取得
  const url = "https://www.nikkei.com/markets/ranking/page/?bd=accessup";
  let today = new Date();

  // スプレッドシートにシートを作成する日付のyyyy-MM-ddでシートを作成
  const date = Utilities.formatDate(today, "JST", "yyyy-MM-dd");
  const sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(date);

  // 該当ページからデータを取得
  const response = UrlFetchApp.fetch(url);
  const text = response.getContentText();

  const reCompanyCode = /<td><a href="[^"]+" title="[^"]+">(\d+)<\/a><\/td>/g;
  const reCompanyName = /<td class="alignL whitespace"><a href="[^"]+" title="[^"]+">([^<]+)<\/a><\/td>/g;

  let match;
  let td1 = [];

  while ((match = reCompanyCode.exec(text)) !== null) {
    const companyCode = match[1];
    if (reCompanyName.exec(text) !== null) {
      const companyName = RegExp.lastMatch.match(/>([^<]+)<\/a>/)[1];
      td1.push([companyCode, companyName]);
    }
  }

  // データをスプレッドシートに転記
  for (let i = 0; i < td1.length; i++) {
    const companyCode = td1[i][0];
    const companyName = td1[i][1];

    // スプレッドシートにデータを転記
    sheet.getRange(i + 1, 1).setValue(companyCode);
    sheet.getRange(i + 1, 2).setValue(companyName);
  }
}

トリガー設定

毎日15時~16時で転記するように作成しました。
検索急増ランキングの推移なんで1日1回の取得ではないほうがよいのかもしれませんが、GASの練習ということで。。。

毎日15時過ぎにIRを発表する企業も多いので、翌日株価の傾向との相関性が見れるとしたらよいのかな、などと思いました。

やってみようかな。ってこんなに簡単に相関があったらみんな投資家さんは実行していると思いますが。。。

データの抽出でつまづく

スクレイピングソフトを使っていた経験から、HTMLで指定すればよいと思っていましたが、正規表現で作成しなければうまくデータを抽出できず、苦労しました。

日経のページはきれいに記述されていたと思いますがうまくいかなかったので、ほかのwebサイトではもっと苦労するのだと思います。

結局、証券コードと企業名で別のデータ抽出文を作成してうまくいきました。これもGPTがやってくれたけど。

次の確認事項は、DOM

このスクリプト作成のさなか、GPTが正規表現より、DOMがいいよと教えてくれました。

わたし:正規表現ではなくて、DOMって言っていたっけ、そのほうがよいの?
GPT:はい、DOM(Document Object Model)を利用した方法は、HTMLの解析やスクレイピングにおいて、正規表現よりも適している場合が多いです。DOMベースの解析では、HTML文書がオブジェクトの階層構造として表され、より直感的かつ効率的にデータを取り出すことができます。特に複雑なHTML構造の場合、DOM解析はエラーが少なく、より信頼性が高いです。

Google Apps Script(GAS)では、XmlService を使ってHTMLを解析することができます。XmlService はXMLやHTML文書を解析し、DOMとして操作するための機能を提供します。これを使用することで、特定のタグや属性を持つ要素を簡単に見つけ出し、その内容を抽出することが可能です。

ChatGPT会話より

DOMというのは知らなかったので、勉強したいと思います。

そもそも正規表現ちゃんと勉強していないので、意味が分かっていないのですが、徐々にわかっていくことを願っております!

では、記事へのLikeとフォローをよろしくお願いします~。
いっしょに自動化を学んでいきましょう!

この記事が気に入ったらサポートをしてみませんか?