行いたいこと
Googleの検索結果を別タブで開いてみたいと思います。
実行結果は以下のイメージ。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
from bs4 import BeautifulSoup import time from selenium import webdriver driver = webdriver.Chrome("chromedriver_win32/chromedriver.exe") # 上位から何件までのサイトを抽出するか指定する pages_num = 3 # キーワード key_word = 'webスクレイピング' # Google検索で「webスクレイピング」の結果を格納する url = 'https://www.google.com/search?num={}&q={}'.format(pages_num,key_word) # URLを開く driver.get(url) time.sleep(3) # WebサイトのHTMLデータをBeautifulSoupで解析する soup = BeautifulSoup(driver.page_source,'html.parser') # 検索結果のまとまり page_titles = soup.find_all(class_="tF2Cxc") i = 1 # 1件別でURLを取得する for page_title in page_titles: url = page_title.find("a").get("href").replace('/url?q=','') print("url = " , url) # タブを右隣に新規追加 driver.execute_script("window.open()") # 操作対象のタブを追加したタブに設定 driver.switch_to.window(driver.window_handles[i]) # 検索結果から取得したURLへ遷移させる driver.get(url) # タブを右に追加していきたいので数字をプラスする i = i + 1 time.sleep(2) # 開き終わったら一番左のタブへ操作対象を戻す driver.switch_to.window(driver.window_handles[0]) |
解説
タブで開く前に、開く先のURLを取得しています。
URLには検索結果のURLが入ります。
・url = page_title.find(“a”).get(“href”).replace(‘/url?q=’,”)
タブを開いて右隣に追加する処理は以下になります。
・execute_scriptで空のタブを開きます。
・追加したタブに操作対象を切り替え
・検索結果のURLを開く
・forループで繰り返す
1 2 3 4 5 6 7 8 |
# タブを右隣に新規追加 driver.execute_script("window.open()") # 操作対象のタブを追加したタブに設定 driver.switch_to.window(driver.window_handles[i]) # 検索結果から取得したURLへ遷移させる driver.get(url) # タブを右に追加していきたいので数字をプラスする i = i + 1 |
最後にメインの操作タブを一番左に戻して終了です。
・driver.switch_to.window(driver.window_handles[0])
window_handlesの引数
・[0]が一番左のタブ
・[1]が左から二番目のタブ
・[-1]を指定すると一番右のタブ
となっているようです。
今回は以上となります。
最後までお読みいただきありがとうございました!