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

Pythonで圧倒!GASと連携したスクレイピング徹底ガイド

Pythonでスクレイピングしてみたいんだけど、GASと連携する方法なんてあるのかな?
猫男
猫男
catman
catman
PythonとGASを組み合わせて使うと、スクレイピングの可能性は無限大。小宇宙だ。

GASとPythonの基本的な連携方法

PythonでGASを呼び出す準備

まず、PythonでGASを呼び出すためには、GAS側でWeb APIを作成する必要がある。

 // GASスクリプトでAPIを作成
function doGet(e) {
  var output = ContentService.createTextOutput();
  output.setMimeType(ContentService.MimeType.JSON);
  output.setContent(JSON.stringify({message: "Hello from GAS"}));
  return output;
}

このスクリプトでは、GASで簡単なAPIを作っている。doGet関数がリクエストに応じてJSON形式の応答を返す。

PythonでGAS APIを呼び出す

次に、PythonからこのAPIを呼び出してみよう。

import requests

url = "https://script.google.com/macros/s/YOUR_SCRIPT_ID/exec"
response = requests.get(url)
data = response.json()
print(data['message'])

このPythonスクリプトでは、requests.getを使ってGASのAPIにアクセスし、JSON形式で取得したデータを表示している。

わかった!GASでAPIを作って、それをPythonで呼び出すのか。これでデータを連携できるね。
猫男
猫男

GASとPython、どちらを選ぶべきか

それぞれの特徴を理解する

GAS : Googleの他のサービスとの連携が強み。GoogleスプレッドシートやGmailと組み合わせて使うのに適している。
Python : 豊富なライブラリと高度なデータ処理能力が強み。スクレイピングなどデータ取得や解析に強い。

両者を組み合わせるメリット

両者の強みを組み合わせることで、多機能かつ効率的なツールを作成できる。

例えば、Pythonでスクレイピングを行い、データをGASで処理することで、Googleスプレッドシートに直接反映させることが可能だ。

PythonとGAS、それぞれに特徴があるんだね。両方使うことで、より柔軟な対応ができそう!
猫男
猫男

GASとPythonの定期実行

GASで定期実行する方法

GASには定期実行機能が備わっているよ。これを使えば、スクリプトを定期的に実行できる。

function createTimeDrivenTriggers() {
  ScriptApp.newTrigger('myFunction')
  .timeBased()
  .everyMinutes(5)
  .create();
}

このスクリプトでは、ScriptApp.newTriggerで時間をベースにしたトリガーを作り、5分ごとにmyFunctionを実行する設定をしている。

Pythonで同様の処理を行うには?

Pythonでスクリプトを定期実行する場合、cronscheduleパッケージを使うことで実行できるようになる。

import schedule
import time

def job():
    print("Running task...")
    
schedule.every(5).minutes.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

このペースでは、schedule.every(5).minutes.do(job)で5分おきにjobを実行するようにスケジュールを設定している。

catman
catman
君はこれで、両方のプラットフォームでのスケジューリングに関しても準備ができたようだな。

練習問題

ネクストステップとして、次の問題に挑戦してみよう。

1. Pythonでお好きなWebページからタイトルをスクレイピングし、GASを通じてGoogleスプレッドシートに保存するプログラムを作成せよ。
2. GASでのAPIを用いてPythonからデータを送信し、GASで受信したデータをログに出力せよ。

 

 

解答と解説

問題1の解答例

# Pythonでのスクレイピング
import requests
from bs4 import BeautifulSoup

url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
title = soup.title.string

# 取得したタイトルをGAS経由でスプレッドシートに保存
requests.post("https://script.google.com/macros/s/YOUR_SCRIPT_ID/exec", data={'title': title})

このスクリプトでは、PythonのBeautifulSoupを用いてWebページのタイトルを取得し、それをGASのAPIにPOSTしている。

問題2の解答例

// GAS側でデータをログに出力
function doPost(e) {
  if (e.parameter.title) {
    Logger.log("Received title: " + e.parameter.title);
  }
}

GASでは、doPost関数を用いて受信したデータをログに出力している。

自分でもPythonとGASを連携させたスクリプトが書けるようになった気がする!ありがとう、catman!
猫男
猫男
catman
catman
こちらこそ。君の進歩を見られて嬉しいぞ!