価格とSKUを混在させずに商品バリアントをスクレイピングする方法
Scrapeless Agent Browser は、マネージドブラウザセッション内で、動的な商品ページと選択済みバリアントの状態を検査できるようにします。
要約
- バリアントの同一性は価格と一緒に移動しなければならない。 オプションの組み合わせと、元のバリアント識別子を同じ観測結果の中に記録する。
- 商品ミニマムは探索のための値である。 それはすべてのサイズや色に対するオファーを確立するものではない。
- 選択には観測可能な完了条件が必要である。 クリック直後に読み取ると、以前のオプションを取得してしまうことがある。
- 不完全なカバレッジには明示的なステータスが必要である。 アクセス可能な商品レスポンスがあっても、すべてのバリアントが返されたことの証明にはならない。
パイプラインの概観: オファーの境界を守る
バリアント抽出パイプラインは、商品を発見し、有効なオプションを列挙し、各バリアントに対するオファーを収集し、その対応関係を検証し、観測結果を保存します。この対応関係は、価格フィールドが存在するかどうかより重要です。完璧に構文解析された金額でも、間違ったサイズに紐づいていれば、それは依然として誤ったデータです。
関連アイテムをまとめるために商品ファミリーを使い、購入可能な構成を区別するためにバリアント識別子を用い、変化する商業的事実にはオファーレコードを用いてください。 ProductGroup モデル は、共有される商品特性とバリアントを分離します。自分のテーブルでは異なる名称を使ってもかまいませんが、その境界は維持してください。
価格設定アプリケーションでは、成功を「確定した商品、確定したバリアント、金額、通貨、市場、および観測時刻」と定義してください。空のSKUが正当な場合もあります。バリアントと価格の対応が不確実な場合、そのレコードはアラートや価格再設定をブロックすべきです。 バリアント単位の価格モニタリングパイプライン は、そうした観測結果がより大きなアプリケーションのどこに位置付けられるかを示します。
前提条件: バリアントの意味を定義する
収集を始める前に、承認済みの商品ウォッチリスト、許可されたアクセス方法、対象市場、および想定するオプション次元を用意します。サイズ、色、素材、パック数量、コンディション、サブスクリプションの選択など、そのフィールドが購入対象のアイテムを変える場合は含めてください。どの属性がバリアントを識別し、どの属性がそのオファーを記述するのかを文書化します。
また、実際のストアフロントに適合した抽出器、観測結果を保持する場所、そして扱いづらい商品を含むレビューセットも必要です。オプションが1つだけの商品、利用できない組み合わせを持つ商品、オプションによって価格が変わる商品を含めてください。この記事は抽出の契約を定義するものであり、万能なセレクタやライブのマーチャントエクスポートを主張するものではありません。
SKU値は先頭のゼロを含めてテキストとして保存してください。すべての識別子には、ソースまたはマーチャントごとに名前空間を付けます。マーチャントはSKUを再利用したり、空のままにしたり、変更したりすることがあるため、SKU単体はグローバルな商品キーとして不適切です。ストアフロントがソースバリアントIDを公開している場合は、それを保持してください。
ステージ 1: バリアントを平坦化せずに商品を発見する
商品発見では、バリアントオファーを生成する前に、親URLとソース識別子を生成すべきです。リスティングカードには、開始価格、価格帯、分割払い金額、またはプロモーションメッセージが表示されることがあります。商品レベルの検査でそれらの意味が確立されるまで、それらのフィールドはディスカバリーレコードと一緒に保持してください。
必要な情報が含まれている場合は、公的に文書化された構造化レスポンスや安定した商品リンクを優先してください。埋め込まれた構造化データは、商品を特定するのに役立ちますが、それが選択された1つのオファーを記述しているのか、バリアント全体を記述しているのかを確認してください。 Product vocabulary は記述的な識別子をサポートしますが、マークアップが存在すること自体は、完全性や鮮度を保証するものではありません。
選択されたバリアントをエンコードするクエリパラメータは保持してください。商品状態に影響しないことを確認した後にのみ、トラッキングパラメータを削除します。ソースの証拠が再現可能なように、正規の商品URLと並行して元のURLも保持してください。選択されたサイズ情報を失う短縮URLは、正しいレコードのレビューを不可能にするおそれがあります。
ステージ 2: 有効な組み合わせを列挙する
バリアントの列挙は、ストアフロントが実際にサポートしている組み合わせに従うべきです。目に見えるすべてのオプションの直積を取ると、存在したことのない構成を作り出してしまうことがあります。色の選択によって提供されるサイズが変わることがあり、バンドルセレクタは単に価格だけでなく、商品そのものの同一性を変えることもあります。
バリアントID、オプション名、オプション値、ディスカバリーステータスを含む列挙テーブルを構築してください。構造化されたソースが明示的なバリアントを返す場合は、そのレコードを組み合わせの初期インベントリとして使用します。そのインベントリを代表的な商品の可視コントロールと比較してください。上限付きレスポンス、隠れたオプション、説明できない差異にはレビュー用のフラグを立てます。
インターフェースだけが組み合わせを公開している場合は、1つのオプション経路を選んで、その結果としての同一性を取得してください。サポートされていない組み合わせは、存在するが現在利用不可のバリアントとは区別して記録します。これらは異なる問いに答えるものです。前者はカタログを、後者は現在のオファーを表します。
ステージ 3: 同一性と価格を同時に読み取る
抽出ステップでは、確定したバリアントの同一性とそのオファーを、同じ安定したページ状態から読み取る必要があります。 Agent Browserを使うと、自動化処理がストアフロントとのインタラクションを制御できます。ブラウザはレンダリング済みのアクセスを提供しますが、選択されたオプションが準備完了かどうか、どのノードがそのオファーに属するかを判断するのはコレクターの役割です。
オプションを選択した後は、商品特有のマーカーを待ってください。変更されたバリアントID、更新された選択済みオプションのテキスト、または要求したバリアントに対応する識別子を持つ価格要素などです。待機には上限を設けます。スピナーが消えただけでは、識別子と金額が同時に変わる場合ほど強い証拠にならないことがあります。
価格抽出の範囲は、商品のメイン購入エリアに限定してください。現在価格、比較価格、分割払いテキスト、サブスクリプション価格は別々のフィールドに保持します。 Offer モデル アイテムそのものと、そのアイテムが提示される条件との間に有用な区別を与えます。無関係なレコメンデーションカードで、通常の購入価格を上書きしてはいけません。
| 項目 | 意味 | 検証結果 |
|---|---|---|
| source_variant_id | ストア内ローカルなバリアント識別子 | 選択したソースから提供される場合は必須 |
| sku | マーチャントが割り当てた在庫コード | NULL 可能なテキスト。単独でグローバル結合に使ってはならない |
| options | 名前付きオプションの組み合わせ | 選択されたバリアントと一致している必要がある |
| price_amount と currency | 1 つの観測されたオファー | 単位や通貨が未確定のときは保留する |
| coverage_status | 列挙の完全性 | 部分的な集合であることを区別できるように保つ |
ステージ 4: 保存前にバリアントのマッピングをテストする
検証では、レコードが最新価格テーブルに到達する前に、重複したバリアント観測や金銭的コンテキストの欠如を却下する必要があります。次のローカルな Python 例は、あえて説明的な入力を用いており、実際のストアフロントを収集するのではなくマッピング契約をチェックします。サンプルレコードは、承認済みエクストラクタからの観測値に置き換えてください。
どちらの例示的なバリアントも同じ商品の一部ですが、それぞれが独自の SKU と金額を持ち続けます。重複チェックは、ソース、親商品、バリアント、および市場を利用します。利用不可のオファーにも表示価格がある場合があるため、在庫状況は別個のフィールドであり、別のバリアントの金額をコピーする理由として扱うべきではありません。
# Illustrative records; no merchant data is represented.
rows = [
dict(source="demo", product="coat", variant="blue-s", market="GB",
sku="001-S", amount="45.00", currency="GBP"),
dict(source="demo", product="coat", variant="blue-m", market="GB",
sku="001-M", amount="49.00", currency="GBP"),
]
seen = set()
for row in rows:
key = tuple(row[k] for k in ("source", "product", "variant", "market"))
assert key not in seen, "duplicate variant observation"
assert row["amount"] and row["currency"], "incomplete monetary context"
seen.add(key)
print([(r["variant"], r["sku"], r["amount"]) for r in rows])ステージ 5: 履歴を保持し、誤った関連付けを診断する
追記専用の観測履歴は、バリアントの誤りを診断可能にします。要求されたオプションと観測されたオプション、抽出方法、元の価格テキスト、正規化された金額、通貨、取得時刻、そして許可された証拠への参照を保持してください。最新ビューのテーブルは、基盤となる観測値を置き換えることなくアプリケーションに提供できます。
突発的な価格変動を調査するときは、金額より先にアイデンティティを確認してください。選択オプションはリセットされていないか。ロケールは変わっていないか。サブスクリプションのトグルが有効になっていないか。これらの条件による差異は、同一オファーの価格変動というよりも、コンテキストの変化である可能性があります。
構造化データとレンダリングされた値が矛盾する場合はレビューキューを使用してください。どちらの値を最初にパースできたかに黙って従うのではなく、宣言されたソース優先順位を採用しましょう。親ページ数だけで予算を立てるのではなく、検証済みオファーごとに必要なやり取りや証拠を含めて、必要な作業量に対する Scrapeless の料金 を確認してください。
結論: バリアントの結合を明示的にする
商品バリアントを確実にスクレイプするには、探索とオファー収集を分離し、あらゆる変換を通じてアイデンティティを紐付けたままにしてください。有用な出力とは、カバレッジが宣言された、根拠のあるバリアント観測の集合です。まずは範囲を絞ったウォッチリストから始め、難しいオプションの組み合わせを検証し、そのマッピングがストアフロントとの手動比較に耐えるのを確認してから、範囲を広げてください。
スクレイプによる商品バリアントワークフローを構築する
上記の収集と検証の判断を、Scrapeless を用いて承認済みの EC ソースに適用してください。
今すぐ登録して $5 分の無料クレジットを獲得 — クレジットカードは不要.
$5 クレジットを受け取る →FAQ
Q: 商品の最安値はすべてのバリアントを代表できますか?
ソースが同一オファーであることを保証しない限り、商品の最安値がすべてのバリアントを代表することはできません。最小値は商品サマリーとして保存し、バリアントごとの金額は別途収集してください。この区別により、安価なサイズ 1 つが、他のすべてのサイズの価格履歴を変えてしまうことを防げます。
Q: 空の SKU はどのように扱うべきですか?
空の SKU は null のまま保持し、利用可能であれば別のソースバリアント識別子を保持してください。タイトルから在庫コードをでっち上げてはいけません。アイデンティティを確立できない場合は、その観測値の金額を推測したバリアントに紐付けるのではなく、レビュー用として保持してください。
Q: ブラウザセッションにはプロキシが必要ですか?
プロキシの必要性は、観測対象として許可されているソースと市場に依存します。国別ルーティングは、一貫した市場コンテキストを支援できますが、実際にストアフロントで選択されている国と通貨を確認してください。ルーティングだけでは、要求されたバリアントやローカルオファーが有効であることは保証されません。
Q: ページレイアウトが変わったり、チャレンジが出てきた場合はどうなりますか?
レイアウトの変更やアクセス上の課題が発生した場合は、推測した価格ではなく抽出ステータスを出力すべきです。商品エリアを確認し、安定した識別子を精査し、影響を受けた抽出ロジックを修正してください。チャレンジに関するコンテンツはオファーテーブルに含めず、ソースのアクセス条件を見直してください。
Q: これはAIエージェントなしで実行できますか。また、どの程度の並列性が適切ですか?
決定論的なオートメーションにより、AIエージェントなしでバリアントのワークフローを実行できます。ホストごとに上限付きのワーカープールを用い、その規模は許可されたトラフィック量と観測されたサイトの挙動から決定してください。クラウド容量をターゲットサイトのトラフィック許容量と解釈するのではなく、控えめな設定から開始しましょう。
Q: 公開されているバリアントデータは制限なく収集できますか?
公開されているという事実だけでは、収集や再利用の権限の有無は決まりません。収集の前に、マーチャントの利用規約、適用される要件、および承認された監視範囲を確認してください。ジョブは公開されている商品情報に焦点を当て、アカウント限定または制限付きカタログデータは除外してください。