環境
Python 3.7.2
gspread 3.1.0
oauth2client 4.1.3
実現したいこと
pythonを使用してGoogleスプレッドシートの更新を「1セルごと、1行ごと」ではなく「全ての行もしくは(例)100行毎」のように行いたい
行っていること現状・問題点
①スプレッドシートの指定した列すべての情報を取得し
②①の一行ごと(セル)にあるURLを使用してページ解析を行い
③データをセルに格納して行く
※for文で1セルごとに更新を行っているため途中「HTTP ERROR 500」のエラーなどで処理が止まってしまう
※データは3000件以上
データと現状ソース
#chrome ディレクトリ driver = webdriver.Chrome(chrome_options=opt,executable_path=r"クロームドライバー/chromedriver.exe") scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'] credentials = ServiceAccountCredentials.from_json_keyfile_name('キーファイル.json', scope) gc = gspread.authorize(credentials) wks = gc.open('スプレッドシートファイル名').worksheet("シート3") list_of_lists = wks.col_values(2) list_of_check = wks.col_values(8) timesleep = 0 listnum = 1 for url in list_of_lists: try: #処理済みのものはパス if "check" == list_of_check[listnum-1]: listnum += 1 continue except: pass if "サイトURL" in url: #ブラウザオープン driver.get(url) time.sleep(2) vall = "" try: #リダイレクトされた場合 driver.find_element_by_xpath('//*[@id="asdfasfa"]/span').text except: vall = "none" try: #完売しているとき if "完売" == driver.find_elements_by_xpath('//*[@id="asdfasdf"]/h3')[0].text: vall = "完売だよ" except: pass try: #残り僅かの時 if "残り僅か" == driver.find_elements_by_xpath('//*[@id="asdfasdfa"]/span[2]')[0].text: vall = "残り僅かだよ" except: pass if vall != "": #セル更新① 「状態フラグ」 wks.update_acell('G'+str(listnum), vall) time.sleep(3) #セル更新② 「チェック済みフラグ」 wks.update_acell('H'+str(listnum), "check") time.sleep(3) listnum += 1 driver.quit()
やりたいこと(参考サイト) + 分からないこと
KISSE様のサイトを参考「Python gspread 処理が遅いと感じたらチェックすること」
↑こちらのように全て取得しまとめて更新を行いたいのですが
参考サイトから:workspace.update_cells(cell_list)
cell_list内にどう格納していけばいいか分からず迷走しております。
ご教授のほどお願いいたします。
全て取得は「wks.get_all_values()」が一番手っ取り早いかなと思っております。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/22 14:08
2019/05/22 14:19
2019/05/23 09:55
2019/05/23 10:23
2019/05/23 13:01