Вход Регистрация

Парсинг

Как скрапить данные TikTok Shop в 2026

Сравниваем способы парсинга TikTok Shop в 2026 году, от готовых сервисов вроде Kalodata и EchoTik до своего скрипта на Python. Отдельно о законности сбора.

Команда Froxy 10 нояб. 2026 9 мин
Как скрапить данные TikTok Shop в 2026

TL;DR:

  • Официальный API подходит, только если вы продавец, партнёр TikTok Shop или одобренный исследователь. Для мониторинга конкурентов остаются готовые сервисы (EchoTik, Kalodata и др.) или свой парсер.
  • Пользовательское соглашение TikTok запрещает автоматический сбор данных без письменного разрешения. Нарушение условий сервиса – не уголовное преступление, но оно грозит блокировками и гражданскими исками.
  • Свой парсер на Python строится на Playwright по схеме: страница видео → ссылка на товар → страница товара → поиск по ключевым словам.
  • Сохраняйте product_id и время сбора: без них не получится отслеживать цены и наличие в динамике.
  • Прокси дают доступ к нужному региону и снижают число блокировок, но не снимают ограничений платформы и закона.

Проблема парсинга TikTok Shop актуальна в основном для бизнеса, которому нужен качественный и надёжный инструмент для сбора данных: трендовые товары, актуальные цены, спрос, выявление наиболее вероятных конкурентов – это бренды или конкретные продавцы, продвигающие свои услуги / продукты на площадке.

Технически создание парсера TikTok Shop может опираться на: официальный API сервиса, на готовые сервисы по сбору данных, а также на самописный или на готовый скрипт (пример – TikTok scraper GitHub).

Статья предлагает обзор доступных методов парсинга TikTok Shop и рассказывает о законности сбора открытых данных.

Что такое TikTok Shop и как он работает

TikTok Shop – это встроенный функционал соцсети TikTok, благодаря которому продавцы могут предлагать товары и услуги в видео и в прямых эфирах через специальные карточки, как в интернет-магазинах. TikTok Shop изначально был запущен в США в 2023 году, но со временем расширился на страны Европы и Юго-Восточной Азии.

Такой подход решает сразу несколько задач пользователей и бизнеса: вовлечение, формирование рекомендаций, работа с возражениями и непосредственно прямые продажи. Здесь есть даже встроенная аналитика.

Однако, если бизнес планирует выходить на эту площадку, ему стоит начать с изучения ассортимента, цен и механик продвижения в TikTok Shop. Как раз тут ему и потребуется парсинг данных.

Как функционал TikTok Shop выглядит для покупателей:

  • Товары появляются в естественном потоке контента TikTok – в видео (при просмотре ролика видна метка/корзинка с товаром), в прямых эфирах (аналогично), в отдельной вкладке Shop (это встроенный магазин с каталогом, рекомендациями, поиском и акциями), а также в профиле автора / продавца (тут тоже показывается страница магазина).
  • После нажатия на кнопке с товаром открывается страница продукта с фото, описанием, ценой, отзывами и доставкой. Всё как в привычных онлайн-магазинах.
  • Оформление заказа происходит внутри TikTok. Достаточно выбрать товар, добавить в корзину, указать адрес доставки и оплатить. Способы оплаты зависят от страны пользователя и настроек продавца.
  • TikTok обрабатывает платёж, а продавец (или партнёрская служба TikTok) отправляет товар покупателю.
  • Отслеживание заказа, возвраты и история покупок – всё внутри приложения TikTok.
  • У продавцов свой раздел управления каталогом и аналитики по продажам.

Зачем парсить данные TikTok Shop

Парсинг превращает быстро меняющуюся витрину TikTok Shop в структурированные данные, которые можно сравнивать во времени: цены и скидки, трендовые товары, конкуренты, остатки, отзывы и рейтинги. Эти данные подключают к дашбордам, моделям ценообразования и исследованиям ассортимента, а товары связывают с авторами и роликами, которые их продвигают.

