※当サイトの商品・サービスのリンク先にPRを含みます。

Google Apps Script 時短ツール

【簡単自動化】GASでWebスクレイピングをする方法

お仕事おつにゃッス🐈

文系未経験から社内SEになった、あっきょ(@daily_code_JP)です!

インターネット上で公開されているデータを自動で収集できると便利ですよね?

また、いちいちデータをコピペする作業は面倒くさいですよね。この記事ではそのお悩みを、スプレッドシートとGASで解決します。

あっきょ
この記事は以下で悩んでいる人におすすめ!

  • データ収集を自動化したい
  • コピペする時間を減らして作業を楽にしたい
  • JavaScriptを学んだけど何をつくればいいかわからない

誰でも無料で簡単にできますので、お気軽に学んでいきましょう!

高度なスクレイピングを学べるスクール3選

インターネット・アカデミーは実践的なノウハウが身に付くスクール。

  • Pythonでスクレイピングの基礎から学習できる
  • Web技術の世界最高位の団体「W3C」のメンバー
  • 24時間いつでも動画を見放題

日常業務を効率化して残業を減らしたい人におすすめです。

Winスクール は法人研修も行う信頼性の高いスクール。

  • 全国50以上の教室で対面受講できる
  • 年間に1.7万人以上が受講
  • Pythonプログラミング講座でスクレイピングを習得

プロの講師から直接学びたい人におすすめです。

Aidemyは社会人が選ぶDX人材育成サービスNo.1の実績。

  • 受講料70%オフの教育給付金対象講座
  • 運営企業は東証グロース上場
  • AIアプリ開発講座で高度なスクレイピング

AIや機械学習も専門的に学ぶならおすすめです。

GASでWEBスクレイピングするイメージ

GASでYahoo!ニュースの経済項目をスクレイピング。

コピペの繰り返すことなく、1クリックですべての作業が終わります。

今回は記事のタイトルのみを抽出してログ出力するようにします。

スクレイピングとは?

サンプルコードを紹介する前にスクレイピングとは何かを解説します。

Web上のデータを自動で取得する技術

スクレイピングとは、WEB上に存在するデータを自動的に取り出して保存する技術です

競合調査や分析など、大規模にデータを処理するときに使用します。

データ収集から保存までの一連の作業を自動化すると手間と作業時間を大いに減らせます。

なので、1クリックで必要な情報をすべて手に入るのがスクレイピングといえます。

スクレイピングで気を付けること

スクレイピングを行うには運営サイトが許可しているかを確かめる必要があります。

サーバーへの過度な負荷や抽出したデータの著作権侵害の可能性があるため

スクレイピングの許可は公開されているYahoo!のrobot.txtを確認します。

記事タイトルを得ること自体は問題なさそうですが、過度にスクレイピングするのは厳禁

Yahoo!のrobot.txt
引用 : Yahoo!

スクレイピングが原因で事件に発展!?

岡崎市立中央図書館
引用 : 岡崎市立中央図書館

過度なスクレイピングで刑事事件になったことがあります。

2010年の岡崎市立中央図書館事件です。

利用者からサイトに接続できないと苦情が相次いでいましたが、とある男性が図書館の蔵書検索システムに自作のクローラを実行して図書情報を取得していたのが原因。

男性はサーバコンピューターの機能を停止させたとして業務妨害で逮捕されてしまいました。

GASの利用者は過度なスクレイピングをしないと信じていますが、便利だからといって使いすぎるのはご法度

他社サービスに迷惑をかけず、robot.txtをしっかりと確認してからスクレイピングしましょう。

GASでWebスクレイピングをする準備

Google Apps Script で日本の株価を取得する準備をします。ファイルは1つ必要です。

必要なファイル

  • Google スプレッドシート ・・・ 株式データの保存と株価のリアルタイム更新

サンプルコードを貼り付ける方法

サンプルコードはGoogle スプレッドシートにコピペ。

上バーの「拡張機能」の中にある「Apps Script」をクリックしてコードを貼り付けます。

GASをスプレッドシートに記入する際の「Apps Script」の表示

Parserライブラリの導入

GASでスクレイピングを行うには「Parserライブラリ」をダウンロードする必要があります。

コードを貼り付けるApps Scriptの左側にある「ライブラリ」をクリックします。

ライブラリの選択

スクリプトIDに1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw」と記入して検索ボタンをクリック。

Parserライブラリの選択

Parserのバージョン8を導入します。確認できたら、追加ボタンを押すと準備は完了です。

Parserライブラリを導入

GASでWebスクレイピングするサンプルコード

GASでWebスクレイピングするサンプルコードを紹介していきます。

