前提・実現したいこと
Python3でopenpyxlを使ってExcelのデータを読み込みTwitterへ検索しています。
各国を検索したらExcelのD列に処理済みの結果を記載したいですが、
上手く処理できないです。
Excel Data
国 | 都市 | 地域数 |
---|---|---|
アメリカ | カリフォルニア | 22 |
アメリカ | フロリダ | 22 |
フランス | パリ | 13 |
日本 | 東京 | 26 |
日本 | 沖縄 | 10 |
日本 | 京都 | 11 |
pandas dataframe 変換後のprint(lst)
[['アメリカ', 'カリフォルニア', 'フロリダ'], ['フランス', 'パリ'], ['日本', '東京', '沖縄']]
実現したいエクセルの結果 RESULT Excel Data
例:ループで完了している場合、
下記のように処理済み
のフラグをつけたいです。
元々はエクセルにはヘッダーがないですのでD列からつけたいです。
国 | 都市 | 地域 | フラグ |
---|---|---|---|
アメリカ | カリフォルニア | 22 | 処理済み |
アメリカ | フロリダ | 22 | |
フランス | パリ | 13 | 処理済み |
日本 | 東京 | 26 | 処理済み |
日本 | 沖縄 | 14 | |
日本 | 京都 | 11 |
試したこと
現在の結果
下記のコードだとフランスまでしか処理済み書き込みされないです。
国 | 都市 | 地域 | フラグ |
---|---|---|---|
アメリカ | カリフォルニア | 22 | 処理済み |
アメリカ | フロリダ | 22 | 処理済み |
フランス | パリ | 13 | 処理済み |
日本 | 東京 | 26 | |
日本 | 沖縄 | 14 | |
日本 | 京都 | 11 |
Code
# Excel用ライブラリ読込 import openpyxl from selenium.webdriver.common.keys import Keys import time from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.select import Select from selenium import webdriver import pyautogui import pandas as pd # Excelファイルを開く v_wb = openpyxl.load_workbook("test.xlsx") # アクティブなシートを変数へ v_ws = v_wb.active # シートのロード ws = v_wb.worksheets[0] # convert to pandas dataframe df = pd.DataFrame(ws.values) print(df) # generate search words lst = ( df.groupby(1, as_index=False)[2] .agg(lambda x: x.tolist()) .apply(lambda x: [x[1]] + x[2], axis=1) .tolist() ) print(lst) URL = "https://twitter.com/search-advanced?lang=en" # ブラウザを開く。 #options=option background options = Options() options.add_experimental_option('detach', True) driver = webdriver.Chrome(executable_path="C:\Program Files\chromedriver_win32\chromedriver.exe", options=options) for i, query in enumerate(lst): # Googleの検索TOP画面を開く。 if i > 0: driver.execute_script('window.open()') driver.switch_to.window(driver.window_handles[i]) driver.get(URL) # 2秒待機 time.sleep(2) # country country = driver.find_element_by_name("allOfTheseWords") country.send_keys(query[0]) # 2秒待機 time.sleep(2) # 都市1つ以上がある場合、c列を入力 if len(query) > 1: city2 = driver.find_element_by_name("thisExactPhrase") city2.send_keys(query[1]) # 都市2つ以上がある場合、c列を入力 if len(query) > 2: city2 = driver.find_element_by_name("anyOfTheseWords") city2.send_keys(query[2]) # 都市3つ以上がある場合、c列を入力 if len(query) > 3: city3 = driver.find_element_by_name("noneOfTheseWords") city3.send_keys(query[3]) # 処理済みのでデータをD列へ入力 v_ws['D'+str(i+1)].value = str("処理済み") # EXCEL保存 v_wb.save("test.xlsx")
補足情報(FW/ツールのバージョンなど)
Python3, Excel
自分の力不足が大きいのですが、調べていてイマイチ記述方法がわかりません。
申し訳ないのですが、皆さんのお知恵をお借りできないでしょうか?
よろしくお願いいたします。
###『追記の質問コード』
row = 1 for i, query in enumerate(lst): # Googleの検索TOP画面を開く。 if i > 0: driver.execute_script('window.open()') driver.switch_to.window(driver.window_handles[i]) driver.get(URL) # 2秒待機 time.sleep(2) # country country = driver.find_element_by_name("allOfTheseWords") country.send_keys(query[0]) # 2秒待機 time.sleep(2) # 都市1つ以上がある場合、c列を入力 if len(query) > 1: city2 = driver.find_element_by_name("thisExactPhrase") city2.send_keys(query[1]) # 都市2つ以上がある場合、c列を入力 if len(query) > 2: city2 = driver.find_element_by_name("anyOfTheseWords") city2.send_keys(query[2]) # 都市3つ以上がある場合、c列を入力 if len(query) > 3: city3 = driver.find_element_by_name("noneOfTheseWords") city3.send_keys(query[3]) print('D'+str(row), str("処理済み") ) # 処理済みのでデータをD列へ入力 v_ws['D'+str(row)].value = str("処理済み") row += len(query) - 1 # EXCEL保存 v_wb.save("test.xlsx")
回答1件
あなたの回答
tips
プレビュー