Свой парсер TikTok Shop можно написать на разных языках программирования: Python, Go, JavaScript и пр. Но можно использовать и готовые решения, например, скачать популярные скрипты с GitHub.

Важен не столько язык программирования, сколько источник данных. В связи с этим парсеры TikTok Shop можно условно разделить на следующие группы:

  • Утилиты и скрипты, которые работают с данными по официальному API TikTok Shop. У API для партнеров есть свои ограничения. Например, есть вызовы только для продавцов, для фулфилмент-операторов, для платёжных шлюзов и пр. Если вам нужна аналитика данных, то для ваших задач нужен TikTok Research API.
  • Сервисы-посредники, которые собирают данные по требованию клиента или заранее, то есть имеют готовые базы данных – общие или под узкую специфику/задачу.
  • Ручной сбор данных непосредственно со страниц TikTok Shop – скрипт посещает выбранные страницы и извлекает нужную информацию, структурируя её и сохраняя в конкретном формате – в файлы, таблицы, базы данных и пр.
Мобильные прокси

Мобильные IP с геотаргетингом и ротацией для сбора данных TikTok Shop в нужном регионе.

Тарифы $1.99, 100Mb

Готовые сервисы или свой парсер

Если вы не хотите или не можете написать и сопровождать свой парсер для TikTok Shop, вы можете задействовать альтернативные источники данных. Они либо предоставляют готовые срезы для типовых исследований, либо парсят данные под конкретные запросы пользователя.

Речь о таких платформах, как EchoTik, Kalodata, Shoplus, Apify и пр.

Это удобно и быстро. Не всегда гибко – хотя тут многое зависит от технической реализации сервиса.

Самый главный недостаток здесь – высокая стоимость данных. Доступ к данным или к пакетам запросов нужно оплачивать с помощью подписок. В бесплатном виде можно получить максимум демо-доступ.

Готовый сервис оправдан для разового или небольшого исследования. Если сбор нужен регулярно, данные должны попадать во внутренние системы или требуются нестандартные поля, имеет смысл вкладываться в свой парсер.

Свой парсер – наиболее сложный и трудоёмкий вариант, который требует от создателя не только полное понимание технических деталей, но и организацию связанной инфраструктуры:

  • где и в каком виде будут храниться данные,
  • как будет осуществляется обработка ошибок и блокировок,
  • как трафик и запросы будут балансироваться для снижения нагрузки на хостинг TikTok,
  • как будет организована ротация прокси и пр.

Основная проблема ручного парсинга TikTok Shop – это обход имеющихся средств защиты. TikTok защищает данные на высоком уровне, плюс площадка регулярно дорабатывает и изменяет свои алгоритмы, что усложняет сопровождение парсера – его периодически нужно обновлять и адаптировать под новые условия.

Как парсить TikTok Shop в 2026 году

Как парсить TikTok Shop в 2026 году

Основные проблемы по созданию парсеров для TikTok мы уже рассматривали ранее. На примере нашего кода вы сможете сделать TikTok видео-скрапер.

Подробности тут: Как создать TikTok-парсер: легальность и основные шаги.

Какие данные можно собирать

Со страниц товаров доступны название, продавец, текущая цена и скидка, наличие, рейтинг, число отзывов, описание, категория, медиафайлы и URL. В зависимости от региона часть полей есть только во встроенном JSON страницы.

Вместе с данными сохраняйте product_id и время сбора. Название карточки может измениться, а по ID удобно убирать дубли и отслеживать один и тот же товар. Снимки с временными метками превращают разовый сбор в мониторинг цен и ассортимента. Данные покупателей и закрытые разделы аккаунтов не собирайте: это другая категория юридического риска.

Парсинг TikTok Shop на Python

Ниже примеры кода для парсинга типовых страниц TikTok Shop.

Получение ссылки на товар из видео

Это простейший парсер продукта TikTok Shop. Суть его работы можно свести к следующему: ссылка на товар обычно «зашита» в данные страницы видео.

В результирующем HTML-коде присутствует тег script с JSON-состоянием (__UNIVERSAL_DATA_FOR_REHYDRATION__ или аналогичный), откуда можно извлечь product_id или готовый URL вида https://shop.tiktok.com/view/product/{id}.

