コンテンツにスキップ

Jupyter Notebook で Playwright を実行する方法: スクレーパーの詳細ガイド

ちょっと、そこ!

Playwright を使用して、ブラウザの自動化と Web スクレイピングを Jupyter ノートブックで直接実行したいと考えていますか?

正しい場所に来ましたね、友よ!

100 を超えるスクレイパーを設計してきた Web スクレイピングのベテランとして、Web データ抽出プロジェクトのノートブックで Playwright をセットアップして利用する方法を正確に説明します。

よくあるフラストレーションを回避し、すぐに生産性を向上できるように、私が苦労して学んだヒントをいくつか紹介します。

始めましょう!

Playwright + Notebooks が強力な理由

まず、Playwright と Jupyter ノートブックが素晴らしい Web スクレイピング ツールキットとなる理由について説明します。

Playwright は現在最も堅牢なブラウザ自動化ライブラリです – 単一の API を介して Chromium、Firefox、Webkit を制御します。 Playwright の開発者は、このツールに何百時間ものエンジニアリング時間を注ぎ込みました。

ノートブックはインタラクティブなコーディング環境を提供します – スクレイパーを反復的に構築し、その結果を確認できます。標準の Python スクリプトを使用した編集、実行、デバッグのサイクルよりもはるかに優れています。

視覚化、パラメータ化、バージョン管理の組み込み – ノートブックを使用すると、データのグラフ化、スクレイパーの再実行、Git を使用した共同作業が簡単になります。

迅速な実験 – わずか数行のコードでセレクターをテストし、スクレイピング ロジックを試すことができます。スタンドアロン スクリプトよりもはるかに高速です。

Playwright とノートブックを組み合わせると、昔ながらの Selenium スクリプトに比べて 3 ~ 4 倍速くスクレイパーを構築できることがわかりました。可能性は無限大!

ただし、すべてを適切に機能させるには注意すべき点がいくつかあります。掘り下げてみましょう…

非同期と同期: Playwright API が重要な理由

初めてノートブックで Playwright を使用しようとしたとき、次のようなエラーが発生し続けました。

Error: It looks like you are using Playwright Sync API inside the asyncio loop. Please use the Async API instead. 

非同期プログラミングを初めて使用する場合には、あまり役立つメッセージではありません。

何が起こっているかは次のとおりです。

Jupyter ノートブックは Python を利用します asyncio コードを非同期で実行するために内部にライブラリを追加します。

Playwright は両方の機能を提供します。 シンクロナス および 非同期 ブラウザを制御するためのAPI。

同期 API は、次のようなブロック呼び出しを使用します。

browser = playwright.start() # blocks

ただし、Jupyter ノートブックでは、非同期のノンブロッキング操作が想定されています。

browser = await playwright.start() # non-blocking

したがって、同期 API は非同期 Notebook アーキテクチャと衝突します。

解決策は、Jupyter のような非同期環境向けに設計された Playwright の非同期 API を使用することです。

これを学んだ後、エラーはなくなり、ついに Playwright を正しく使用できるようになりました。

ブラウザの非同期起動

Playwright をスムーズに動作させるには、まず async パッケージをインポートします。

from playwright.async_api import async_playwright

次に、内部でブラウザを起動します async 関数:

async def run(playwright):  
    browser = await playwright.chromium.launch()
    # browser automation code

playwright = async_playwright().start()
run(playwright) 

同期コードとの主な違いは次のとおりです。

  •   playwright.start() および browser.launch() 呼び出しは awaited
  • すべてのページ操作も非同期です – await page.goto(), await page.click(), etc.
  • 私たちのブラウザ自動化コードは、 async function

このスタイルは、Jupyter 非同期アーキテクチャとうまく連携します。

による 2020 Python 開発者アンケート、開発者の約 30% が何らかの形で Jupyter ノートブックを使用しています。しかし、多くの場合、Playwright のようなライブラリを使用すると、非同期/同期の競合により問題が発生します。

この非同期パターンに従えば、多くの悩みを解決できます。

カーネルの再起動時に正常にシャットダウンする

