【python】seleniumを使って自動検索&検索結果を自動取得【スクレイピング】
「seleniumの使い方がわからない」「検索を自動化したい」
こんな方に向けて今回の記事を書いています。
seleniumはpythonの自動検索モジュールで(詳しくは後述します)特定のワードの検索を自動で処理してくれます。
今回は、このseleniumを用いて、Googleで自動検索をする方法を解説いたします。
自分の環境で動作することを確認できているので、ぜひ一度試していただきたいと思います。
目次(クリックで読みたい部分にジャンプできます)
seleniumとは
seleniumはPythonなど複数の言語から自動操作できるブラウザーの実行環境です。
ChromeやFirefoxなどのブラウザーをPythonから起動し、ページ内のJavaScriptを読み取ってフォームに文字を入力し、送信ボタンを押下し、さらに先のページで処理を実行するなどができます。
この間のCookieやセッション情報も維持されますので、例えば会員サービスのログイン後のページも
簡単にスクレイピングができるようになります。
準備するモジュール
今回のseleniumを使うには以下をインストールする必要があります。
- Chrome
- Chromeと同じversionの、ChromeDriver
- selenium
Chromeのversionの確認方法
Chromeを開き、右上の3つの点をクリックします。
その中の、ヘルプ、GoogleChormeについてをクリックします。
その中に、インストールされているGoogleChromeのversionが見れるはずです。
ChromeDriverのインストール&seleniumのインストール
上記ページで自分が使っているChromeと同じversionのものをインストールしましょう。
また、コマンドプロンプト上でseleniumをインストールしておきましょう。
pip3 install selenium
全体の処理の流れ
コードに入る前に、全体の処理の流れを把握しておきましょう。
以下の流れでコードを紹介いたします。
全体の処理の流れ
①webDriverでURLにアクセスする
②入力欄に検索ワードを入れる
③検索結果を取得する
④ブラウザーを閉じる
①webDriverでURLにアクセスする
url = "https://www.google.com"
driver = webdriver.Chrome()
driver.get(url)
time.sleep(3)
検索するURL先を宣言します。
それをもとに、Webdriverを使ってChromeを起動し、URLを開きます。
トップページを開いたら、正常にブラウザデータが読み込まれるよう数秒待つようにします。
②入力欄に検索ワードを入れる
search = driver.find_element(By.NAME,"q")
search.send_keys(keyword)
search.submit()
.find_elementでGoogleの検索フォームを取得します。
検索フォームは、name="q"となっているので、引数には(By.NAME,"q")を指定します。
また、name値以外にも、id属性はBy.id。name属性は、By.nameで指定します。
他のページのformを指定するときは、参考にしてみてください(参考サイト)
.submitでフォームが提出されます。
③検索結果を取得する
soup = BeautifulSoup(driver.page_source,"html.parser")
results = soup.find_all("h3",attrs={"class":"LC20lb"})
for i, result in enumerate(results):
print("%d: %s" % (i + 1, result.get_text()))
サーバーから返ってきた検索結果を取得します。
今回は、BeautifulSoupを用います。属性を指定するだけで、簡単に要素を取得できるモジュールです。
.find_allで「div」や「h3」を指定します。
今回は、「h3」タグで「class = LC20lb」を指定します。
その取得結果をfor文で表示します。
④ブラウザーを閉じる
time.sleep(5)
driver.quit()
ブラウザーを閉じるのは、.quitで行います。
全コード
#googleで検索し、キーワードの上位検索結果を取得する
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from bs4 import BeautifulSoup
url = "https://www.google.com"
keyword="WBC"
driver = webdriver.Chrome()
driver.get(url)
time.sleep(3)
search = driver.find_element(By.NAME,"q")
search.send_keys(keyword)
search.submit()
soup = BeautifulSoup(driver.page_source,"html.parser")
results = soup.find_all("h3",attrs={"class":"LC20lb"})
for i, result in enumerate(results):
print("%d: %s" % (i + 1, result.get_text()))
time.sleep(5)
driver.quit()
まとめ
今回は、google検索を自動で行うseleniumを使ったコードを解説いたしました。
実際に実行してみると、タブが自動で動いて操作されるので、ハッカー気分を味わえます。
ぜひ一度実行して試してみてください。