【Python】SeleniumでログインしCSVダウンロード&そのCSVをPandasで加工してBigQueryに転送
【1】概要
◆背景
・毎日決まったところからCSVを落とし、BigQueryに転送する処理をしたい。
【2】内容
◆コード全文
import time from selenium import webdriver from selenium.webdriver.common.by import By import pandas as pd from datetime import datetime as dt, timedelta import datetime from webdriver_manager.chrome import ChromeDriverManager import os from google.cloud import bigquery os.getcwd() #フォルダ指定 default_folder_name = "{ファルダパス}" os.chdir(default_folder_name) #日付指定 tdatetime = dt.now() date_nonhyphen = tdatetime.strftime('%Y%m%d') date_hyphen = tdatetime.strftime('%Y-%m-%d') time_str = tdatetime.strftime('%Y-%m-%d %H:%M:%S') #Seleniumを使うための設定とログインしたい画面への遷移 URL = "{ログインしたいサイトのURL}" driver_path = "./chromedriver" driver = webdriver.Chrome(ChromeDriverManager().install()) #driver = webdriver.Chrome() driver.maximize_window() time.sleep(2.5) driver.get(URL) time.sleep(2.5) # emailをクリックする(ここの指定はサイトによって変わる) email_btn = driver.find_element(By.NAME,'email') email_btn.click() # 1秒待機 time.sleep(1) # emailを入力 email_btn.send_keys("{ログインに必要なemail}") # 1秒待機 time.sleep(1) # パスワードをクリック(ここの指定はサイトによって変わる) password_btn = driver.find_element(By.NAME,'password') password_btn.click() # パスワードを入力 password_btn.send_keys("{ログインに必要なPassword}") # 1秒待機 time.sleep(1) # サブミットをクリックしログイン、これでログインできる login_btn = driver.find_element(By.NAME,'submit') login_btn.click() #ファイルをdownload posts_download_url = "{ダウンロードURL}" driver.get(posts_download_url) #30秒待機 time.sleep(30) # ブラウザを終了する。 driver.close() #ファイル名指定 file_name = "{ダウンロードされるファイルのCSV名}" #ダウンロードフォルダ指定 key="HOME" folder = os.getenv(key) print(folder) folder_name = folder+"/Downloads" os.getcwd() os.chdir(folder_name) #CSVをダウンロード df = pd.read_csv(file_name) #日時列を追加 df["uploaded_at"] = time_str #最初のフォルダに戻る os.chdir(default_folder_name) #GCPの設定 GCP_PROJECT_NAME = "{GCPのプロジェクト名}" os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1' os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '{GCPの認証ファイルの場所}' # bigQueryクライアント認証 client = bigquery.Client(project=GCP_PROJECT_NAME) #BQにアップロード df.to_gbq("{テーブル名}"+date_nonhyphen,if_exists="replace")
【3】補足
◆コード補足
●chromedriverの更新が必要
通常だと更新が必要だが、ChromeDriverManagerのモジュールを使用することで更新不要になる。
driver = webdriver.Chrome() #更新必要 driver = webdriver.Chrome(ChromeDriverManager().install()) #更新不要