Webサイトのスクレイピングに使うSeleniumの使い方を忘備録も兼ねて記録に残します。起動から順番に紹介しています。
Seleniumの最も簡単な立ち上げ方法
from selenium import webdriver webdriver.Chrome()
Seleniumでブラウザを立ち上げるには、わずか2行OKです。
Googleのホームページを表示してみる
from selenium import webdriver webdriver.Chrome().get("https://google.com")
先ほどのコードに追加でget(‘https://google.com’)で開けます。
ただ、慣例として下記のようにすることがほとんどです。2番目と3番目のコードはどちらが先でもOKです。
from selenium import webdriver URL = "https://google.com" driver = webdriver.Chrome() driver.get(URL)
driverという変数に一旦格納して、URL変数に’URL’、getメソッドでURL先を開きます。
Webサイトの要素を取得してみる(スクレイピング)
取得したいWebサイト側で情報取得準備
まずchromeで情報を取得したいWebサイトにアクセスします。例ではGoogleのホーム画面です。
画面上で右クリックして検証をクリックします。
その後左側の矢印のようなマークをクリックして取得したい要素をクリックします。
例では検索ボックスの要素を取得します。
検索ボックスの要素がハイライトされました。ハイライトされている部分に注目するとタグが”input”となっているのが確認できます。これを利用します。
Python側のコーディング
先ほどWebを立ち上げたコードに追記していきます。
from selenium import webdriver driver = webdriver.Chrome() URL = 'https://google.com' driver.get(URL) driver.find_element_by_tag_name("input")
一番最後にコードを追記しました。Webの要素を格納した変数driverに対してfind_element_by_tag_nameメソッドを実行しています。引数には(‘ ’)で囲った箇所に先ほど確認した”input”を入れます。
この状態で実行してみましょう。
エラーが出なければ取得できています。
検索ボックスに文字を送信して検索してみよう
from selenium import webdriver driver = webdriver.Chrome() URL = 'https://google.com' driver.get(URL) elem = driver.find_element_by_tag_name("input") elem.send_keys('yahoo')
先ほどのコードでテキストボックスの要素を取得できたので、取得した要素をelemという変数に一旦格納します。次の行で変数elemにsend_keysメソッドで検索文字列、ここで「yahoo」という文字を送信します。
検索ボックスに「yahoo」が入力されているのが確認できれば成功です。
通常は要素にsubmitボタンがあるパターンが多いのですが、ここでは「ENTER」キーを押したことをkey_sendメソッドで送信します。
次は検索を実行してみましょう。下の2行を追加しています。慣例ではimport分はコード上部に書きます。次回以降はコード上部に移動させていますので注意していください。
「from selenium.webdriver.common.keys import Keys」は特殊キーを格納したライブラリです
from selenium import webdriver driver = webdriver.Chrome() URL = 'https://google.com' driver.get(URL) elem = driver.find_element_by_tag_name("input") elem.send_keys('yahoo') from selenium.webdriver.common.keys import Keys elem.send_keys(Keys.ENTER)
無事検索結果が表示されているかと思います。
検索結果の一番上のウェブサイトにアクセスしよう
例では「Yahoo」を検索して一番上に表示されているWebページにアクセスします。
まずは、検索結果が出た画面で右クリックして検証をクリック、①左の矢印のようなマークをクリックして、②検索結果最上位をクリック、③下のコード部分で右クリック、④CopyからCopy selectorをクリックします。今回はCSS Selectorを使用します。
from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome() URL = 'https://google.com' driver.get(URL) elem = driver.find_element_by_tag_name("input") elem.send_keys('yahoo') elem.send_keys(Keys.ENTER) elem_search_results = driver.find_element_by_css_selector( '#rso > div:nth-child(1) > div > div > div > div > div > div > div.yuRUbf > a > h3') elem_search_results.click()
今回はelem_search_resultという変数に格納します。変数名は何でもOKです。aとかでもOKです。
driver.find_element_by_css_selectorというメソッドを使用して先ほどコピーしたSelectorを入力します。Selectorの分が長いのでfind_element_by_css_selector(の後ろで改行しています。
その後、elem_search_resultsのclick()メソッドを使用して「yahoo」のウェブサイトを表示します。
無事表示できれば成功です。
まとめ
from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome() driver.get('https://google.com') driver.find_element_by_tag_name("input").send_keys('yahoo',Keys.ENTER) driver.find_element_by_css_selector( '#rso > div:nth-child(1) > div > div > div > div > div > div > div.yuRUbf > a > h3').click()
今回使用したコードには無駄な部分が多かったので無駄を削ぎ落としたコードを最後に紹介しておきます。
プログラミングを学びたい方は下のリンクから無料体験できるので検討してみてはいかがでしょうか
コメント