3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

いろいろな豆知識カレンダーAdvent Calendar 2022

Day 3

【Python】スクレイピングでスプレッドシートへの転記までサクッと

Last updated at Posted at 2022-12-04

この記事によって実現できること
Python Seleniumによるスクレイピングでとってきた情報をスプレッドシートに転記

▼ Tips
Chromeドライバーを定期的に手動でダウンロードしているかたは必見です!
こんな面倒な作業をしている人はサクッと解決しちゃいましょう!

はじめに

こういう悩みありませんか?
スクレイピングやり始めたんだけど、CSVとかでダウンロードしてスプレッドシートにインポートしてるんだけど、自動化できないかな...

Pythonでスプレッドシートに記入する方法

1. 下準備編(Google Cloud Platform)

この記事で完璧です!

2. コード編

まずはコピペ!

#ここから編集
省略
#ここまでの部分

を編集しましょう。

▼コピペ用

spreadsheet.py
import gspread
import json

def get_spreadsheet():
    """
    スプレッドシートとの連携の関数
    :return: ワークシート
    """
    #ここから編集
    keyfile_path = "'/ファイルのパス/ファイル名.json'" # 秘密鍵のjsonのパスを記入
    SPREADSHEET_KEY = 'スプレッドシートキー' # 転記したいワークブックのIDを記入
    #ここまで

    #ServiceAccountCredentials:Googleの各サービスへアクセスできるservice変数を生成。
    from oauth2client.service_account import ServiceAccountCredentials

    #2つのAPIを記述しないとリフレッシュトークンを3600秒毎に発行し続けなければならない
    scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']

    #認証情報設定
    #ダウンロードしたjsonファイル名をクレデンシャル変数に設定(秘密鍵、Pythonファイルから読み込みしやすい位置に置く)
    credentials = ServiceAccountCredentials.from_json_keyfile_name(keyfile_path, scope)

    #OAuth2の資格情報を使用してGoogle APIにログインします。
    gc = gspread.authorize(credentials)

    #共有設定したスプレッドシートのシート1を開く
    workbook = gc.open_by_key(SPREADSHEET_KEY)
    return workbook

※スプレッドシートキーとは▼
https://docs.google.com/spreadsheets/d/(ここの部分)/edit

この関数を使って色々と行っていくことになります!

spreadsheet.py
# 例
workbook = get_spreadsheet() # これはワークブックの階層
worksheet = workbook.worksheet("シート名を記入") # これはシートの階層

これでアクセスでき、色々と作業できるようになります!

▼ちなみに僕がcsvファイルを転記する際に組んでる関数がこちらです。

spreadsheet.py

def set_values_to_ss(worksheet, data_list):
    """
    スプレッドシートに記入する関数
    :param worksheet: シート
    :param data_list: csv加工後配列
    :return:
    """
    last_row = 3 # 記入開始の行
    for i in range(len(data_list)):
        #このときはF列〜L列に記入したかったのでこのようになっているが各々編集◯
        #worksheet.range('A1:B10')のように記入
        cell_list = worksheet.range('F' + str(last_row) + ':L' + str(last_row))
        for j, cell in enumerate(cell_list):
            try:
                cell.value = int(data_list[i][j])
            except:
                cell.value = data_list[i][j]
        worksheet.update_cells(cell_list)
        # print("process: "+str(i)+"/"+str(len(data_list)))
        last_row += 1
        sleep(0.1)

ちなみに

worksheet.update_cells(編集したい範囲)

でスプレッドシートが更新されます。(転記できる)
要するにこういうことです。
① スプレッドシートにアクセス
② コード内で転記するシートを作成
③ ②の内容でアップデート

ではまた次回!

この記事によって実現できること
Python Seleniumによるスクレイピングでとってきた情報をスプレッドシートに転記

3
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
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?