Playwright を使って競合他社の価格トラッカーを構築する方法
Senior Web Scraping Engineer
要約
- 競合価格トラッカーには安定したオファーキーが必要です。 小売業者、バリアント、市場、販売者、購入タイプが一致していることを確認してから価格を比較します。
- Playwright はレンダリング済みの価格を待機できます。 ロケーターを商品サマリーにスコープし、レコメンド価格や参照価格を読み取らないようにします。
- 金額と通貨をセットで保持します。 表示文字列と 10 進数表現の両方を保存し、レビュー担当者がパーサーを監査できるようにします。
- 取得に失敗しても最後に取得した有効な価格は残します。 アクセス、ナビゲーション、パースの問題は収集モニタリングに送ります。
はじめに
1 つの商品ページには、セール価格、参照価格、関連商品の行が同じビューポート内に表示されることがあります。トラッカーが最初に見つかった通貨記号を読むだけだと、顧客が選択していないオファーを指してアラートを出してしまうことがあります。
以下の Playwright の例では、公開デモストアフロント上の 1 つの商品サマリー内の価格を読み取ります。実践的に重要なのは、抽出の後、いつ 2 つの価格が同じオファーを表していると判断するかという点です。
Playwright をインストールする
この例では、Playwright の Python パッケージと、インストール済みの Google Chrome を使用します。パッケージをプロジェクト環境にインストールし、ワーカー上で Chrome が利用可能であることを確認します。スケジューラーには明示的な商品 URL の許可リストを使い、ワーカーは 1 つから始めてください。
bash
python3 -m pip install playwright
トラッキング対象のオファーを設定する
トラッカーはページにアクセスする前に、比較キーを定義しておく必要があります。小売業者、商品またはバリアント、市場、販売者、購入タイプを含めます。比較チェックでは、通貨と単位ベースも保持します。Schema.org の Offer モデルは、オファーをその基になるアイテムと区別し、価格と通貨のプロパティを別々に持ちます。
オファーが市場ルーティングに依存している場合は、比較可能なキャプチャには同じ承認済みネットワークコンテキストを使用してください。価格モニタリングインフラストラクチャのワークフローではルーティングの選択肢を説明しています。このデモでは、ブラウザは 1 つの英国スタイルの表示を読み取り、GBP フォーマットを直接検証します。
Scrapeless でスクレイピングを始めましょう
Scrapeless で Web スクレイピングと自動化ワークフローを強化しましょう。
今すぐ登録して 5 ドル分の無料クレジット を獲得 — クレジットカードは不要です。今すぐ Scrapeless ダッシュボード で無料クレジットをお受け取りください。
公開デモページから 1 件のオファーを読む
Playwright によるキャプチャでは、ナビゲーションの確認、ユニークな価格ロケーターの待機、コンパクトな観測レコードの出力ができます。Playwright のロケーターリファレンスでは、ロケーターが要素をどのようにターゲットするか、複数の要素にマッチした場合に厳密な操作がどのように振る舞うかを説明しています。この例では、タイトルと価格の両方を同じ商品サマリーにスコープしています。
python
import json
import re
from datetime import datetime, timezone
from decimal import Decimal
from playwright.sync_api import sync_playwright
URL = "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"
with sync_playwright() as playwright:
browser = playwright.chromium.launch(channel="chrome")
try:
page = browser.new_page(locale="en-GB")
response = page.goto(URL, wait_until="domcontentloaded", timeout=20_000)
if response is None or not response.ok or page.url != URL:
raise RuntimeError("Expected the demo product page")
summary = page.locator(".product_main")
price = summary.locator(".price_color")
price.wait_for(state="visible", timeout=10_000)
display_price = price.inner_text().strip()
match = re.fullmatch(r"£([0-9]+\.[0-9]{2})", display_price)
if match is None:
raise ValueError("Unexpected demo price format")
print(json.dumps({
"product_key": "books-to-scrape:a-light-in-the-attic",
"title": summary.get_by_role("heading", level=1).inner_text(),
"final_url": page.url,
"offer_type": "listed",
"price": str(Decimal(match.group(1))),
"currency": "GBP",
"display_price": display_price,
"observed_at": datetime.now(timezone.utc).isoformat(),
}, ensure_ascii=False))
finally:
browser.close()
このスクリプトは、10 進数金額の文字列、表示された値、時刻を含むレコードを出力します。インターネットのタイムスタンプ標準では、異なるワーカー間で観測結果を整列できるよう、UTC オフセットの表現方法を定義しています。
成功したキャプチャを比較する
価格変化の判定では、同じオファーに対する直前の比較可能な観測結果と現在の観測結果を比較します。アラートを送信する前に両方を永続化します。ジョブが同じ値を再度見つけた場合は、レポート要件に応じて、価格履歴を変更せずにおくか、確認レコードを保存します。
| Capture result | Tracker action |
|---|---|
| Same offer and lower price | 価格の下落を記録し、両方の観測結果を関連付ける |
| Same offer and same price | 収集の健全性または確認を記録する |
| Currency or purchase type changed | 比較前にオファーキーを再確認する |
| Access challenge, missing price, or unexpected redirect | 収集上の問題を記録し、最後の有効な観測結果を保持する |
デモから実際の対象に切り替える際は、検証済みのロケールパーサーを使用し、価格のベースを保存してください。会員向けオファーと通常オファーは、別々の系列として扱うべきです。選択後にレンダリングされるページでは、選択済みバリアントを示すマーカーと価格領域を同時に待機します。パーサーのバージョンを保持しておくことで、ページのリデザイン後に誤ったアラートが出た場合でも原因を追跡できます。
Playwright をマネージドブラウザに移行すべきタイミング
ローカルワーカーから始めましょう。ワーカーの維持管理や繰り返し実行が現実的な制約になってきたら、Web オートメーション用マネージドブラウザへ移行します。ブラウザ概要ではクラウドセッションについて説明しており、Scrapeless の料金ページはその変更を見積もるのに役立ちます。Playwright のロケーターとオファーキーは自分の管理下に置いてください。Puppeteer プロキシワークフローでは関連するルーティングの問題を扱っています。
結論
このデモは 1 件の商品のオファーを出力します。同じアプローチを他の小売業者に適用する前に、価格のエリアが空の場合、通貨が変わる場合、ページがリダイレクトする場合にどうなるかをテストしてください。これらの観察結果のいずれも、最後に取得した比較可能な価格を置き換えるべきではありません。
競合価格トラッカーを作る準備はできましたか?
価格追跡ワークフローを構築している開発者と話すには、Discord または Telegram のコミュニティに参加してください。Scrapeless ダッシュボードでアカウントを作成して始めましょう。
FAQ
Q: 競合価格トラッカーはどれくらいの頻度で実行すべきですか?
チームがアラートをどう活用するかと、そのサイトの許容リクエスト数に合った頻度を選んでください。価格レポートと、タイムセンシティブなプロモーションの監視では、異なるスケジュールを使えます。
Q: Playwright を使った価格監視にはプロキシが必要ですか?
許可された地域ルートを使えば、ローカルなストアフロントビューを再現できます。単一市場向けのデモや、承認済みのローカルソースであれば、通常の接続を使えます。
Q: サイトがアクセスチャレンジを表示した場合、トラッカーはどうすべきですか?
失敗を記録し、サイト所有者とアクセス経路を見直してください。比較用のベースラインとして、直前の成功したオファーを保持します。
Q: これは AI エージェントなしで動かせますか?
Playwright とスケジューラを使えば、観測結果の収集と比較が可能です。制限された同時実行数で動かし、既知の商品ページで変更されたロケーターを検証してください。
Q: どんな競合のストアフロントでも監視できますか?
承認されたサーフェスを使い、適用される利用規約、収集制限、再利用権について、範囲が不明な場合は法務と確認してください。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。


