前回スクレイピングや自動化ツールであるseleniumとplaywgtrightではどちらが便利かという比較をしてみました。
今回は実際にコーディングしていくときに書き方の違いを比較していきたいと思います。
Google検索を自動で行う
基本的な書き方を比較していきたいのでGoogle検索を行ってその結果をスクレイピングするコードを書いていきたいと思います。
インストール方法などは省略して行きますので、インストール方法が気になる方は関連記事をご覧ください。
また、今回は基本的な動作の確認をするだけなので細かいチューニングを行いません。 (※本番環境用ではありません)
動作確認環境
- Windows 10
- python3.8
- GoogleChrome 88
基本設定からGoogleの検索画面を表示する
基本的な設定をしてGoogleの検索画面を表示するところまではそれぞれ比較してみましょう。
seleniumでGoogleの検索画面を表示
from selenium import webdriver
driver = webdriver.Chrome('ドライバーのパス')
driver.get('https://www.google.co.jp')
ドライバーをダウンロードする工程があったりするもののコード自体はシンプルですね。
Chromeのドライバーに関してはこちらからダウンロードできます。
どのバージョンをダウンロードしたらいいか分からない場合はChromeのアドレスバーに「chrome://version/」と入力して現在お使いのChromeのバージョンをご確認ください。
playwrightでGoogleの検索画面を表示
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto('https://www.google.co.jp')
こちらはChromeのドライバーをダウンロードする必要はなくplaywrightがインストールされていればコピペでOKです。
selenium程ではないですが、こちらもシンプルですね。
Google検索で検索してみる
画面を表示させることはできたので、実際に検索してみましょう。
seleniumで検索してみる
今回は「Python」を検索し見たいと思います。
from selenium import webdriver
driver = webdriver.Chrome('./chromedriver')
driver.get('https://www.google.co.jp')
search_bar = driver.find_element_by_name("q")
search_bar.send_keys("python")
search_bar.submit()
結果はこんな感じです。

seleniumは基本的に要素を指定して、その要素に対するアクションを命令するという感じのコードになっていきますね。
playwrightで検索してみる
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto('https://www.google.co.jp')
page.fill('input[name="q"]', 'python')
page.click('input[type="submit"]')
seleniumのようにフォームを送信する関数があるといいなと思ったのですが、ざっとドキュメント調べた感じまだなさそうでした。
playwrightの方が、要素の指定と要素に対する処理が簡単に書けていい感じですね。
一応それぞれスクリーンショット取ってみましたが結果はほぼ同じように見えます。

ちなみにスクリーンショットを撮るコードはそれぞれこんな感じです。
# selenium
driver.save_screenshot('ファイルパス')
# playwrghit
page.screenshot(path='ファイルパス')
検索まではできたので、最後に検索結果を出力させてみましょう
Googleの検索結果を出力させてみる
seleniumで検索結果を出力させてみる
「python」の検索結果を出力してみます。
from selenium import webdriver
driver = webdriver.Chrome('./chromedriver')
driver.get('https://www.google.co.jp')
search_bar = driver.find_element_by_name("q")
search_bar.send_keys("python")
search_bar.submit()
for h3 in driver.find_elements_by_xpath('//a/h3'):
print(h3.text)
出力結果
プログラミング言語 Python - python.jp
Pythonってどんな言語なの? (1/2):Python入門 - @IT
Welcome to Python.org
Python - Wikipedia
Python | プログラミングの入門なら基礎から学べるProgate ...
Pythonの開発環境を用意しよう!(Windows ...
Python入門 ~Pythonのインストール方法やPythonを使った ...
Pythonってどんな言語? 特徴と歴史を『独習Python』から ...
Pythonとは?大人気プログラミング言語のメリットや活用事例 ...
playwrightで検索結果を出力させてみる
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto('https://www.google.co.jp')
page.fill('input[name="q"]', 'python')
page.click('input[type="submit"]')
for h3 in page.query_selector_all('//a/h3'):
print(h3.text_content())
出力結果
プログラミング言語 Python - python.jp
Pythonってどんな言語なの? (1/2):Python入門 - @IT
Welcome to Python.org
Python - Wikipedia
Python | プログラミングの入門なら基礎から学べるProgate ...
Pythonの開発環境を用意しよう!(Windows ...
Python入門 ~Pythonのインストール方法やPythonを使った ...
Pythonってどんな言語? 特徴と歴史を『独習Python』から ...
Pythonとは?大人気プログラミング言語のメリットや活用事例 ...
出力結果はどちらも同じですね。
まとめ
今回は簡単な出力なので、どちらのライブラリを使ってもそこまでコード量に差は出ませんでしたね。
もっといい書き方あるよって方はコメントで教えていただけるととても助かります!
もう少し複雑なスクレイピングだと、playwrightの方がコード量は少なく済むのかなと思います。
基本的に公式ドキュメントとにらめっこしながら書くことになったのでもう少しplaywrightの解説記事が増えるととっつきやすいのかなというような印象でした。
何か新しいものを触る時は公式ドキュメント読むのが一番だけど、情報量が多すぎてお試しがしづらいのが難点ですね。
今後スクレイピングや自動化ツールのライブラリは何が選ばれていくのか非常に楽しみになってきました。
皆さんも良かったらplaywright試してみてください!!
Pythonを学びたい方におすすめの書籍
【基礎から学ぶ】
【Djangoを学ぶ】
【ゲームを作る】
コメント