解説の項目

  • サンプルコード
  • buildメソッド と iterateメソッドの違い
  • 【質問】コード内のdivやulは何?

サンプルコード

右上にあるマークを押すとコードのコピペが一瞬でできます。

この短いコードでスクレイピングできます。

function getNewsTitle(){
  const url = "https://news.yahoo.co.jp/categories/business"; //スクレイピング先URL
  const html = UrlFetchApp.fetch(url).getContentText(); //fetch通信でサイト内の文章を取得
  const topicsDiv = Parser.data(html).from('<div class="sc-fhiYOA lmAaIt">') .to("</div>").build(); //ul要素を抽出
  const topicsUl = Parser.data(topicsDiv).from('<ul>').to("</ul>").build(); //li要素を抽出
  const topicsA = Parser.data(topicsUl).from('class="sc-btzYZH kitJFB"').to('>').iterate(); //記事タイトルを抽出

   //取得した記事数ぶん、タイトルをログ出力
   for(let i = 0; i < topicsA.length; i++){
    //不必要な文字列を取り除いて記事タイトルを出力
    Logger.log(topicsA[i].replace(/<span class="sc-bYSBpT kVZVlG"|>/g,"").replace('</a',"")); 
  }
}

buildメソッド と iterateメソッドの違い

サンプルコードでは記事タイトルを抽出するのに2つのメソッドを使用。

buildメソッドiterateメソッドの違いは要素を抽出する範囲です。

  • buildメソッド   ・・・ 1番最初の要素のみを抽出
  • iterateメソッド ・・・ 該当する要素をすべて抽出

文字だけではわからないので、以下のコードからli要素を抽出して違いを見ていきます。

function test(){
  const html = '<ul class="season"><li>春</li><li>夏</li><li>秋</li><li>冬</li></ul>';
}

buildメソッド

function test(){
  const html = '<ul class="season"><li>春</li><li>夏</li><li>秋</li><li>冬</li></ul>';
  const data = Parser.data(html).from('<li>').to('</li>').build();

  Logger.log(data); //春を出力
}

1番最初のli要素内にあった「春」のみを出力します。

つまり、先頭の要素だけを抽出します。

iterateメソッド

function test(){
  const html = '<ul class="season"><li>春</li><li>夏</li><li>秋</li><li>冬</li></ul>';
  const data = Parser.data(html).from('<li>').to('</li>').iterate();

  Logger.log(data); //[春,夏,秋,冬]を出力
}

ul要素内のli要素をすべて取得し、その中の文字列をすべて抽出します。

抽出後にdataは配列に変換して、li要素内の文字列を要素として格納します。

【質問】コード内のdivやulは何?

HTMLのイメージ

今回紹介したコードの中には「div」や「ul」などの文字が見られます。

これはHTML(HyperText Markup Language)というWebサイトを作成するために開発された言語で、ページ内の情報を構造化したもの。

スクレイピングでは、この構造化したHTMLを読み取ってタイトルを抽出しています。

HTMLがわかれば、Yahoo!以外のサイトも自動でスクレイピングできるッスよ!
あっきょ

GASでWebスクレイピングするテスト

実際に、スプレッドシートで文字列を検索します。

Apps Scriptの上バーの文字が「getNewsTitle」になっていたら「実行」を押します。

getNewsTitleを実行

「このアプリはGoogleで確認されていません」と表示した場合はこちら

【3分で解決】GASの「このアプリはGoogleで確認されていません」を許可する方法

続きを見る

以下のようにログ出力されたら成功です。

ニュース記事のタイトルをすべて抽出できました。

getNewsTitleの実行結果

【応用】取得したデータをスプシに記入する方法

応用で取得したデータをスプレッドシートに記入して保存できるようにします。

内容はほとんど変わりません。

コメントに「★」がついた2行を追加するだけで実現します。

function getNewsTitle(){
  const sheet = SpreadsheetApp.getActiveSheet(); //★★アクティブ状態のシートを指定★★  
  const url = "https://news.yahoo.co.jp/categories/business"; //URL
  const html = UrlFetchApp.fetch(url).getContentText(); //fetch通信でサイト内の文章を取得
  const topicsDiv = Parser.data(html).from('<div class="sc-fhiYOA lmAaIt">') .to("</div>").build(); //ul要素を抽出
  const topicsUl = Parser.data(topicsDiv).from('<ul>').to("</ul>").build(); //li要素を抽出
  const topicsA = Parser.data(topicsUl).from('class="sc-btzYZH kitJFB"').to('>').iterate();

  //取得した記事数ぶん、タイトルをログ出力
   for(let i = 0; i < topicsA.length; i++){
    //不必要な文字列を取り除いて記事タイトルを出力
    const topic = topicsA[i].replace(/<span class="sc-bYSBpT kVZVlG"|>/g,"").replace('</a',"");
    sheet.getRange(i+1, 1).setValue(topic); //★★i+1番目に文字列を記入★★  
  }
}

