🍣

Playwright for Python でWebスクレイピングを試してみた!導入と使い方まとめ

2023/12/30に公開

こんにちは、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のシステム・要件
  1. Python 3.8 以降。
  2. Windows 10 以降、Windows Server 2016 以降、または Windows Subsystem for Linux (WSL)。
  3. MacOS 12 モントレーまたは MacOS 13 ベンチュラ。
  4. Debian 11、Debian 12、Ubuntu 20.04、または Ubuntu 22.04。

環境構築は、local環境と、Dockerについて記載しておきます。

環境構築 Ver. local環境

  1. Playwright Pytest プラグインを install する。
pip install pytest-playwright
  1. 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が次の内容になります。

https://playwright.dev/

scraper.py
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の処理内容
  1. with sync_playwright()で同期処理で、playwrightの処理をStartする。
  2. p.chromium.launch()で、Web Browser(Chromium)のインスタンスを作成する。
  3. browser.new_page()で、ページのインスタンスを作成する。
  4. page.goto()で、Playwrightのサイトにアクセスする。
  5. page.title()で、title要素の値(タイトル)を取得している。
  6. page.locator()では、セレクター指定で要素を取得する。
    • page.locator('.hero__title')で、画面上部の「ヒーロー」を特定して取得する。
  7. page.screenshot()で、スクリーンショットを取得する。 Ver. Lightモード
  8. toggleButton_gllPクラスのbutton要素を取得して、Clickする(Darkモードにする)
  9. page.screenshot()で、スクリーンショットを取得する。 Ver. Darkモード
  10. browser.close()で、Browserを閉じる。

まとめ

Webスクレイピングは初めてなので、学びが多く、楽しいです。

PlaywrightをE2Eテストで使用するのにも、後で挑戦してみたいと思いました。

個人で、Blogもやっています、よかったら見てみてください。

https://masanyon.com/

注意事項

この記事は、AIQ 株式会社の社員による個人の見解であり、所属する組織の公式見解ではありません。

求む、冒険者!

AIQ株式会社では、一緒に働いてくれるエンジニアを絶賛、募集しております🐱🐹✨

詳しくは、Wantedly (https://www.wantedly.com/companies/aiqlab)を見てみてください。

参考・引用

https://playwright.dev/python/docs/intro#installing-playwright

https://playwright.dev/python/docs/docker

https://kakakakakku.hatenablog.com/entry/2022/10/24/091056

https://github.com/microsoft/playwright-python

https://zenn.dev/manase/scraps/944f0f7a703e52

https://zenn.dev/manase/scraps/a871202cd1c405

AIQ Tech Blog (有志)

Discussion