0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

業務で使っているシステムとスプレッドシートを連動させる仕組み

Posted at

作ってみたものの、セキュリティ面で問題になりそうなので中断。
過程のメモです。

◆概要
GoogleCOLAB上でPython/seleniumを使い、業務システムの情報をスクレイピングしスプレッドシートに出力するシステムの構築。

◆中断の理由
Pythonを用いてスプレッドシートにデータを出力する際、承認処理が必要となり、Googleアカウントへのアクセスを求められる。
個人アカウントだったら良いものの、社用アカウントはリスクになりそう。

・出力された警告
>Google 認証情報へのアクセスをこのノートブックに許可しますか?

◆作成したソースコード


#諸々のインストール
!pip install selenium
!apt-get update
!apt-get install -y chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium gspread oauth2client
!pip install selenium gspread oauth2client webdriver-manager

#seleniumやスプレッドシートを扱うためのAPIをインポート
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import pandas as pd
from google.colab import files

# Google Sheets APIの認証設定
def authenticate_gspread():
    scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
    creds = ServiceAccountCredentials.from_json_keyfile_name('/content/credentials.json', scope)
    client = gspread.authorize(creds)
    return client

# Seleniumのセットアップ
def setup_selenium():
    chrome_options = Options()
    chrome_options.add_argument("--headless")  # ヘッドレスモードでブラウザを起動
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-dev-shm-usage")
    service = Service(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=service, options=chrome_options)
    return driver

# URLから要素を取得する関数
def get_element_from_url(url):
    driver = setup_selenium()
    driver.get(url)
    # ここで要素を取得します。例として最初の<a>タグを取得します。
    element = driver.find_element(By.TAG_NAME, 'a')
    element_text = element.text
    driver.quit()
    return element_text

# スプレッドシートにデータを書き込む関数
def write_to_spreadsheet(value):
    client = authenticate_gspread()
    sheet = client.open_by_key('スプレッドシートURL').worksheet('シート名')
    cell = sheet.find('特定のセル').row + 1
    sheet.update_cell(cell, 1, value)  # 1列目にデータを書き込む

# メイン関数
def main():
    url = 'https://book.impress.co.jp/books/1123101044'
    element_text = get_element_from_url(url)
    write_to_spreadsheet(element_text)

if __name__ == "__main__":
    # Google Sheets API認証情報をアップロード
    uploaded = files.upload()
    
    # 認証情報ファイルをColabに保存
    for filename in uploaded.keys():
        if filename.endswith('.json'):
            credentials_path = f'/content/{filename}'
            break
    
    # メイン処理を実行
    main()

◆今後の展望
スプレッドシートに認証の要らない(たぶん)GASで再チャレンジ

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?