実行結果は以下の通り。

Yahoo!ニュースの記事タイトルをスプレッドシートに保存できているのがわかります。

GASのWebスクレイピングでスプレッドシートに保存した結果

高度なスクレイピングを学べるスクール3選

プログラミングで高度なWebスクレイピングのスキルが身に付くスクールを3つ紹介。

プログラミング独学の挫折率は60%近くと高め

エラーを解決できなかったり相談できる人がいなかったりと理由はさまざまです。

モチベを保てる環境を整えたのがスクールで挫折率を1割未満に抑えられます。

そこで、デイコーで調査した82社から厳選して解説します。

データ収集が楽 &スキルアップできるッスよ!
あっきょ
  • インターネット・アカデミー | Pythonでスクレイピング学習
  • Winスクール | ほぼ全国で対面受講できる
  • Aidemy | 東証グロースに上場

インターネット・アカデミー | Pythonでスクレイピング学習

インターネット・アカデミーのトップ画面
引用 : インターネットアカデミー

インターネット・アカデミーは初心者から最短距離でスキルを習得するスクール。

初心者が挫折しないサポートが10個が特徴で以下はその一部。

  • 動画授業が24時間見放題
  • 1年間受講受け放題
  • 技術面の質問ができるチャットサービス
  • 受講生限定のセミナーや交流会
  • 手厚い転職準備サポート&求人紹介

卒業後には未経験からエンジニア転職するキャリアプランも築けます。

Webスクレイピング講座はPythonを用いた高度なスクレイピングスキルを習得。

Seleniumを利用しつつ、会員サイトの自動取得やデータ集計を学びます。

いつもの作業を効率化して残業を減らすならおすすめ。

受講者の8割近くが初心者で学びやすいのがわかるッス!
あっきょ
カリキュラム内容を詳しく紹介 Webスクレイピング講座の詳細
1分で無料カウンセリング予約 公式サイト

Winスクール | ほぼ全国で対面受講できる

Winスクールのトップ画面
引用 : Winスクール

Winスクールは年間に約1,500社の研修に携わるスクールです。

オンラインと対面受講を併用して学習できるのが特徴。

全国に50校ある校舎で少人数教室で担当講師に直接質問できます。

Pythonプログラミング講座では、基礎基本からスクレイピング技術まで幅広く学習。

営業職や事務職などの非エンジニアでも、日常業務を自動化するスキルが身に付きます。

ほぼ全国で対面受講できるのはWinスクール唯一ッス!
あっきょ
学習内容を詳しく紹介 Pythonプログラミング詳細
最短1分で無料カウンセリング予約 公式サイト

Aidemy | 東証グロースに上場

アイデミーのトップ画面
引用 : Aidemy

AidemyはDX時代の新スキルを基礎から学ぶ Python 特化型のプログラミングスクール。

初心者にとって難しい内容でも挫折しないで学べる環境が整っています。

  • 仲間と学べるバーチャル学習室
  • チャットで質問し放題
  • 講師のコードレビュー
  • 1回25分のオンラインカウンセリング
  • オリジナルのポートフォリオ作成支援

転職サポートもあるので、未経験からエンジニアも目指せます。

AIアプリ開発講座では、PythonでオリジナルのAIアプリ開発スキルを習得。

BeautifulSoup​を用いた高度なスクレイピングを学日ます

最新技術で一歩先を目指すビジネスマンにおすすめです。

給付金の受け取り方は公式サイトをチェック!
あっきょ
学習内容を閲覧可能 AIアプリ開発の詳細
1分で無料オンライン相談予約! 公式サイト

おわりに | スクレイピングで楽になろう!

以上がGoogle Apps ScriptでWebスクレイピングをする方法でした。

そのままコピペしたりデータ収集に使ったりしてみましょう。

今回紹介したサンプルコード以外にも、GASでスクレイピングを使うことは可能。

【不安解消】GASでLINEに日本株の1日の値動きを通知

続きを見る

GASで日本の個別株を取得する方法のサムネイル
【便利】GASで日本の個別株の株価を取得する方法

続きを見る

ヒューマンエラーが起きやすく時間がかかる作業をGASに任せましょう。

不明点やスクール選びで悩んでいるならデイコーのお問い合わせまでご連絡を。

あなたのお力になります。

-Google Apps Script, 時短ツール
-, , , , , , , , , , , , , , , ,