Playwright for Python でWebスクレイピングを試してみた!導入と使い方まとめ
こんにちは、AIQ株式会社のフロントエンドエンジニアのまさぴょんです!
今回は、Playwright for Python でWebスクレイピングを試してみたので、導入と使い方について、解説します。
Playwright for Pythonとは?
Playwrightは、エンドツーエンド(E2E)のテストのニーズに対応するために、Microsoftによって、作成されたライブラリです。
E2Eテストのためのツールとして開発されましたが、Webスクレイピングに使用にも適しています。
Playwrightには、次のような特徴があります。
Playwrightに関する詳細は、参考・引用の記事を見ていただきたいのですが、
中でも2021 年現在、Puppeteer を使う理由はなくなった。Playwright を使おう。などが参考になります。
Playwright for Pythonのシステム・要件と環境構築
Playwright for Pythonのシステム・要件は、次のとおりです。
Playwright for Pythonのシステム・要件
- Python 3.8 以降。
- Windows 10 以降、Windows Server 2016 以降、または Windows Subsystem for Linux (WSL)。
- MacOS 12 モントレーまたは MacOS 13 ベンチュラ。
- Debian 11、Debian 12、Ubuntu 20.04、または Ubuntu 22.04。
環境構築は、local環境と、Dockerについて記載しておきます。
環境構築 Ver. local環境
- Playwright Pytest プラグインを install する。
pip install pytest-playwright
- playwright を install する。
playwright install
環境構築 Ver. Docker
Microsoftが提供している Playwright for PythonのDocker Image
をPullする。
docker pull mcr.microsoft.com/playwright/python:latest
Playwright for Pythonの基本的な使い方
Playwrightの公式Doc(https://playwright.dev/
)にアクセスして、試してみたCodeが次の内容になります。
from playwright.sync_api import sync_playwright
# 同期処理の関数
with sync_playwright() as p:
# Chromium (Web Browser)のインスタンスを作成する
browser = p.chromium.launch()
print('browser: ', browser)
## 出力結果 ##
# browser: <Browser type=<BrowserType name=chromium executable_path=/Users/robotama/Library/Caches/ms-playwright/chromium-1091/chrome-mac/Chromium.app/Contents/MacOS/Chromium> version=120.0.6099.28>
# 新しい・ページを作成する
page = browser.new_page()
print('page: ', page)
## 出力結果 ##
# page: <Page url='about:blank'>
# page.goto() で Playwright のサイトにアクセス
page.goto('https://playwright.dev/')
# page.title() で title tag の値(タイトル)を取得している
title = page.title()
print(title) # Fast and reliable end-to-end testing for modern web apps | Playwright
# page.locator() を使ってセレクタを記述できるので,page.locator('.hero__title') で画面上部の「ヒーロー」を特定
hero_title_text = page.locator('.hero__title').text_content()
print(hero_title_text) # Playwright enables reliable end-to-end testing for modern web apps.
# page.screenshot() で、スクリーンショットを取得する Ver. Lightモード
page.screenshot(path='images/playwright-light.png')
# toggleButton_gllPクラスの button 要素を取得して、Clickする => Darkモードにする
page.locator('.toggleButton_gllP').click()
# page.screenshot() で、スクリーンショットを取得する Ver. Darkモード
page.screenshot(path='images/playwright-dark.png')
# Browser を閉じる。
browser.close()
上記のSampleCodeの処理の内容・ポイントをまとめると、次のとおりです。
SampleCodeの処理内容
-
with sync_playwright()
で同期処理で、playwrightの処理をStartする。 -
p.chromium.launch()
で、Web Browser(Chromium)のインスタンスを作成する。 -
browser.new_page()
で、ページのインスタンスを作成する。 -
page.goto()
で、Playwrightのサイトにアクセスする。 -
page.title()
で、title
要素の値(タイトル)を取得している。 -
page.locator()
では、セレクター指定で要素を取得する。-
page.locator('.hero__title')
で、画面上部の「ヒーロー」を特定して取得する。
-
-
page.screenshot()
で、スクリーンショットを取得する。 Ver. Lightモード -
toggleButton_gllP
クラスのbutton
要素を取得して、Clickする(Darkモードにする) -
page.screenshot()
で、スクリーンショットを取得する。 Ver. Darkモード -
browser.close()
で、Browserを閉じる。
まとめ
Webスクレイピングは初めてなので、学びが多く、楽しいです。
PlaywrightをE2Eテストで使用するのにも、後で挑戦してみたいと思いました。
個人で、Blogもやっています、よかったら見てみてください。
注意事項
この記事は、AIQ 株式会社の社員による個人の見解であり、所属する組織の公式見解ではありません。
求む、冒険者!
AIQ株式会社では、一緒に働いてくれるエンジニアを絶賛、募集しております🐱🐹✨
詳しくは、Wantedly (https://www.wantedly.com/companies/aiqlab)を見てみてください。
参考・引用
AIQ 株式会社 に所属するエンジニアが技術情報をお届けします。 ※ AIQ 株式会社 社員による個人の見解であり、所属する組織の公式見解ではありません。 Wantedly: wantedly.com/companies/aiqlab
Discussion