Playwright を使ってスクレイピング - スクリーンショットの取得法
一昨日の記事に続いてスクリーンショットを取得するライブラリの紹介です。requests-htmlの場合、pyppetterのラッピングツールであることもあり、単一ライブラリの設定だけで完結しないこともあり、Selenium と比べて使いにくさを感じる部分も多かったです。
そこで、① インストールが容易(できればAzure Fuctions の従量課金でも動く)、② 認証ページの操作が可能、③ 要素取得が容易 なツールとして Playwright を使ってみることにしました。
スクリーンショットの取得方法
Playwrightの場合、下記のコードでスクリーンショットが取得できました。コード行数だけを考えるとSeleniumやrequests-HTMLと変わらないように見えますが、非同期処理を考慮しなくてもコードが書きやすかったり、ライブラリの事前セットアップが容易だったりといった強みがありました。
from playwright.sync_api import sync_playwright
def take_screenshot(url):
# 目標のウェブページにアクセス
playwright = sync_playwright().start()
browser = playwright.chromium.launch()
page = browser.new_page()
page.goto(url, timeout=0)
# スクリーンショットを取得
page.screenshot(path="screenshot.png")
if __name__ == "__main__":
take_screenshot("https://note.com/newvillage/n/n4b745e789899")
使ってみた結果
Selenium で作っていた Wall Street Journal の記事を取得するライブラリを Playwright で書き直してみました。詳細な説明は割愛しますが、Selenium とPlaywright のコードの比較については、下記の Commit History を参照ください。
個人的には Selenium ライクにブラウザ操作とスクレイピングが実現できるので、Playwright は使いやすいと思いました。