Pythonでseleniumを利用してウインドウアクセスする場合の簡単な例の第2弾として、Google検索画面にアクセスし、キーワードを入力、表示された結果のタイトルとURLをExcelに書き込みするまでを載せておきたいと思います。
前回同様内容としては、各ブラウザのドライバを設定して、Google検索画面にアクセスし検索窓にキーワードとして「Python Selenum」と入力することで検索結果を表示させ、結果として表示された1ページ目のそれぞれの項目のタイトルとURLを取り込んでExcel画面に表示させるまでになります。
Excelファイルの操作がありますのでopenpyxlのインストールが必要になります。
これについては以下の過去記事で記載していますのでご参照ください。
目次
1.サイトアクセス、スクレイピング、Excel書き込み例(Chrome)
Chromeの場合の例が以下になります。
from selenium import webdriver from selenium.webdriver.chrome import service as fs import os from selenium.webdriver.common.by import By import openpyxl path_driver = os.getcwd()+'\chromedriver.exe' # ドライバー指定でChromeブラウザを開く chrome_service = fs.Service(executable_path=path_driver) driver = webdriver.Chrome(service=chrome_service) searched_list = [] driver.get('https://www.google.com/') search = driver.find_element(By.NAME,"q") search.send_keys("python selenium") # 検索ワードを送信 search.submit() # 検索を実行 # Google検索結果からタイトルとURLを抽出 for elem_h3 in driver.find_elements(By.XPATH,'//a/h3'): elem_a = elem_h3.find_element(By.XPATH,'..') page_data = [] page_data.append(elem_h3.text) page_data.append(elem_a.get_attribute('href')) searched_list.append(page_data) path_excel = os.getcwd()+'\\test.xlsx' wb = openpyxl.load_workbook(path_excel) ws = wb['Sheet1'] x = 2 for element in searched_list: ws.cell(x, 2).value = element[0] ws.cell(x, 3).value = element[1] x += 1 wb.save(path_excel) # タブを閉じる driver.close() driver.quit()
2.サイトアクセス、スクレイピング、Excel書き込み例(Edge)
同様にEdgeの場合は以下になります。
7~10行目のドライバーの設定の箇所が違うだけです。
from selenium import webdriver from selenium.webdriver.chrome import service as fs import os from selenium.webdriver.common.by import By import openpyxl path_driver = os.getcwd()+'\msedgedriver.exe'
# ドライバー指定でEdgeブラウザを開く
edge_service = fs.Service(executable_path=path_driver)
driver = webdriver.Edge(service=edge_service)
searched_list = [] driver.get('https://www.google.com/') search = driver.find_element(By.NAME,"q") search.send_keys("python selenium") # 検索ワードを送信 search.submit() # 検索を実行 # Google検索結果からタイトルとURLを抽出 for elem_h3 in driver.find_elements(By.XPATH,'//a/h3'): elem_a = elem_h3.find_element(By.XPATH,'..') page_data = [] page_data.append(elem_h3.text) page_data.append(elem_a.get_attribute('href')) searched_list.append(page_data) path_excel = os.getcwd()+'\\test.xlsx' wb = openpyxl.load_workbook(path_excel) ws = wb['Sheet1'] x = 2 for element in searched_list: ws.cell(x, 2).value = element[0] ws.cell(x, 3).value = element[1] x += 1 wb.save(path_excel) # タブを閉じる driver.close() driver.quit()
3.コードの簡単な説明
上記例の場合には、あらかじめ書き込み用のファイルとしてExcelファイル「test.xlsx」を同じフォルダ内に用意しておきます。
はじめの5行目までで必要なライブラリのインポートを行っています。
7~10行目はChrome用またはEdge用のドライバー設定となります。
7行目のos.getcwd()はカレントディレクトリを表しています。
7行目により、path_driverに、chromedriver.exeまたはmsedgedriver.exeのpathが入ります。
このパスの指定から、9,10行目でdriverの設定をしています。
12行目はリストとして「searched_list」を宣言していますが、先程のdriverを使用して、14行目でdriver.getの後にオープンしたいURLとしてGoogle検索画面のURLを指定することで検索画面を開いています。
その後、16行目で画面内で検索キーワード入力窓の要素を探索して「search」に設定しています。
17行目でsend_keysに検索用のキーワード「python selenium」を引数として渡すことで検索窓にキーワードを入力し、18行目で「submit()」を実行することで検索処理を実行しています。
21~29行目で検索結果のタイトルとURLを抽出しています。
26,27行目でタイトルとURLをリスト「page_data」に書き込み、それを29行目で「searched_list」 に順次追加しています。
結果として「searched_list」 にはリスト形式のタイトルとURLのペアが順次追加されます。
31~33行目であらかじめ用意した「test.xlsx」ファイルからwbとwsにブックとシートを設定しています。
35~41行目で抽出したタイトルとURLをws(シート)の2列目と3列目の2行目から順に書き込んでいます。
43行目でwb(ブック)を保存し、46、48行目で開いたウインドウを閉じて終了させています。
これにより、Google検索画面を表示しキーワード入力して結果画面を表示させ、検索結果のタイトルとURLをExcelファイルに書き込んでウインドウを閉じて終了するまでの一連の流れができることになると思います。
以上がWebサイトへの簡単なアクセス例になります。
Web上のデータ取得、操作に関する参考書籍、サイトなどは、以下の過去記事にも載せていますのでよかったらご参照ください。
また、Seleniumを活用したスクレイピングのための一通りの手順としてVisualStudioCodeなどのインストールや簡単なWebサイトアクセス例などは以下にも載せていますのでもしよければ見てみてください。
【Python】おすすめ学習本ランキング8選 - Django Girls and Boys 備忘録
【Python】キーボード、キー入力判定方法 - Django Girls and Boys 備忘録
【Python】keyboardライブラリでのキー入力検出に使用可能なキーの種類 - Django Girls and Boys 備忘録
【Python】Python、Selenium関連情報一覧(ダウンロード、インストール手順、各種やり方、使い方など) - Django Girls and Boys 備忘録
【Python Selenium】各ブラウザ用のドライバーを自動アップデートする方法 - Django Girls and Boys 備忘録
【PythonからWeb操作】seleniumのインストール手順 - Django Girls and Boys 備忘録
【PythonによるExcelファイルの読み書き】PythonのダウンロードからExcelファイルの読み書きまでの一通りすべての方法 - Django Girls and Boys 備忘録
【Python Selenium】ウインドウ表示時などでのWaitの方法、待機方法 - Django Girls and Boys 備忘録
【Python Selenium】要素の属性名から属性値を取得する方法 - Django Girls and Boys 備忘録
【Python Selenium】スクレイピングのためのWebサイトアクセス例(Google検索キーワード入力など) - Django Girls and Boys 備忘録
【Python Selenium】サイトアクセス例(Google検索、スクレイピング、Excel書き込み) - Django Girls and Boys 備忘録