返回博客

TikTok商店产品研究:比较产品观察清单

Ava Wilson
Ava Wilson

Expert in Web Scraping Technologies

03-Sep-2026

TL;DR:

  • TikTok Shop 产品研究需要提供监视列表。 Shop 页面参与者评估已知产品;它不会发现所有的流行或高潜力商品。
  • 可比行需要类别和市场背景。 将类似产品分组,并保留返回的区域和货币后再比较价格。
  • 产品和 SKU 记录回答不同的问题。 显示的产品价格不能自动代表每个变体。
  • sold_count 在记录的响应中没有共享的最近销售窗口。 它不应该决定哪个产品现在销售得更快。
  • 评分和评论数量需要覆盖标签。 缺失值仍然未知,并不会变成零质量评分。
  • 免费开始。 新的 Scrapeless 账户通过 Scrapeless Dashboard 包括免费的信用。

Introduction: product research begins before the API call

研究表仅与候选列表和其后的比较规则一样好。混合不相关的类别、地区、货币和变体结构会产生一个看似准确但无法回答任何稳定商业问题的排名。

该工作流程以用户策划的 TikTok Shop 产品监视列表开始。它收集公共产品快照,分离产品和 SKU 字段,检查比较范围,并生成供人工审阅的表格。它不声称自动产品发现或普遍的“获胜产品”评分。

当决策依赖于重复观察而不是一次监视列表审查中的变化时,请使用 TikTok Shop 价格跟踪教程

Pipeline at a Glance

阶段 研究问题 输出
框架 正在研究哪个类别、市场和决策? 研究简报
监视 哪些已知产品属于范围内? 候选监视列表
收集 每个公共产品页面现在暴露了什么? 原始快照
归一化 哪些字段是产品级别或 SKU 级别? 可比表
审阅 哪些结论得到了支持或尚未解决? 决策工作表

该管道支持已知候选集的证据收集。搜索、趋势发现、利润、转化和供应商验证需要额外的数据。

Prerequisites

  • Scrapeless Dashboard 获取的 Scrapeless 账户和 API 令牌
  • 包含产品 ID、请求区域、类别组和内部备注的 CSV 监视列表
  • 针对货币、变体和缺失值的书面比较政策
  • 用于收集块的 SCRAPELESS_API_KEY 中的有效令牌

API 示例是一个前提差距,因为有效凭证和产品监视列表属于读者。代码不包含隐藏的示例产品或虚构的响应。

Stage 1: Define the Research Question and Watchlist

开始于一个可以审查的决策:比较选定产品在一个类别和市场中的公共报价结构,或检查哪些候选具有所需的变体和运输信息。

监视列表应包含:

  • candidate_id,一个内部字符串键
  • product_id,存储为文本
  • request_region
  • category_group
  • inclusion_reason
  • 可选内部成本、合规性或供应商审查字段保留在公共响应之外

不要请求收集者决定哪些产品是“最佳”。名单记录了每个候选进入研究的理由,并让审评者识别选择偏差。

Stage 2: Collect a Current Product Snapshot

scraper.tiktok.shop.page 参与者接受 product_idregion。响应可以包括产品身份、解析区域、卖家、名称、sold_count、嵌套价格数据、产品库存、评分、评论数量、图像、选项、SKU、类别和运输详细信息。

在构建研究表之前,保存带有收集时间戳的原始响应。稍后的解析器更改可以应用,而不需要假装转换后的行是原始来源。

HTTP 请求使用 JSON 和 x-api-token 头。 HTTP 语义 定义请求-响应模型,而 Python 的 JSON 模块文档 涵盖了下面使用的序列化。

开始使用 Scrapeless 抓取

利用 Scrapeless 功能提升您的网页抓取和自动化工作流程!
今天注册并获得 $5 的免费信用无须信用卡

立即在 Scrapeless Dashboard 领取您的免费信用。

第3阶段:构建产品和SKU研究表

产品行包含当前展示上下文:产品ID、返回的区域、卖家ID、名称、类别、销售价格和原始价格、货币、总库存、评级、评论数量、销售数量和收集时间。

SKU行包含变体上下文:产品ID、返回的区域、SKU ID、选项对、SKU级别价格、可用数量、库存标志和收集时间。

TikTok Shop的库存搜索接口区分产品和SKU标识符,强调需要两个表。ISO货币代码参考解释了为什么货币代码必须与每个数字价格一起携带。

注意:下面的代码需要SCRAPELESS_API_KEY中的实时Scrapeless API令牌和读者提供的product-watchlist.csv

python Copy
import csv
import json
import os
from datetime import datetime, timezone
from urllib.request import Request, urlopen

ENDPOINT = "https://api.scrapeless.com/api/v1/scraper/request"
TOKEN = os.environ["SCRAPELESS_API_KEY"]


def fetch_product(product_id, region):
    data = json.dumps({
        "actor": "scraper.tiktok.shop.page",
        "input": {"product_id": str(product_id), "region": region},
    }).encode()
    request = Request(
        ENDPOINT,
        data=data,
        headers={"x-api-token": TOKEN, "content-type": "application/json"},
        method="POST",
    )
    with urlopen(request, timeout=60) as response:
        return json.load(response)


with open("product-watchlist.csv", newline="", encoding="utf-8") as source:
    watchlist = list(csv.DictReader(source))

product_rows = []
sku_rows = []