Для этого достаточно простого регулярного выражения:

import re

def extract_product_url_from_html(html: str) -> str | None:
    # Ищем ссылки на shop.tiktok.com/view/product/ или shop.tiktok.com/{region}/pdp/
    patterns = [
        r'https?://shop\.tiktok\.com/view/product/(\d+)',
        r'https?://shop\.tiktok\.com/[a-z]{2}/pdp/[^"\']*?/(\d+)',
    ]
    for pat in patterns:
        m = re.search(pat, html)
        if m:
            pid = m.group(1)
            return f"https://shop.tiktok.com/view/product/{pid}"
    return None

Скрипт «просмотрит» HTML-код и вычленит в нём только ссылки на товары. Регулярное выражение не зависит от CSS-классов, поэтому переживает изменения вёрстки. Но если TikTok поменяет формат ссылок на товары, шаблоны придётся обновить.

Получение данных со страницы товара

Внутри видеоролика, из-за обилия динамических элементов, достаточно сложно получить сразу цену товара, описание и другие данные. Более простой и надёжный путь – посетить страницу товара и взять всё оттуда. Ссылку мы уже получили на первом шаге.

Важное замечание: после перехода на страницу товара нужно дождаться загрузки динамического контента, так как TikTok рендерит данные через JavaScript, и извлечь поля. Это можно сделать через JSON-LD или встроенные данные в скрипте.

Для упрощения примера будем использовать классические CSS-селекторы.

Ниже мы пытаемся извлечь заголовок, цену и описание из видимых элементов, а если не получается, возвращаем None.

async def parse_product_page(page) -> dict:
    data = {"title": None, "price": None, "description": None}
    # Заголовок: несколько возможных селекторов (TikTok часто меняет разметку)
    for sel in ["h1", "[data-e2e='product-title']", "div[class*='title']"]:
        el = await page.query_selector(sel)
        if el:
            data["title"] = (await el.inner_text()).strip()
            break
    # Цена: ищем элементы, содержащие валютные символы
    for sel in ["[data-e2e='product-price']", "div[class*='price']", "span:has-text('$')"]:
        el = await page.query_selector(sel)
        if el:
            data["price"] = (await el.inner_text()).strip()
            break
    # Описание
    el = await page.query_selector("[data-e2e='product-desc'], div[class*='description']")
    if el:
        data["description"] = (await el.inner_text()).strip()
    return data

Если код не работает, актуализируйте селекторы.

Поиск товаров по ключевым словам