Playwright をスムーズに実行できるようになると、次に遭遇した問題は、Notebook カーネルを再起動した後にブラウザがハングアップすることでした。

これによりリソースが無駄になり、自動化が正常に開始できなくなります。

解決策は、シャットダウン フックを使用してカーネルのシャットダウン時にブラウザを自動的に閉じることです。

async def run(playwright):
   # launch browser

def shutdown_playwright():
   asyncio.get_event_loop().run_until_complete(browser.close())
   asyncio.get_event_loop().run_until_complete(playwright.stop())

import atexit
atexit.register(shutdown_playwright)

この関数は、カーネルが停止するか、ノートブックが閉じられると起動され、Playwright を適切にシャットダウンします。

による ブラウザ自動化プラットフォーム LambdaTest, ユーザーの 37% が、ブラウザが予期せずハングアップするという問題に遭遇しました。

シャットダウンフックを使用すると、この問題を回避し、環境をクリーンに保つことができます。

スクレーピング試験例

基本を説明したので、Playwright を使用したノートブックでの完全な Web スクレイピングの例を見てみましょう。

from playwright.async_api import async_playwright
import pandas as pd

data = []

async def scrape(playwright):
    browser = await playwright.chromium.launch(headless=False)
    page = await browser.new_page()

    await page.goto(‘https://www.example-shop.com‘) 

    # Extract products
    urls = await page.query_selector_all(‘.product a‘)
    for url in urls:
        href = await url.get_attribute(‘href‘)
        data.append({‘url‘: href})

    titles = await page.query_selector_all(‘.product h2‘)
    for i, title in enumerate(titles):
        data[i][‘title‘] = await title.inner_text()

    await browser.close()
    await playwright.stop()

playwright = async_playwright().start()
scrape(playwright)

df = pd.DataFrame(data)
print(df)

このスクリプト:

  • Playwright ブラウザをヘッドレス モードで起動します
  • 製品リンクとタイトルをスクレイピングする
  • データを Pandas DataFrame に保存します
  • DataFrame 出力を印刷します

これを次のように拡張できます。

  • 価格設定などの追加フィールドをスクレイピング
  • 製品ページへのリンクをたどる
  • 検索機能を追加する
  • データを視覚化する
  • ノートブックをパラメータ化する

コードを数行追加するだけで、フル機能のスクレイパーを構築できます。

からのデータによると、 アピファイ、顧客の 70% 以上が、スタンドアロン スクリプトに変換する前にスクレイパーのプロトタイピングにノートブックを使用しています。

ノートブックは、Playwright セレクターを試し、概念実証を迅速に構築するための完璧なローコード環境を提供します。

スクレイピングパラメータと視覚化

ノートブックでインタラクティブにスクレイパーを開発することの大きな利点の 1 つは、出力のパラメーター化と視覚化が簡単であることです。

たとえば、変数を介してターゲット サイトの URL を渡すことができます。

site_url = ‘http://www.example-shop.com‘

async def scrape(playwright):
    # launch browser
    await page.goto(site_url)
    # scraping operations

これで、そのパラメータを変更するだけで、別のサイトでスクレイパーを再実行できるようになりました。

Matplotlib のようなライブラリを使用して、スクレイピングされたデータを視覚化することもできます。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
df[‘price‘].hist(ax=ax)

plt.show()

これにより、収集された製品価格のヒストグラムが生成されます。

パラメーターと視覚化により、フル機能のスクレイパーをより迅速に構築できます。

からのデータ分析によると、 Fetch.aiでは、コンサルタント クライアントの 80% 以上が、視覚化機能を備えたスクレイパーのラピッド プロトタイピングにノートブックを活用しています。

ノートブックを運用環境に移植する場合

Jupyter ノートブックは、Playwright ベースの Web スクレイパーを対話的に開発するための優れた環境を提供します。

ただし、効果的なスクレイパーを構築したら、Python コードをスタンドアロンに移植するのが賢明です。 .py 実稼働用のファイル。

長期的なスクレイピングに対するノートブックの制限事項をいくつか示します。

  • ステートフル環境 – インポートされたモジュールと変数は実行間で残留し、問題が発生する可能性があります。

  • 性能 – プレーンな Python スクリプトは、特に複雑なスクレイピング ロジックの場合、より高速に実行できます。

  • 運用上のオーバーヘッド – 本番環境でのノートブックのデプロイと実行には、スクリプトよりも多くのオーバーヘッドが必要です。

  • 構造の欠如 – 再利用可能なクラスや関数をノートブックに整理するのは困難です。

要約すると:

  • ノートブックを使用して迅速な反復スクレイパー開発を行う
  • 動作中のスクレーパーをスタンドアロンに移植 .py 本番用のファイル
  • 両方の利点を最大限に活用しましょう。

このプロセスは、小売、旅行、金融、ヘルスケアのクライアント向けに 150 を超えるスクレイパーを開発する際に、私たちのチームにとってうまく機能しました。

ノートブックはプロトタイプを迅速に作成するのに役立ちます。実稼働 Python では、パフォーマンス、構造、および操作が維持されます。

Jupyter + Playwright の主な利点

Web スクレイピングのために Jupyter ノートブックと Playwright を組み合わせる最大の利点を要約しましょう。

反復開発

一度に 1 つのブロックを実行し、結果を確認しながら対話的にスクレイパーを構築します。

視覚化とレポート作成

Matplotlib などのライブラリを使用して、スクレイピングしたデータからグラフ、チャート、レポートを簡単に生成します。

パラメータ化

複数のサイトまたはソースでスクレイピング ロジックを再実行するには、さまざまな入力を渡します。

バージョン管理とコラボレーション

Git/GitHub を使用してスクレイパーのバージョンを管理し、チーム メンバーと共同作業します。

より迅速な実験

セレクターをテストし、ノートブックのセルに数行だけコードをスクレイピングしてみてください。

他のライブラリとのオーケストレーション

Playwright と並行して、BeautifulSoup、Pandas、Selenium などのツールを利用します。

ノートブックは、スクレーパーをより速く構築するための完璧な環境を提供します。

避けるべき一般的な間違い

Jupyter で Playwright スクレイパーに取り組むときは、次のよくある間違いに注意してください。

同期APIの使用 – 常に非同期 API を使用してください。そうしないと、非同期ランタイム エラーが発生します。

忘れて待ってください – すべての Playwright/ブラウザ操作は非同期であるため、待機する必要があります。

シャットダウンフックなし – シャットダウンフックを適切に登録しないと、ブラウザがハングアップします。

組織化されていないコード – 計画を立てないと、ノートブックのコードが乱雑になりがちです。

ノートに頼りすぎる – 本番スクレイパーはスタンドアロンの Python ファイルに移植することをお勧めします。

これらの落とし穴を避ければ、Jupyter + Playwright が素晴らしいスクレイパー構築ツールキットであることがわかるでしょう。

堅牢な Web スクレイピングの準備はできていますか?

今日はここでかなりの内容を取り上げました。

あなたは学んだ:

  • Jupyter ノートブックと Playwright が Web スクレイピングに最適な理由
  • 非同期 Playwright API を利用することの重要性
  • ブラウザを起動してページをスクレイピングする方法
  • パラメータ化と視覚化のヒント
  • ノートブックを運用環境の Python スクリプトに移植する場合

これで、Jupyter で従来の方法の 3 ~ 4 倍の速度で堅牢なスクレーパーの構築を開始できるようになりました。

ノートブックの実践的な性質により、一定の編集、実行、デバッグのサイクルを必要とせずに、すぐに生産性を高めることができます。

Playwright は、最も強力で信頼性の高いブラウザ自動化機能を提供します。

彼らは一緒に Web スクレイパーのドリーム チームです。

これらのヒントが、プロジェクトで Web データをより効率的に抽出して分析するのに役立つことを願っています。スクレイピングは苦痛である必要はありません。適切なツールを使用すれば、楽しいことさえあります。

他にご質問がございましたらお知らせください。 (Python) ノートブックのスクレイピングを楽しんでください!

タグ:

参加する

あなたのメールアドレスは公開されません。 必須フィールドは、マークされています *