for candidate in watchlist:
    raw = fetch_product(candidate["product_id"], candidate["request_region"])
    collected_at = datetime.now(timezone.utc).isoformat()
    product_id = str(raw.get("product_id") or candidate["product_id"])
    region = str(raw.get("region") or "")
    price = raw.get("price") or {}
    stock = raw.get("stock") or {}

    with open(f"{candidate['candidate_id']}-raw.json", "w", encoding="utf-8") as output:
        json.dump(raw, output, ensure_ascii=False, indent=2)

    product_rows.append({
        "candidate_id": candidate["candidate_id"],
        "category_group": candidate["category_group"],
        "collected_at": collected_at,
        "product_id": product_id,
        "region": region,
        "seller_id": str(raw.get("seller_id") or ""),
        "name": raw.get("name"),
        "currency": price.get("currency"),
        "sale_price": price.get("sale_price"),
        "original_price": price.get("original_price"),
        "available_quantity": stock.get("available_quantity"),
        "in_stock": stock.get("in_stock"),
        "rating": raw.get("rating"),
        "review_count": raw.get("review_count"),
        "sold_count": raw.get("sold_count"),
    })

    for sku in raw.get("skus") or []:
        sku_price = sku.get("price") or {}
        sku_rows.append({
            "candidate_id": candidate["candidate_id"],
            "product_id": product_id,
            "region": region,
            "sku_id": str(sku.get("sku_id") or ""),
            "options": " | ".join(
                f"{v.get('name', '')}={v.get('value', '')}"
                for v in (sku.get("options") or [])
            ),
            "currency": sku_price.get("currency"),
            "sale_price": sku_price.get("sale_price"),
            "available_quantity": sku.get("available_quantity"),
            "in_stock": sku.get("in_stock"),
            "collected_at": collected_at,
        })

for filename, rows in (("products.csv", product_rows), ("skus.csv", sku_rows)):
    if not rows:
        continue
    with open(filename, "w", newline="", encoding="utf-8") as output:
        writer = csv.DictWriter(output, fieldnames=rows[0].keys())
        writer.writeheader()
        writer.writerows(rows)

这两个导出保留了它们的详细程度。一个产品可以有一个显示价格,而单个SKU暴露其自己的价格或可用性。

第4阶段:在排名前应用比较规则

仅当研究问题支持时才比较候选项:

检查 安全处理
类别 在声明的类别组内比较产品
区域 使用返回区域并避免跨市场可用性声明
货币 仅在同一货币内比较原始价格
变体覆盖 报告SKU数量和价格范围,而不是一个任意SKU
缺失评级 保持未知,不要转换为零
销售数量 作为一个累计外观字段保留,且没有共享的最近窗口

sold_count并未建立最近的速度、净销售、退款、收入或GMV。两个产品可能有不同的年龄和观察窗口,因此较大的值并不能证明当前需求更强。

第5阶段:创建产品研究工作表

最终工作表应该支持人类决策,而不是将其隐藏在分数后面。包括:

  • 候选人身份和包含原因
  • 返回的市场和货币
  • 当前产品价格加上SKU价格范围
  • 产品级别和变体级别的可用性覆盖
  • 带有缺失值标志的评级和评论数量
  • 带有范围警告的销售数量字段
  • 研究简介所需的卖家、类别和运输字段
  • 评审员结论:继续、保持、拒绝或证据不足

外部成本、佣金、利润、供应商可靠性、监管检查和转换数据必须来自适当的第一方或内部来源。仅靠Shop快照无法回答这些问题。

负责任地处理产品研究

仅存储项目所需的公共产品字段。保持内部供应商或评审员笔记的访问控制,并避免在源URL足够时复制产品图像。NIST隐私框架为定义收集目的、访问和保留提供了总体指导。

Scrapeless通过抓取API提供Shop快照。在收集更大的观察列表之前,请查看当前定价页面

结论:将决策保持在收集者之外

TikTok Shop的产品研究在观察列表、类别规则和决策标准明确时效果最佳。行动者提供当前的公共产品和SKU观察;研究工作表保留了范围、不确定性和在商业决策之前仍然缺失的证据。

准备比较产品观察列表吗?

加入Scrapeless DiscordTelegram社区讨论产品表设计。当候选列表准备好时,在Scrapeless仪表板创建一个账户。

常见问题

问:商店参与者可以自动发现流行产品吗?

商店页面参与者评估已知的产品ID和区域。产品发现和趋势排名需要一个单独的候选来源和方法论。

问:哪些字段适用于TikTok Shop产品比较?

比较可以包括返回区域、货币、产品和SKU价格、变体可用性、评级、评论数量、类别、卖家字段和运输详情(如有)。

问:较大的销售数量是否能证明最近的销售更强?
更高的销量并不能证明最近的销售更强,因为记录的响应没有提供共享的最近报告窗口、退款或完整的订单总账。

问:缺失的评分是否应该存储为零?

缺失的评分应该保持未知。零是一个确定的值,会扭曲过滤或排名。

问:我需要管理代理或产品页面解析器吗?

演员在API请求后处理其收集表面。调用者定义观察列表、比较规则、存储和审查过程。

问:收集公共产品数据合法吗?

合法性取决于管辖权、市场、目的、访问方式和适用条款。出于许可目的使用公共数据,并为预期工作流程获得法律建议。

在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。

最受欢迎的文章

目录