Поиск по ключевым словам в TikTok Shop удобнее делать через страницу поиска (https://shop.tiktok.com/search?q={query} или региональный аналог). После загрузки удобнее собрать тематические карточки товаров: ссылки, названия, цены. Селекторы нестабильны, поэтому в примере используется эвристика – поиск ссылок, содержащих /product/ или /pdp/, и извлечение ближайшего текста.

async def parse_search_results(page, limit=10) -> list[dict]:
    items = []
    # Ищем все ссылки, ведущие на товары
    links = await page.query_selector_all("a[href*='/product/'], a[href*='/pdp/']")
    for a in links[:limit]:
        href = await a.get_attribute("href")
        if not href or not re.search(r'/product/\d+|/pdp/.*?/\d+', href):
            continue
        # Пытаемся вытащить текст рядом со ссылкой
        title = (await a.inner_text()).strip() or None
        items.append({"url": href, "title": title})
    return items

В общем скрипте функция используется после перехода на страницу поиска; при необходимости можно добавить извлечение цены из соседних элементов.

Парсинг видео TikTok Shop

Видео-скрапер нужен, когда товары надо связать с роликами и авторами, которые их продвигают. Не пытайтесь достать все коммерческие поля прямо со страницы видео: сначала извлеките ID или ссылку товара, затем откройте его карточку в Shop.

Такую двухшаговую схему проще поддерживать: на странице товара полнее цена, продавец и описание, а поиск контента отделён от сбора данных о товарах. Учтите, что метаданные видео, карточки товаров, данные продавцов и закрытые данные аккаунтов – разные наборы данных с разными правовыми рисками.

Типичные препятствия и как с ними справляться

Как TikTok защищается от парсинга:

  • TikTok защищает страницы с помощью CAPTCHA.
  • В обязательном порядке ведётся статистика обращений, поэтому слишком частые обращения к серверам быстро блокируются.
  • Платформа изучает и другую активность пользователей – на этом TikTok и сделал свою модель персонализации контента. Часть данных о профилях пользователей используется в том числе для защиты от ботов.
  • Сервис следит за сетевой активностью и за IP-адресами клиентов.
  • Результирующий код страницы формируется динамически – внутри TikTok использует огромный объем JavaScript-кода.

Так как функционал доступен только в определённых регионах, стоит строго следить за расположением прокси (IP-адреса).

Чтобы обойти эти ограничения, парсер должен работать на базе Headless-браузера и качественно скрывать признаки автоматизации.

Что снижает число блокировок:

  • паузы между запросами и ограничение числа параллельных сессий;
  • сохранение cookies в рамках сессии вместо нового «чистого» браузера на каждый запрос;
  • повторы с растущей задержкой (backoff) после ошибок и капчи;
  • мобильные или резидентные прокси с IP нужной страны;
  • ротация IP на стороне прокси, чтобы скрипт работал с одной точкой подключения.

Гайд по успешному парсингу без блокировок.

Обратите внимание! Со временем вёрстка страниц может измениться, соответственно, парсер перестанет работать.

Общий скрипт парсинга TikTok Shop на Playwright с прокси (без ротации)

Это скорее общий каркас – для понимания процесса. Он запускает headless Chromium, подключается через HTTP-прокси (с авторизацией или без – это настраивается в конфиге), открывает страницу видео, извлекает ссылку на товар, затем парсит страницу товара и (опционально) страницу поиска по ключевому слову.

import asyncio
import re
from datetime import datetime, timezone
from playwright.async_api import async_playwright

# ---------- Вспомогательные функции ----------

def extract_product_url_from_html(html: str) -> str | None:
    patterns = [
        r'https?://shop\.tiktok\.com/view/product/(\d+)',
        r'https?://shop\.tiktok\.com/[a-z]{2}/pdp/[^"\']*?/(\d+)',
    ]
    for pat in patterns:
        m = re.search(pat, html)
        if m:
            pid = m.group(1)
            return f"https://shop.tiktok.com/view/product/{pid}"
    return None

async def parse_product_page(page) -> dict:
    data = {"url": page.url, "title": None, "price": None, "description": None}
    for sel in ["h1", "[data-e2e='product-title']", "div[class*='title']"]:
        el = await page.query_selector(sel)
        if el:
            data["title"] = (await el.inner_text()).strip()
            break
    for sel in ["[data-e2e='product-price']", "div[class*='price']", "span:has-text('$')"]:
        el = await page.query_selector(sel)
        if el:
            data["price"] = (await el.inner_text()).strip()
            break
    el = await page.query_selector("[data-e2e='product-desc'], div[class*='description']")
    if el:
        data["description"] = (await el.inner_text()).strip()
    return data

async def parse_search_results(page, limit=10) -> list[dict]:
    items = []
    links = await page.query_selector_all("a[href*='/product/'], a[href*='/pdp/']")
    for a in links[:limit]:
        href = await a.get_attribute("href")
        if not href or not re.search(r'/product/\d+|/pdp/.*?/\d+', href):
            continue
        title = (await a.inner_text()).strip() or None
        items.append({"url": href, "title": title})
    return items

# ---------- Основная логика ----------

async def main():
    # ==== НАСТРОЙКИ ====
    VIDEO_URL = "https://www.tiktok.com/@username/video/1234567890"  # замените на актуальные
    SEARCH_QUERY = "wireless earbuds"  # ключевое слово для поиска товаров
    # PROXY_SERVER = "http://froxy.com:8080"  # без авторизации
    # Если прокси с авторизацией:
    PROXY_SERVER = "http://froxy.com:8080"
    PROXY_USER = "user"
    PROXY_PASS = "pass"

    proxy_config = {"server": PROXY_SERVER}
    # Для прокси с авторизацией:
    proxy_config["username"] = PROXY_USER
    proxy_config["password"] = PROXY_PASS

    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        context = await browser.new_context(proxy=proxy_config)
        page = await context.new_page()

        # 1. Открываем видео и извлекаем ссылку на товар
        print("[*] Открываем видео...")
        await page.goto(VIDEO_URL, wait_until="domcontentloaded", timeout=60000)
        await page.wait_for_timeout(3000)  # даём JS подгрузить данные
        html = await page.content()
        product_url = extract_product_url_from_html(html)
        if not product_url:
            print("[!] Ссылка на товар не найдена в видео.")
        else:
            print(f"[+] Найден товар: {product_url}")
            # 2. Парсим страницу товара
            await page.goto(product_url, wait_until="domcontentloaded", timeout=60000)
            await page.wait_for_timeout(3000)
            product_data = await parse_product_page(page)
            product_data["product_id"] = product_url.rsplit("/", 1)[-1]
            product_data["scraped_at"] = datetime.now(timezone.utc).isoformat()
            print("[+] Данные товара:", product_data)

        # 3. Поиск товаров по ключевому слову
        print(f"[*] Поиск товаров по запросу: {SEARCH_QUERY}")
        search_url = f"https://shop.tiktok.com/search?q={SEARCH_QUERY.replace(' ', '%20')}"
        await page.goto(search_url, wait_until="domcontentloaded", timeout=60000)
        await page.wait_for_timeout(3000)
        search_items = await parse_search_results(page, limit=10)
        print(f"[+] Найдено {len(search_items)} товаров:")
        for item in search_items:
            print("    ", item)

        await browser.close()

if __name__ == "__main__":
    asyncio.run(main())

Альтернативный способ: парсинг через мобильное приложение

В качестве основы можно использовать репозиторий с GitHub – tiktokshop-scraper.

Обратите внимание, что в текущем коде используются некоторые устаревшие вызовы!

Принцип достаточно простой:

  1. Вы устанавливаете на устройстве полноценное приложение TikTok.
  2. Подключаете и настраиваете мобильные прокси с таргетингом до стран, в которых работает функционал магазина (на мобильном устройстве).
  3. Авторизуетесь в профиле TikTok (если нужно).
  4. Активируете режим отладки на смартфоне – по ADB.
  5. Устанавливаете и настраиваете Appium Server, а также Android-драйвер Appium.
  6. Настраиваете Python-окружение для работы скрипта.
  7. Подключаетесь к Android-смартфону через Appium из скрипта.
  8. Скрипт нажимает на заданные координаты экрана и открывает товар – он нажимает кнопку Share и выбирает Copy link.
  9. Скопированная ссылка передается через буфер обмена.
  10. Все ссылки записываются в CSV-файл. Так как они изначально могут быть сокращенными, отдельный скрипт пытается получить полные URL и исключить дубликаты.

Исходный код репозитория можно адаптировать и расширить под свои задачи.

Этот способ медленнее браузерного: одно устройство обслуживает одну сессию, а нажатия по координатам ломаются после обновлений интерфейса приложения. Вход в аккаунт переводит сбор в зону закрытых данных и повышает юридические риски.

Парсинг или официальный API TikTok Shop

Парсинг или официальный API TikTok Shop

TikTok Research API не предназначен для коммерческого сбора данных о товарах и продажах конкурентов. Доступ к Research Tools предоставляют только одобренным независимым и академическим исследователям для некоммерческих проектов, коммерческие компании к программе не допускаются.

Продавцы, маркетологи и иные компании, которым нужна аналитика TikTok Shop для бизнеса, точно не могут рассчитывать на этот API как на универсальный инструмент мониторинга.

Заявки на подключение подаются и рассматриваются в индивидуальном порядке.

Плюс стоит учитывать следующие моменты:

  • Здесь есть строгие технические лимиты по скорости и объему запросов.
  • Данные обновляются с задержкой (иногда до нескольких дней).
  • Программа доступна далеко не во всех регионах, в которых работает TikTok.
  • Есть ограничения по типам данных.
  • Сами данные сильно обезличены, ведь их основная задача – исследование тенденций и выявление закономерностей.

Подробную аналитику по продажам конкретных товаров можно получить только по своему магазину. Поэтому для масштабных исследований отдельное API продавцов не подходит.

TikTok Shop Analytics Tools.

Итог: официальный API – лучший вариант, если вы продавец, партнёр или одобренный исследователь и нужные данные есть в его методах. Для мониторинга конкурентов и исследования рынка остаются готовые сервисы и собственный парсер.

Легален ли парсинг данных TikTok Shop?

Легален ли парсинг данных TikTok Shop?

Легален ли веб-парсинг TikTok Shop? На деле сложно дать однозначный ответ. Все будет зависеть от типа собираемых данных, объёма запросов / нагрузки на целевой сайт и от дальнейших действий с полученными данными.

Условия использования TikTok и парсинг

Официальное пользовательское соглашение TikTok Shop запрещает парсинг данных во всех его видах – с использованием любых средств автоматизации. Публикация в блоге TikTok.

Более того, площадка активно борется с ботами, которые не относятся к категории поисковых пауков: показывает капчу, анализирует браузерные профили, IP-адреса, замедляет или полностью блокирует подключения.

Но запрет в пользовательском соглашении и уголовная ответственность – разные вещи. Нарушение условий сервиса относится к договорным отношениям: TikTok может заблокировать аккаунт или IP-адреса, а в серьёзных случаях подать гражданский иск. Более высокие риски возникают, когда парсер обходит авторизацию или технические ограничения доступа, собирает персональные данные или нарушает авторские права.

Открытые и закрытые данные

Открытость данных снижает уголовные риски, но не отменяет условия сервиса, законы о персональных данных (например, GDPR для пользователей из ЕС) и авторское право. Перед запуском проверьте четыре условия:

  • данные доступны без входа в аккаунт;
  • парсер не обходит авторизацию и не взламывает ограничения доступа;
  • в выборку не попадают персональные данные и лишний контент, защищённый авторским правом (фото, тексты описаний);
  • цель использования законна и задокументирована.

Правовой контекст в США

Самый известный прецедент – дело hiQ Labs против LinkedIn. В 2022 году Апелляционный суд девятого округа США указал, что сбор данных из открытых профилей не подпадает под «доступ без авторизации» в смысле закона CFAA, опираясь на решение Верховного суда по делу Van Buren. Но это было решение о предварительном запрете, а не итог спора. Позже в том же году суд первой инстанции признал, что hiQ нарушила пользовательское соглашение LinkedIn, и в декабре 2022 года стороны урегулировали спор: hiQ согласилась прекратить сбор и удалить полученные данные.

Для коммерческого или масштабного проекта нужна юридическая проверка с учётом юрисдикции. Этот раздел не является юридической консультацией.

Заключение

Стратегия парсинга TikTok опирается не только на продуманную логику скрипта, но и на уровень доверия к цифровым отпечаткам. Наиболее весомыми здесь являются прокси – мобильные или резидентные с таргетингом до города и оператора связи.

Выбор метода зависит от задачи: официальный API – если у вас есть доступ и он покрывает нужные данные, готовые сервисы – для типовых метрик, свой парсер – для гибкого мониторинга открытых карточек товаров. В любом случае собирайте только открытые данные, держите умеренную частоту запросов и сверяйтесь с актуальными условиями TikTok перед запуском.

Арендовать прокси можно у нас. Froxy – это свыше 120 млн трастовых IP с автоматической ротацией. Оплата взимается не по количеству используемых прокси, а по объему потребляемого трафика.

Получайте уведомления о новых функциях и обновлениях Froxy

Узнайте первыми о новых функциях Froxy, чтобы оставаться в курсе событий происходящих на рынке цифровых технологий и получать новости о новых функциях Froxy.

Статьи по Теме