Investigación de Productos en TikTok Shop: Comparar una Lista de Productos
Expert in Web Scraping Technologies
TL;DR:
- La investigación de productos de TikTok Shop necesita una lista de vigilancia suministrada. El actor de la página de la tienda evalúa productos conocidos; no descubre todos los artículos de tendencia o de alto potencial.
- Las filas comparables requieren contexto de categoría y mercado. Agrupa productos similares y mantiene la región y la moneda devueltas antes de comparar precios.
- Los registros de productos y SKU responden preguntas diferentes. Un precio de producto mostrado no puede representar automáticamente cada variante.
sold_countno tiene una ventana de ventas recientes compartida en la respuesta documentada. No debería decidir qué producto se vende más rápido ahora.- Las calificaciones y las cuentas de reseñas necesitan etiquetas de cobertura. Los valores faltantes permanecen desconocidos y no se convierten en puntajes de calidad cero.
- Gratis para comenzar. Nuevas cuentas de Scrapeless incluyen crédito gratuito a través del Panel de Scrapeless.
Introducción: la investigación de productos comienza antes de la llamada a la API
Una tabla de investigación es tan buena como la lista de candidatos y las reglas de comparación que la respaldan. Mezclar categorías no relacionadas, regiones, monedas y estructuras de variantes crea un ranking que parece preciso pero no responde a ninguna pregunta comercial estable.
Este flujo de trabajo comienza con una lista de vigilancia de productos de TikTok Shop curada por el usuario. Recoge instantáneas públicas de productos, separa los campos de producto y SKU, verifica el alcance de comparación y produce una tabla para revisión humana. No reclama descubrimiento automático de productos ni un puntaje “de producto ganador” universal.
Utiliza el tutorial de seguimiento de precios de TikTok Shop cuando la decisión dependa de cambios a través de observaciones repetidas en lugar de una revisión de lista de vigilancia.
Pipeline a Primera Vista
| Etapa | Pregunta de investigación | Salida |
|---|---|---|
| Marco | ¿Qué categoría, mercado y decisión se están estudiando? | Breve de investigación |
| Vigilancia | ¿Qué productos conocidos pertenecen al alcance? | Lista de vigilancia de candidatos |
| Recoger | ¿Qué expone ahora cada página de producto público? | Instantáneas en bruto |
| Normalizar | ¿Qué campos son a nivel de producto o a nivel de SKU? | Tablas comparables |
| Revisar | ¿Qué conclusiones están apoyadas o no resueltas? | Hoja de decisiones |
El pipeline apoya la recopilación de evidencia para un conjunto de candidatos conocido. La búsqueda, descubrimiento de tendencias, margen, conversión y validación de proveedores requieren datos adicionales.
Prerrequisitos
- Una cuenta de Scrapeless y un token de API del Panel de Scrapeless
- Una lista de vigilancia CSV con ID de producto, región de solicitud, grupo de categoría y notas internas
- Una política de comparación escrita para moneda, variantes y valores faltantes
- Un token en vivo en
SCRAPELESS_API_KEYpara el bloque de recolección
El ejemplo de API es una brecha de prerrequisitos porque un credencial en vivo y una lista de vigilancia de productos pertenecen al lector. El código no contiene un producto de ejemplo oculto ni una respuesta fabricada.
Etapa 1: Definir la Pregunta de Investigación y la Lista de Vigilancia
Comienza con una decisión que puede ser revisada: compara la estructura de oferta pública de productos seleccionados en una categoría y mercado, o inspecciona qué candidatos tienen la información de variante y envío requerida.
La lista de vigilancia debe contener:
candidate_id, una clave de cadena internaproduct_id, almacenada como textorequest_regioncategory_groupinclusion_reason- campos de coste interno opcionales, cumplimiento o revisión de proveedores mantenidos fuera de la respuesta pública
No preguntes al recopilador que decida qué productos son los “mejores.” El registro mantiene el motivo por el cual cada candidato ingresó al estudio y permite a un revisor identificar sesgos de selección.
Etapa 2: Recoger una Instantánea Actual del Producto
El actor scraper.tiktok.shop.page acepta product_id y region. Una respuesta puede incluir identidad de producto, región resuelta, vendedor, nombre, sold_count, datos de precio anidados, stock del producto, calificación, cuenta de reseñas, imágenes, opciones, SKUs, categorías y detalles de envío.
Guarda la respuesta en bruto con una marca de tiempo de recolección antes de construir la tabla de investigación. Un cambio posterior en el analizador puede entonces aplicarse sin pretender que la fila transformada fue la fuente original.
La solicitud HTTP utiliza JSON y el encabezado x-api-token. Semántica HTTP define el modelo de solicitud-respuesta, mientras que la documentación del módulo JSON de Python cubre la serialización utilizada a continuación.
Comienza a Raspar con Scrapeless
Potencia tu flujo de trabajo de raspado web y automatización con Scrapeless!
Regístrate hoy y recibe $5 en crédito gratis — sin necesidad de tarjeta de crédito.Reclama tu crédito gratuito ahora en el Panel de Scrapeless.
Etapa 3: Construir tablas de investigación de productos y SKU
Las filas de productos contienen el contexto de visualización actual: ID del producto, región devuelta, ID del vendedor, nombre, categoría, precio de venta y precio original, moneda, stock agregado, calificación, conteo de reseñas, conteo de vendidos y tiempo de recolección.
Las filas de SKU contienen el contexto de variante: ID del producto, región devuelta, ID del SKU, pares de opciones, precio a nivel de SKU, cantidad disponible, bandera de en stock y tiempo de recolección.
La interfaz de búsqueda de inventario de TikTok Shop distingue entre identificadores de productos y SKU, reforzando la necesidad de dos tablas. La referencia de código de moneda ISO explica por qué el código de moneda debe viajar con cada precio numérico.
Nota: El código a continuación requiere un token de API de Scrapeless en
SCRAPELESS_API_KEYy unproduct-watchlist.csvproporcionado por el lector.
python
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)
Las dos exportaciones preservan su nivel de detalle. Un producto puede tener un precio mostrado mientras que los SKU individuales exponen su propio precio o disponibilidad.
Etapa 4: Aplicar reglas de comparación antes de clasificar
Compara candidatos solo cuando la pregunta de investigación lo apoye:
| Verificación | Tratamiento seguro |
|---|---|
| Categoría | Compara productos dentro del grupo de categoría declarado |
| Región | Usa la región devuelta y evita reclamaciones de disponibilidad entre mercados |
| Moneda | Compara precios en bruto solo dentro de la misma moneda |
| Cobertura de variantes | Informa el conteo de SKU y el rango de precios en lugar de un SKU arbitrario |
| Calificación faltante | Mantén desconocido; no conviertas a cero |
| Conteo de vendidos | Preserva como un campo de página que parece acumulativo sin una ventana reciente compartida |
sold_count no establece velocidad reciente, ventas netas, reembolsos, ingresos o GMV. Dos productos pueden tener edades y ventanas de observación diferentes, por lo que un valor más grande no prueba una demanda actual más fuerte.
Etapa 5: Crear la hoja de trabajo de investigación de producto
La hoja de trabajo final debe apoyar una decisión humana en lugar de ocultarla detrás de una puntuación. Incluir:
- Identidad del candidato y razón de inclusión
- Mercado devuelto y moneda
- Precio del producto actual más rango de precios de SKU
- Cobertura de disponibilidad a nivel de producto y a nivel de variante
- Calificación y conteo de reseñas con banderas de valor faltante
- Campo de conteo de vendidos con una advertencia de alcance
- Campos de vendedor, categoría y envío necesarios por el informe de investigación
- Conclusión del revisor: continuar, mantener, rechazar o evidencia insuficiente
Los costos externos, comisiones, márgenes, confiabilidad del proveedor, verificaciones regulatorias y datos de conversión deben ser unidos de fuentes de primera mano o internas apropiadas. La instantánea de la tienda por sí sola no puede responder a esas preguntas.
Manejar la investigación de productos de manera responsable
Almacena solo los campos públicos de productos necesarios para el proyecto. Mantén las notas internas de proveedores o revisores controladas por accesos y evita copiar imágenes de productos cuando una URL fuente sea suficiente. El Marco de Privacidad de NIST proporciona orientación
Una mayor cantidad de ventas no prueba ventas recientes más sólidas porque la respuesta documentada no proporciona una ventana de informes reciente compartida, reembolsos o un libro de pedidos completo.
Q: ¿Deben las calificaciones faltantes almacenarse como cero?
Las calificaciones faltantes deben permanecer desconocidas. Cero es un valor definido y distorsionaría el filtrado o el ranking.
Q: ¿Necesito gestionar un proxy o un analizador de páginas de productos?
El actor maneja su superficie de colección detrás de la solicitud de API. El llamador define la lista de seguimiento, las reglas de comparación, el almacenamiento y el proceso de revisión.
Q: ¿Es legal recopilar datos públicos de productos?
La legalidad depende de la jurisdicción, el mercado, el propósito, el método de acceso y los términos aplicables. Utilice datos públicos para un propósito permitido y obtenga asesoría legal para el flujo de trabajo previsto.
En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.



