PythonとSeleniumで、ヘッドレスブラウザ(Chrome)を操作してみる

TAGS

PythonとSeleniumで、ヘッドレスブラウザ(Chrome)を操作してみる カバーイメージ
  1. 1. 事前に知っておこう
  2. 2. 環境を用意する
    1. 2.1. Homebrew インストール
    2. 2.2. Python3 インストール
    3. 2.3. Seleniumをインストール
    4. 2.4. chromedriver ダウンロード
  3. 3. 目的(ゴール)
  4. 4. コード
  5. 5. コードの説明
    1. 5.1. 宣言部分
    2. 5.2. chromedriverの設定
    3. 5.3. 特定のサイト(Yahoo!検索)にアクセスする
    4. 5.4. 確認01
    5. 5.5. 検索窓を操作する
    6. 5.6. 確認02
    7. 5.7. 必要な情報を取得、出力
    8. 5.8. 終了処理
  6. 6. 実行してみよう!
  7. 7. 結果
  8. 8. 次の課題

お疲れさまです。
タイトルにある『Python』も『Selenium』も『ヘッドレスブラウザ』も
初めてなので入門レベルになりますが、やっていきます。
これを皮切りに、いろいろと実験的なログが残せたらいいかなぁと思ってます!

事前に知っておこう

機械的にすごい速度でネットワーク上の情報を収集できるスクレイピングですが、著作権関係やサーバに掛ける負荷により罪に問われる可能性もありますので、十分に注意して行いましょう。

Pythonオンライン学習サービス PyQドキュメント
スクレイピング、クローリングする時の注意点

環境を用意する

簡単にいうと、『Python』も『Selenium』も『ヘッドレスブラウザ』もインストール or ダウンロードされていて、使える状態にするということですね。そうです。

Homebrew インストール

Homebrewを通してPythonをインストールするので、まずはこちらから。
Homebrew 公式サイト

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Python3 インストール

brew install python3

次のコマンドでバージョン情報が出れば完了です!

python3 --version

ダウンロードでもいけるんですけどね。
Python 公式サイト

Seleniumをインストール

pip3 install selenium

chromedriver ダウンロード

ダウンロードページ
(https://sites.google.com/a/chromium.org/chromedriver/downloads)

この辺はさらっと流します。
もし躓いた場合は、その項目でググっていただくと
たくさん情報出てくるかと思うので、大丈夫です!(手抜きですみません…。

目的(ゴール)

特定のサイトにアクセスして、特定のキーワードで検索した結果一覧の
ページのタイトルと、そのページのURLを取得する』をやってみたいと思います。

今回は、
『特定のサイト』は、Yahoo!検索
『特定のキーワード』は、Pythonでやってみましょー。

コード

先にコードの全貌を紹介して、あとでブロックごとに軽く説明していきます!

# 宣言部分
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options

# chromedriverの設定
options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome('/Users/{ユーザー名}/Downloads/chromedriver', chrome_options=options)

# 特定のサイト(Yahoo!検索)にアクセスする
driver.get("https://www.yahoo.co.jp")

# 確認01
assert 'Yahoo' in driver.title

# 検索窓を操作する
input_elem = driver.find_element_by_name('p')
input_elem.clear()
input_elem.send_keys('Python')
input_elem.send_keys(Keys.RETURN)

# 確認02
assert 'Python' in driver.title

# 必要な情報を取得、出力
for a in driver.find_elements_by_css_selector('.w .hd a'):
    print(a.text)
    print(a.get_attribute('href'))

# 終了処理
driver.close()

コードの説明

宣言部分

こちらは、Seleniumを使うよ宣言ですね。
(2行目はキーボードの操作、3行目はchromedriverのオプション使用)

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options

chromedriverの設定

chromedriverに設定するオプションを作成
headlessモードの設定
chromedriverをダウンロードしたパスを指定(例えばMacのダウンロードフォルダの場合はこんな感じ↓)

options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome('/Users/{ユーザー名}/Downloads/chromedriver', chrome_options=options)

特定のサイト(Yahoo!検索)にアクセスする

driver.get("https://www.yahoo.co.jp")

確認01

初回ページタイトルの中に『Yahoo』の文字列が入っているか確認する

assert 'Yahoo' in driver.title

検索窓を操作する

検索窓の要素(input[name=”p”])を取得します
念の為、検索窓をクリアにして
Pythonというキーワードを検索窓に入力
Enter !!

input_elem = driver.find_element_by_name('p')
input_elem.clear()
input_elem.send_keys('Python')
input_elem.send_keys(Keys.RETURN)

確認02

検索結果ページのタイトルの中に『Python』の文字列が入っているか確認する

assert 'Python' in driver.title

必要な情報を取得、出力

find_elements_by_css_selectorは、CSSのセレクタを指定できます。
その他、要素を取得する方法はこちらです。
Locating Elements

# 取得したい要素を検索、すべて取得してループ処理します
for a in driver.find_elements_by_css_selector('.w .hd a'):
    # ページタイトル
    print(a.text)
    # ページURL
    print(a.get_attribute('href'))

終了処理

chromedriverを閉じます

driver.close()

実行してみよう!

上記ソースコードを、適当な名前で保存します。
(たとえばダウンロードフォルダ内に、test.pyという名前で)
Terminalで次のようなコマンドで実行しましょう。

cd /Users/{ユーザー名}/Downloads/
python3 test.py

結果

Welcome to Python.org
https://www.python.org/
Python - ウィキペディア
https://ja.wikipedia.org/wiki/Python
プログラミング言語 Python
https://www.python.jp/
Python チュートリアル — Python 3.6.5 ドキュメント
https://docs.python.jp/3/tutorial/
専門知識いらず!Pythonとは?言語の特徴から網羅的に徹底解説 | 侍 ...
https://www.sejuku.net/blog/7720
Python - Qiita
https://qiita.com/tags/python
Python入門 ~Pythonのインストール方法やPythonを使ったプログラミング ...
https://www.javadrive.jp/python/
Python入門 | 10秒で始めるAIプログラミング学習サービスAidemy ...
https://aidemy.net/courses/3010
Python | プログラミングの入門なら基礎から学べるProgate[プロゲート]
https://prog-8.com/languages/python
なぜPythonはこんなにも遅いのか? | POSTD
https://postd.cc/why-is-python-so-slow/

このような結果が表示されれば成功です。

次の課題

いかがでしたでしょうか。
今回の操作だと検索結果の1ページ目のみになりますので、
ページネーションをクリックするような指示をSeleniumで書けば実現できます。
その他にも出力結果をCSV等に出力したり、検索結果以外の操作を試してみたり…

果たして、実案件に繋がることがあるのか!w

それでは、失礼します。

TAGS

RECOMMEND