Pythonでスクレイピング等で取得したデータをGoogleのスプレッドシートに出力する方法をハンズオンで形式で解説しています。記事を読んでいただくと以下デモ動画のようなアプリが作成できます。
サンプルコード
import PySimpleGUI as sg
import gspread
from googleapiclient.discovery import build
from google.oauth2.service_account import Credentials
import datetime
class Logger:
def __init__(self, window):
self.window = window
def print_ref(self, txt):
str_dateinfo = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S") + ':'
self.window['-LOG-'].print(str_dateinfo + txt)
self.window.refresh()
def save_to_spreadsheet(data,logger, google_auth_file_path,spreadsheet_key):
logger.print_ref("Google スプレッドシートに結果を保存しています...")
logger.print_ref(f"認証JSON: {google_auth_file_path}")
try:
# 認証情報の設定
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
creds = Credentials.from_service_account_file(google_auth_file_path, scopes=scope)
gc = gspread.authorize(creds)
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
# シートの追加
sheet = gc.open_by_key(spreadsheet_key).add_worksheet(title=f"test_{timestamp}", rows=50, cols=10)
# 書き込むデータの例 (適宜変更してください)
data = ["サンプル", data, 123, "時間",timestamp]
# values にデータを格納
values = [data]
# データの書き込み (A1セルから開始)
sheet.append_rows(values)
# スプレッドシートのURLを取得
spreadsheet_url = sheet.url
logger.print_ref(f"スプレッドシートに追記しました: {spreadsheet_url}")
return spreadsheet_url
except Exception as e:
logger.print_ref(f"スプレッドシートの保存中にエラーが発生しました: {str(e)}")
return None
def main():
spreadsheet_key = ''
try:
with open("spred_sheet_key.txt", "r") as f:
spreadsheet_key = f.read().strip()
except FileNotFoundError:
spreadsheet_key = "「spred_sheet_key.txt」ファイルが見つかりません"
layout = [
[sg.Text("テスト文字を入力してください:")],
[sg.Input(key='-TEXT-')],
[sg.Text("Google認証JSONファイル(スプレッドシート用):")],
[sg.Input(key='-GOOGLE-AUTH-'), sg.FileBrowse()],
[sg.Text(f'スプレッドシートキー: {spreadsheet_key}')],
[sg.Button('実行'), sg.Button('クリア'), sg.Button('終了')],
[sg.Multiline(size=(60, 20), key='-LOG-', autoscroll=True)]
]
window = sg.Window('スプレッド出力テスト', layout)
logger = Logger(window)
# イベントループ
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED or event == '終了':
break
elif event == '実行':
# テキスト入力値を取得
text_input = values['-TEXT-'] # テキスト入力のキー名を修正してください
# Google認証ファイルのパスを取得
google_auth_file = values['-GOOGLE-AUTH-']
if not google_auth_file:
sg.popup_error("Google認証ファイルを選択してください")
continue
if spreadsheet_key == '' or spreadsheet_key == "spred_sheet_key.txt ファイルが見つかりません":
sg.popup_error("スプレッドシートキーをspred_sheet_key.txtに入力して再起動して下さい")
continue
spreadsheet_url = save_to_spreadsheet(text_input, logger, google_auth_file,spreadsheet_key)
if spreadsheet_url:
logger.print_ref(f"スクレイピング結果をGoogle スプレッドシートに保存しました。\nURL: {spreadsheet_url}")
window.close()
if __name__ == "__main__":
main()
サンプルの流れとして、GUI画面で
- 入力データ
- Google認証用データ
- スプレッドシートのID
を取得しスプレッドシート出力用関数に渡しています。
GUI実装に使っている「PySimpleGUI」は最新バージョンだとアカウント登録を求められるのでダウングレードして使ってます。方法は以下の記事で解説。
【簡単2ステップ】PySimpleGUI有償化への対応:バージョン4へのダウングレード方法
PySimpleGUIがバージョン5から有償化
PySimpleGUIがバージョン5から有償化されたため、バージョン4の最新版に...
上記プログラムを動かすための準備方法は次で解説します。