TikTokショップスクレイパーガイド:商品データ、価格、SKU
Advanced Data Extraction Specialist
TL;DR:
- TikTokショップスクレイパーは既知の製品から始まります。
product_idとregionをscraper.tiktok.shop.pageに送信します。 - 製品とバリアントの記録は別のテーブルが必要です。 製品レベルの価格、在庫、販売者、配送はSKUレベルのオプションと可用性を上書きしてはいけません。
- 地域と通貨はすべての観察に属します。 返された地域は解決されたページを表し、通貨は価格に意味を与えます。
- 販売ラベルには制限があります。
sold_countをそのまま保つ; GMV、発注台帳、または選択された期間の売上として再解釈してはいけません。 - スナップショットはモニタリングをサポートします。 アクターは製品データを返します; スケジューリングと履歴は呼び出しアプリケーションによって構築されます。
- 開始は無料です。 新しいScrapelessアカウントにはScrapeless Dashboardを通じて無料クレジットが含まれています。
はじめに: フィードを構築する前に製品をモデル化する
TikTokショップの製品ページは、製品のアイデンティティ、販売者のアイデンティティ、表示価格、集計在庫、選択可能なオプション、SKU、画像、評価、レビュー、カテゴリー、配送詳細など、いくつかの種類のデータを組み合わせています。それを1行に平坦化することは、製品に複数のバリアントがあるか、ある地域でフィールドが欠落している場合は機能しません。
Scrapeless TikTokショップスクレイパーは、既知の製品IDと地域から構造化された製品レスポンスを返します。このガイドはリクエストを示し、フィールドをマッピングし、製品とSKUの記録のためのクリーンなPythonノーマライザーを構築します。管理されたデータアクターによって使用される一般的なリクエストエンベロープについては、公開されたScrapelessデータアクターガイドをご覧ください。
TikTokショップスクレイパーが返すもの
scraper.tiktok.shop.page アクターは製品詳細のルックアップのために設計されています。以下を返すことができます:
- 製品ID、名前、地域、販売者、販売数
- 表示価格と通貨
- 集計在庫
- 評価とレビュー数
- 製品画像
- オプション定義とSKU記録
- SKUの可用性
- 販売者の詳細、カテゴリー、および配送情報
レスポンスは、収集時に要求された公開製品ページを説明します。これは完全なカタログエクスポート、チェックアウト結果、注文履歴、または自動価格履歴ではありません。
TikTokのコマースドキュメントは、製品APIの概要において、製品とSKUを区別しています。その区別は、スクレイピングされた製品ページの記録のための正しいデータベース境界でもあります: 1つの製品は多くの販売可能なバリアントを持つことができます。
リクエストパラメータ
エンドポイントは POST https://api.scrapeless.com/api/v1/scraper/request で、x-api-token で認証されます。
ボディには2つの必須入力があります:
| パラメータ | タイプ | 目的 |
|---|---|---|
product_id |
文字列 | ショップ製品ページを識別します |
region |
文字列 | リクエストの市場コンテキストを選択します |
ドキュメントには、GB、SG、JP、US のような地域の例が示されています。その短い例のセットを完全な市場ディレクトリとして扱わないでください。製品ワークフローで必要な市場を確認し、結果で返された地域を保持してください。
完全な入力および出力の例は、TikTokショップページアクタードキュメントにあります。
前提条件
- Scrapeless DashboardからのScrapelessアカウントとAPIトークン
- 既知の公開TikTokショップ製品ID
- 研究タスクに必要な市場地域
- 製品とSKUのスナップショットを別々に保持できるストレージスキーマ
コードは、SCRAPELESS_API_KEY にライブトークンが必要で、TIKTOK_SHOP_PRODUCT_ID に実際の製品IDが必要です。
curlを使用した迅速なキャプチャ
bash
curl --request POST 'https://api.scrapeless.com/api/v1/scraper/request' \
--header "x-api-token: ${SCRAPELESS_API_KEY}" \
--header 'content-type: application/json' \
--data "{\"actor\":\"scraper.tiktok.shop.page\",\"input\":{\"product_id\":\"${TIKTOK_SHOP_PRODUCT_ID}\",\"region\":\"GB\"}}"
レスポンスはJSONです。登録された application/json タイプはIANAのメディアタイプレジストリで維持されているため、標準のHTTPクライアントはサイト固有のデコーダなしでボディを解析できます。
Pythonで製品とSKUデータを正規化する
以下のノーマライザーは生のレスポンスを保持し、1つの製品記録を作成し、SKUごとに1行を出力します。すべてのオプションフィールドが存在するとは仮定せずに設計されています。
python
import json
import os
from datetime import datetime, timezone
from urllib.request import Request, urlopen
ENDPOINT = "https://api.scrapeless.com/api/v1/scraper/request"
def fetch_product(product_id, region):
payload = {
"actor": "scraper.tiktok.shop.page",
"input": {"product_id": str(product_id), "region": region},
}
request = Request(
ENDPOINT,
data=json.dumps(payload).encode(),
headers={
"x-api-token": os.environ["SCRAPELESS_API_KEY"],
"content-type": "application/json",
},
method="POST",
)
with urlopen(request, timeout=60) as response:
return json.load(response)
def normalize(raw):
observed_at = datetime.now(timezone.utc).isoformat()
product_id = str(raw.get("product_id", ""))
product = {
"observed_at": observed_at,
"product_id": product_id,
"region": raw.get("region"),
"name": raw.get("name"),
"seller": raw.get("seller"),
"price": raw.get("price"),
"currency": raw.get("currency"),
"stock": raw.get("stock"),
"sold_count": raw.get("sold_count"),
"rating": raw.get("rating"),
"review_count": raw.get("review_count"),
}
sku_rows = []
for sku in raw.get("skus") or []:
sku_rows.append({
"observed_at": observed_at,
"product_id": product_id,
"region": raw.get("region"),
"sku_id": str(sku.get("sku_id") or sku.get("id") or ""),
"options": sku.get("options"),
"availability": sku.get("availability"),
"price": sku.get("price"),
"currency": sku.get("currency") or raw.get("currency"),
})
return product, sku_rows
raw_product = fetch_product(os.environ["TIKTOK_SHOP_PRODUCT_ID"], "GB")
product_row, sku_rows = normalize(raw_product)
print(json.dumps({"product": product_row, "skus": sku_rows}, indent=2))
Scrapelessでスクレイピングを開始する
Scrapelessであなたのウェブスクレイピングと自動化ワークフローを強化しましょう!
今日サインアップして 5ドルの無料クレジットを獲得しましょう — クレジットカードは不要です。Scrapeless Dashboardで今すぐ無料クレジットを請求してください。
製品フィールドの読み方
アイデンティティと販売者
product_idを文字列として保存します。製品スナップショットと一緒に売り手オブジェクトまたは売り手識別子を保持します。名前だけでは耐久性のある結合キーにならないかもしれません。
価格と通貨
通貨と地域がない価格は不完全です。返された値を正確に保持し、その数値表現のみを別のフィールドで正規化します。ISO通貨コードリファレンスは、通貨識別子が金銭的価値の横にあるべき理由を説明しています。
在庫と可用性
製品レベルの在庫は集約ビューです。SKUの可用性は特定のオプションの組み合わせを説明します。TikTok Shopの在庫ドキュメントも、製品とSKUを別々の在庫次元として特定します。両方のレベルを保持し、欠落しているSKUフィールドを製品集約で置き換えることは避けてください。
売上数、評価、レビュー
sold_count、評価、およびレビュー数を観察されたラベルとして保持します。製品ページの売上数は報告ウィンドウを確立するものではなく、注文元帳を露出するものではありません。評価とレビュー数は、現在のページの応答を説明し、個別のレビューのテキストを示すものではありません。
オプションとSKU
オプションは色やサイズなどの次元を説明します。SKUレコードは、ページがそれらを露出する際の具体的な組み合わせを表します。古い行が壊れないように、正規化されたラベルの横に生のオプション構造を保存します。
スナップショット準備完了スキーマを構築する
実用的なモデルは三つのストアを使用します:
| ストア | キーフィールド | 理由 |
|---|---|---|
| 生の応答 | コレクションID、観察時間、製品ID、地域 | 後の再処理をサポート |
| 製品スナップショット | 観察時間、製品ID、地域、価格、通貨、在庫 | 製品レベルの比較をサポート |
| SKUスナップショット | 観察時間、製品ID、SKU ID、オプション、可用性 | バリアントレベルの比較をサポート |
欠落とゼロは異なります。ゼロ在庫は値です;欠損在庫は不明です。その区別をデータベース、分析ジョブ、アラートルールで保持してください。
Scrapelessは、このアクターを通じてScraping APIを提供します。製品セットとコレクションの周期をサイズ調整する際は現在の価格ページを使用してください。
防止すべき一般的な問題
- 数値の製品IDを送信すること。 設定、リクエスト、ストレージを通じて識別子を文字列として保持します。
- リクエスト後に地域を落とすこと。 地域は観察の一部であり、各正規化された行に含まれるべきです。
- すべての製品にSKUがあると仮定すること。 SKU配列が存在しない場合は空のリストを使用します。
- 欠落した可用性をゼロに変換すること。 出所が明確な状態を提供するまで、nullまたは欠落を保持してください。
- 売上数を収益と呼ぶこと。 このフィールドは価格×注文の元帳ではなく、GMVとして使用すべきではありません。
結論:製品の階層を保持する
信頼できるTikTok Shopスクレイパーは、既知の製品IDと地域から始まり、製品とSKUデータをその自然なレベルで保持します。その構造は、今すぐの一回限りのリサーチを有益にし、後でタイムスタンプ付きの比較をする余裕を残します。
TikTok Shopデータセットを構築する準備はできましたか?
Scrapeless DiscordまたはTelegramコミュニティでスキーマについて議論してください。製品リストと地域ルールが準備できたら、Scrapeless ダッシュボードを開いてください。
FAQ
Q: TikTok Shopスクレイパーは何を収集しますか?
ここで扱うアクターは、既知の公共製品ページの製品、売り手、価格、通貨、在庫、評価、レビュー数、画像、オプション、SKU、カテゴリ、および可能な場合の配送フィールドを収集します。
Q: PythonでTikTok Shop製品をスクレイピングするにはどうすればよいですか?
アクターscraper.tiktok.shop.pageを使用して、Scrapeless Scraper APIにJSON POSTリクエストを送信してください。また、入力オブジェクトにproduct_idとregionを含めます。
Q: アクターはショップ内のすべての製品を発見できますか?
いいえ。この製品ページアクターは既知の製品IDを期待しており、完全なカタログ発見APIとして説明すべきではありません。
Q: レスポンスには製品バリアントが含まれますか?
オプションや可用性のあるSKUレコードを含むことができます。それらのレコードは製品レベルのフィールドとは別に保持してください。
Q: アクターは価格を自動的に追跡しますか?
いいえ。スナップショットを返します。あなたのアプリケーションが呼び出しをスケジュールし、タイムスタンプを保存し、スナップショットを比較し、警告を送信します。
Q: TikTok Shopデータのスクレイピングは合法ですか?
合法性は市場、目的、データ、アクセス方法、および適用される規約によって異なります。許可された目的のために公共の製品データを収集し、対象地域に対する義務を確認してください。
Q: プロキシまたはページ防御パーサーを管理する必要がありますか?
管理されたアクターがコレクションの表面を扱います。あなたのコードは有効な製品コンテキストを提供し、構造化された応答を処理します。
Q: AIエージェントなしでこれを実行できますか?
はい。この例は通常のHTTPリクエストを使用しており、エージェントには依存していません。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



