SeleniumとPythonでYahoo検索を実施して検索結果の1番目を取得する

宮本です。 Twitterはコチラ

はじめに

SeleniumをPythonで操作する勉強をしているのでその備忘録です。

仕様

  • キーワードでYahoo検索の1番目のURLを取得

環境的なあれこれ

  • マシン:Mac
  • Python:2.7系
  • ブラウザ:Google Chrome
  • 他にはSelenium、Chromedriverが必要

実装

python:yahoo_url.py

#!/usr/bin/
# -*- coding: utf-8 -*-

import selenium.webdriver

kw = u'信善光寺'
url = 'https://www.yahoo.co.jp/'

webdriver = selenium.webdriver
chop = webdriver.ChromeOptions()
chop.add_argument('--disable-gpu')
chop.add_argument('--no-sandbox')
driver = webdriver.Chrome(executable_path='your chrome driver path', chrome_options = chop)

driver.get(url)
driver.implicitly_wait(15)
print(driver.current_url)

print('KW : ' + kw)
xpath = '//*[@id="srchtxt"]'
search = driver.find_element_by_xpath(xpath)
search.send_keys(kw)
driver.implicitly_wait(15)

xpath = '//*[@id="srchbtn"]'
button = driver.find_element_by_xpath(xpath)
button.click()
driver.implicitly_wait(15)

xpath = '//*[@id="WS2m"]/div[1]/div[1]/h3/a'
first_url = driver.find_element_by_xpath(xpath)
print(first_url.get_attribute('href'))

driver.quit()

結果

上記の場合信善光寺の検索結果1番目が出力されるはずです。

implicitly_waitというメソッドで要素を待って次処理を実施するように設定しました。

検索URLを直接叩けばテキストいれたり、クリックしたりせずにいけますがとりあえず成功したので残しておきます。

ちなみにですが、find_element_by_xpath(これは最初に存在して該当する要素1つだけ取得)をfind_elements_by_xpathという形で複数(リスト形式)で取得する場合もできますし、そのほうが実用できかと思います。取得するXpathや要素を見て判断していきたいですね。