Как собирать видео TikTok с помощью Python

Последнее обновление: April 14, 2026

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

Обычно всё выглядит так: вы вбиваете запрос «scrape TikTok videos with Python», копируете кусок кода из туториала (или просите ChatGPT написать его), запускаете — и в ответ получаете… ничего. Пустой HTML. Ошибку 403. Или пугающее «Process finished with exit code 0», но без какого-либо вывода. Я видел этот сценарий десятки раз — и на GitHub issues, и на Reddit — поэтому и подготовил этот гайд. Мы разберём три Python-метода, которые реально работают в 2025 году, пошагово покажем, как скачивать сами .mp4-файлы (а не только метаданные — на этом обычно заканчиваются все остальные статьи), и сравним подходы в таблице, чтобы вы могли выбрать оптимальный вариант под свою задачу. Если Python вам вообще не нужен, я также покажу no-code альтернативы, например , которые помогут получить те же данные буквально в пару кликов.

Что вообще значит «собирать видео TikTok»?

Прежде чем переходить к коду, важно уточнить, что обычно имеют в виду под «scrape TikTok videos», потому что за этой фразой скрываются две совершенно разные задачи:

  1. Извлечение метаданных видео: подписи, хэштеги, количество лайков, комментариев, репостов и просмотров, дата публикации, информация об авторе. Именно на этом и фокусируется большинство туториалов.
  2. Скачивание самих видеофайлов (.mp4): получение самого ролика и сохранение его на ваш компьютер. Обычно именно это на самом деле ищут люди, когда вводят «scrape TikTok videos» — и именно эту часть почти никто нормально не объясняет.

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

Зачем собирать видео TikTok через Python?

С учётом и того, что TikTok Shop приносит , бизнес-причины работать с данными TikTok вполне убедительны. Вот самые частые сценарии:

| Сценарий | Что вы собираете | Кому это нужно | |---|---|---| | Исследование инфлюенсеров и маркетинга | Уровень вовлечённости, число подписчиков, форматы контента, эффективность хэштегов | Маркетинговым командам, агентствам | | Контент-стратегия | Трендовые хэштеги, вирусные форматы видео, частота публикаций | Авторам, SMM-менеджерам | | Мониторинг бренда | Упоминания, охват кампаний, реакция аудитории | Бренд-менеджерам, PR-командам | | Анализ конкурентов | Результаты видео конкурентов, рекламные креативы, товары в TikTok Shop | E-commerce, продуктовым командам | | Маркетинговые исследования | Новые тренды, поведение аудитории, поиск товаров | Аналитикам, хедж-фондам, исследовательским компаниям | | Архивирование и комплаенс | Видео для внутренней проверки или хранения записей | Юристам, специалистам по комплаенсу, агентствам |

Коммерческая ценность здесь вполне реальная: по прогнозам, рекламная выручка TikTok в США достигнет $23,4 млрд в 2026 году, а аффилиат-авторы формируют в топовых категориях TikTok Shop. Если вы работаете в e-commerce или influencer marketing, эти данные напрямую влияют на деньги.

Почему ваш базовый Python-код не работает с TikTok

Если вы уже пробовали что-то вроде этого и никуда не продвинулись, вы не одиноки:

1import requests
2from bs4 import BeautifulSoup
3resp = requests.get("https://www.tiktok.com/@someuser")
4soup = BeautifulSoup(resp.text, "html.parser")
5# ...а полезных данных в HTML всё равно нет

Причина простая: TikTok — одна из самых сложных платформ для скрейпинга. Обычный requests.get() возвращает почти пустую HTML-оболочку, потому что реальный контент рендерится в браузере через JavaScript. Кроме того, TikTok использует жёсткую антибот-защиту: поведенческое обнаружение, TLS-фингерпринтинг, для генерации сигнатур запросов и динамические CSS-селекторы, которые меняются без предупреждения.

tiktok-anti-bot-wall.webp

Согласно Imperva 2025 Bad Bot Report, в 2024 году автоматический трафик впервые превысил человеческий — теперь боты составляют . TikTok это прекрасно понимает и выстраивает защиту соответствующим образом.

Ниже — короткая таблица диагностики, чтобы быстро понять, что именно пошло не так, и выбрать правильный метод:

| Симптом | Вероятная причина | Какой метод помогает | |---|---|---| | Пустой HTML / нет данных | Контент рендерится через JS; requests не умеет выполнять JavaScript | Метод 1 (скрытый JSON) или Метод 3 (Playwright) | | 403 / Access Denied | Нет нужных заголовков или сработала антибот-защита | Метод 1 с правильными заголовками | | Данные срабатывают один раз, потом перестают | Ограничение частоты / блокировка IP | Ротация прокси (для всех методов) | | Появляется окно логина | Нужна сессия / cookie | Метод 3 (браузер с сохранённой сессией) | | Код от ChatGPT ничего не возвращает | Структура TikTok изменилась после обучения модели | Все 3 метода (актуальные подходы) |

Порог rate limit — примерно 30–60 запросов в минуту с одного IP, после чего начинаются мягкие блокировки или CAPTCHA. Дата-центровые IP обычно попадают под фильтр за считанные минуты — для хоть сколько-нибудь заметного объёма почти обязательно нужны residential или mobile proxy.

Обзор: 3 способа собрать видео TikTok через Python

Вот дорожная карта. У каждого метода свои плюсы и минусы, и ниже я покажу все три с рабочим кодом:

  1. Извлечение скрытого JSON — парсинг тега __UNIVERSAL_DATA_FOR_REHYDRATION__, встроенного в страницы TikTok. Самый быстрый и простой вариант, браузер не нужен.
  2. Внутренний API TikTok — прямой вызов undocumented-эндпойнта /api/post/item_list/ для массовой выгрузки с постраничной пагинацией по cursor.
  3. Автоматизация браузера с Playwright — рендер страниц в headless-браузере для работы с бесконечной прокруткой, динамическим контентом и окнами логина.

Все три метода также позволяют скачивать сами .mp4-файлы — об этом я расскажу в отдельном разделе после разбора методов. В конце будет сравнительная таблица, чтобы вы могли принять осознанное решение.

Метод 1: Сбор видео TikTok через скрытый JSON (подходит новичкам)

Это подход, с которого я рекомендую начинать. TikTok почти при каждой загрузке страницы встраивает большой JSON-блок в тег <script> с id __UNIVERSAL_DATA_FOR_REHYDRATION__. В этом блоке лежат все данные профиля и видео, которые фронтенд обычно рисует на JavaScript. А значит, их можно забрать одним HTTP-запросом, без браузера.

Что понадобится

  • Python 3.8+
  • requests (или httpx)
  • beautifulsoup4 (или parsel)
  • Корректные заголовки: User-Agent, Referer, Accept-Language

Установите зависимости:

1pip install requests beautifulsoup4

Пошагово: извлекаем данные видео TikTok из script-тега

Шаг 1: Отправьте GET-запрос с реалистичными браузерными заголовками.

Здесь большинство новичков и ошибается. Если сделать обычный requests.get() без заголовков, TikTok вернёт 403 или страницу CAPTCHA. Минимум, что вам нужно, — современный браузерный User-Agent и заголовок Referer.

1import requests
2from bs4 import BeautifulSoup
3import json
4url = "https://www.tiktok.com/@charlidamelio"
5headers = {
6    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
7    "Referer": "https://www.tiktok.com/",
8    "Accept-Language": "en-US,en;q=0.9",
9}
10resp = requests.get(url, headers=headers)

Шаг 2: Разберите HTML и найдите script-тег с hydration JSON.

1soup = BeautifulSoup(resp.text, "html.parser")
2script_tag = soup.find("script", id="__UNIVERSAL_DATA_FOR_REHYDRATION__")

Если script_tag равен None, значит TikTok либо заблокировал запрос (проверьте статус-код), либо изменил id тега (такое бывает редко, но возможно).

Шаг 3: Преобразуйте содержимое script-тега в JSON.

1data = json.loads(script_tag.string)

Шаг 4: Пройдите по структуре JSON и извлеките метаданные видео.

Структура вложена в __DEFAULT_SCOPE__. Для страницы профиля пользователя:

1user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
2user_info = user_detail["userInfo"]
3# Статистика профиля
4stats = user_info["stats"]
5print(f"Followers: {stats['followerCount']}, Likes: {stats['heartCount']}")
6# Список видео (первая страница)
7item_list = user_detail.get("itemList", [])
8for video in item_list:
9    print(video["desc"])  # Подпись
10    print(video["stats"]["playCount"])  # Просмотры
11    print(video["video"]["playAddr"])  # URL для скачивания без водяного знака
12    print(video["video"]["downloadAddr"])  # URL для скачивания с водяным знаком

Шаг 5: Извлеките ссылки на скачивание видео.

Поле playAddr обычно даёт более чистую версию видео — часто без наложенного логотипа TikTok, а downloadAddr содержит стандартный watermark. Обе ссылки ведут прямо к .mp4-файлу, но для скачивания нужны определённые заголовки (об этом — ниже, в разделе про загрузку).

Теперь у вас должен быть список объектов с метаданными видео: подпись, статистика, время публикации, хэштеги (в challenges[] и textExtra) и прямые ссылки на видео.

Ограничения метода со скрытым JSON

  • Захватывает только данные из первой загрузки страницы — обычно это первые ~30 видео профиля
  • Не подходит для бесконечной прокрутки или пагинации (здесь нет «следующей страницы»)
  • Если TikTok поменяет id script-тега или структуру JSON, парсер сломается (это случается периодически — помогает поймать проблему раньше)
  • Лучше всего подходит для: быстрых выгрузок профиля, разовых сборов данных и случаев, когда нужны только самые свежие видео

Метод 2: Сбор видео TikTok через внутренний API

Фронтенд TikTok не загружает все видео сразу — при прокрутке он делает XHR-запросы к внутренним API-эндпойнтам. Главный из них для видео пользователя — /api/post/item_list/. Его можно вызывать напрямую из Python, получая постраничную пагинацию по cursor и доступ ко всем видео профиля, а не только к первой странице.

Как найти внутренний API-эндпойнт

Откройте Chrome DevTools на странице профиля TikTok, перейдите во вкладку Network, отфильтруйте запросы по XHR и прокрутите страницу вниз. Вы увидите запросы на URL вроде:

1https://www.tiktok.com/api/post/item_list/?WebIdLastTime=...&aid=1988&count=35&cursor=0&secUid=...

Ключевые параметры:

  • secUid — уникальный ID профиля (его можно взять из JSON в Методе 1, в userInfo.user.secUid)
  • cursor — смещение пагинации (начинается с 0, а каждый ответ возвращает значение следующего курсора)
  • count — количество элементов на странице (обычно 30–35)

Пошагово: обращаемся к внутреннему API TikTok через Python

Шаг 1: Получите secUid нужного профиля.

Его можно взять из скрытого JSON (Метод 1) или из HTML страницы профиля.

Шаг 2: Соберите и отправьте API-запрос.

1import requests
2import json
3sec_uid = "MS4wLjABAAAA..."  # Из Метода 1
4api_url = "https://www.tiktok.com/api/post/item_list/"
5params = {
6    "aid": "1988",
7    "secUid": sec_uid,
8    "count": 35,
9    "cursor": 0,
10}
11headers = {
12    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
13    "Referer": "https://www.tiktok.com/",
14}
15resp = requests.get(api_url, params=params, headers=headers)
16data = resp.json()

Шаг 3: Разберите ответ.

Каждый элемент в data["itemList"] содержит ту же структуру видео, что и в Методе 1 — desc, stats, video.playAddr, video.downloadAddr и т. д.

Шаг 4: Пройдите по всем страницам.

1all_videos = []
2cursor = 0
3has_more = True
4while has_more:
5    params["cursor"] = cursor
6    resp = requests.get(api_url, params=params, headers=headers)
7    data = resp.json()
8    items = data.get("itemList", [])
9    all_videos.extend(items)
10    has_more = data.get("hasMore", False)
11    cursor = data.get("cursor", 0)
12    print(f"Получено видео: {len(items)}, всего: {len(all_videos)}, hasMore: {has_more}")
13print(f"Всего собрано видео: {len(all_videos)}")

Каждая итерация возвращает следующую порцию данных и новый cursor. Цикл продолжается, пока hasMore не станет False.

Ограничения метода с внутренним API

  • TikTok часто меняет эндпойнты и обязательные параметры — это самый требовательный к поддержке метод. В последние месяцы некоторые запросы начали требовать msToken, X-Bogus или другие сигнатурные параметры, которые генерируются кастомной (спойлер: воспроизвести это на чистом Python непросто).
  • Для некоторых типов данных могут потребоваться cookie сессии или дополнительные токены
  • IP-rate limiting всё равно действует — ротация прокси по-прежнему желательна
  • Если itemList внезапно становится пустым, скорее всего, устарел msToken (в браузере он меняется примерно каждые 10 секунд)
  • Лучше всего подходит для: массового извлечения данных, когда нужны все видео профиля и ограничение первого экрана уже не устраивает

Метод 3: Сбор видео TikTok с Playwright (автоматизация браузера)

Когда первые два метода упираются в стены — требования к логину, CAPTCHA или сигнатуры, которые сложно воспроизвести — на помощь приходит Playwright. Он запускает настоящий (headless) браузер, открывает TikTok как обычный пользователь и справляется с JavaScript-рендерингом, бесконечной прокруткой и даже авторизованными сессиями.

Подготовка Playwright для скрейпинга TikTok

Установите Playwright и браузерные бинарники:

1pip install playwright
2playwright install firefox

Для TikTok я рекомендую Firefox вместо Chromium. Практика сообщества показывает у Firefox, а антибот-система TikTok особенно агрессивно относится к headless-браузерам на базе Chromium.

Для дополнительной маскировки можно использовать Playwright вместе с — это модифицированный форк Playwright — или , где Firefox доработан на уровне C++ для обхода детектирования. В Camoufox показывает почти идеальные stealth-результаты против крупных антибот-сервисов.

Пошагово: собираем видео профиля TikTok через Playwright

Шаг 1: Запустите headless Firefox и откройте профиль.

1import asyncio
2from playwright.async_api import async_playwright
3import json
4async def scrape_tiktok_profile(username):
5    async with async_playwright() as p:
6        browser = await p.firefox.launch(headless=True)
7        context = await browser.new_context(
8            user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0",
9            viewport={"width": 1280, "height": 720},
10        )
11        page = await context.new_page()
12        await page.goto(f"https://www.tiktok.com/@{username}", wait_until="networkidle")

Шаг 2: Дождитесь загрузки сетки видео.

1        # Ждём появления элементов видео
2        await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)

Если TikTok показывает оверлей «Something went wrong», возможно, потребуется нажать кнопку повторной попытки:

1        retry_btn = page.locator('button:has-text("Retry")')
2        if await retry_btn.count() &gt; 0:
3            await retry_btn.click()
4            await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)

Шаг 3: Извлеките данные из скрытого JSON — даже внутри Playwright.

Самый надёжный способ всё равно — забрать hydration JSON, даже если вы уже используете браузер:

1        script_el = page.locator("#__UNIVERSAL_DATA_FOR_REHYDRATION__")
2        raw_json = await script_el.inner_text()
3        data = json.loads(raw_json)
4        # Та же навигация по JSON, что и в Методе 1
5        user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
6        videos = user_detail.get("itemList", [])

Шаг 4: Обработайте бесконечную прокрутку, если нужно больше видео.

Если вам нужно больше, чем первые ~30 роликов, прокрутите страницу вниз и поймайте дополнительные XHR-ответы:

1        all_videos = list(videos)
2        # Перехватываем ответы API во время прокрутки
3        api_responses = []
4        async def capture_response(response):
5            if "/api/post/item_list" in response.url:
6                try:
7                    body = await response.json()
8                    api_responses.append(body)
9                except:
10                    pass
11        page.on("response", capture_response)
12        # Прокрутка вниз, чтобы вызвать подгрузку
13        for _ in range(5):  # При необходимости увеличьте количество прокруток
14            await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
15            await asyncio.sleep(2)
16        # Собираем видео из перехваченных ответов
17        for api_resp in api_responses:
18            items = api_resp.get("itemList", [])
19            all_videos.extend(items)
20        print(f"Всего видео: {len(all_videos)}")
21        await browser.close()
22        return all_videos
23# Запуск
24videos = asyncio.run(scrape_tiktok_profile("charlidamelio"))

Теперь у вас будет список объектов видео как из первой загрузки страницы, так и из дополнительных страниц, подгруженных при скролле.

Ограничения метода с Playwright

  • Самый медленный способ из всех (полный рендер страницы, сетевые задержки, паузы на скролл)
  • Больше потребляет ресурсов — каждый экземпляр браузера съедает заметный объём памяти и CPU
  • Всё равно может упираться в IP-блокировки на масштабе — нужна ротация прокси
  • Лучше всего подходит для: сложных сценариев, контента за логином, обхода CAPTCHA или случаев, когда Методы 1 и 2 заблокированы

Как скачать видео TikTok (.mp4) через Python

Это раздел, который закрывает самый большой пробел в большинстве туториалов по TikTok scraping. Извлечение метаданных полезно, но большинство людей, которые ищут «scrape TikTok videos», хотят именно сами видеофайлы.

TikTok встраивает ссылки на скачивание в объект данных видео:

  • playAddr — обычно версия без водяного знака или с минимальным watermark
  • downloadAddr — версия, которую TikTok предназначает для загрузки внутри приложения (с водяным знаком TikTok)

Обе ссылки чувствительны ко времени и быстро истекают (обычно через несколько часов), поэтому скачивать нужно сразу после извлечения.

Пошагово: скачиваем видео TikTok

Шаг 1: Возьмите URL видео одним из трёх способов выше.

1video_url = video["video"]["playAddr"]  # Версия без водяного знака
2# или
3video_url = video["video"]["downloadAddr"]  # С водяным знаком

Шаг 2: Отправьте GET-запрос с правильными заголовками.

Именно здесь многие спотыкаются. Если просто сделать requests.get(video_url), вы получите 403. TikTok проверяет заголовок Referer и ожидает браузерный User-Agent.

1import requests
2headers = {
3    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
4    "Referer": "https://www.tiktok.com/",
5}
6resp = requests.get(video_url, headers=headers, stream=True)

Шаг 3: Сохраните ответ в .mp4-файл.

Используйте stream=True и пишите файл по частям — видео TikTok могут быть большими, и не стоит загружать весь файл в память:

1video_id = video["id"]
2filename = f"tiktok_{video_id}.mp4"
3with open(filename, "wb") as f:
4    for chunk in resp.iter_content(chunk_size=1024 * 1024):  # куски по 1 МБ
5        if chunk:
6            f.write(chunk)
7print(f"Скачано: {filename}")

Теперь у вас должен появиться воспроизводимый .mp4-файл на локальном компьютере.

Скачивание с водяным знаком и без него

TikTok хранит обе версии каждого видео — с водяным знаком и без него. URL playAddr часто даёт более чистую версию (ту, что использует сам плеер), а downloadAddr включает watermark TikTok с именем автора.

Небольшая ремарка по этике: водяной знак нужен, чтобы указать автора. Если вы скачиваете видео для исследований, аналитики или внутренней проверки, использование playAddr обычно допустимо. Но если вы планируете распространять или перепубликовывать контент, удаление авторской атрибуции поднимает как этические, так и авторско-правовые вопросы. Подробнее об этом — в разделе про право ниже.

Для более надёжного пайплайна загрузки стоит посмотреть на — его TikTok-экстрактор автоматически обрабатывает сигнатуры и разрешение URL, так что вам не придётся вручную возиться с заголовками и сроком жизни токенов.

Сравнение методов: какой Python-подход выбрать?

Ниже — сравнительная таблица, которой мне не хватало, когда я только начинал работать над проектами по TikTok scraping:

| Критерий | Метод 1: Hidden JSON | Метод 2: Internal API | Метод 3: Playwright | |---|---|---|---| | Сложность | Начальный уровень | Средний уровень | Средний уровень | | Скорость | Быстро (1 запрос на страницу) | Быстро (JSON API) | Медленно (полный рендер) | | Устойчивость к антиботу | Средняя | Низкая (эндпойнты меняются) | Высокая (имитирует реальный браузер) | | Скачивает .mp4? | Да (через playAddr) | Да (URL в ответе) | Да (через перехват сети) | | Подходит для бесконечной прокрутки | Нет (только первая страница) | Да (пагинация cursor) | Да (имитация скролла) | | Нужны прокси при масштабе | Да | Да | Да | | Требуется обслуживание | Среднее (меняется структура JSON) | Высокое (эндпойнты и сигнатуры меняются часто) | Низкое-среднее (браузер адаптируется) | | Лучше всего для | Быстрых разовых выгрузок профиля | Массового извлечения данных, всех видео | Контента за логином или сложных страниц |

Моя рекомендация:

  • Нужно быстро посмотреть один профиль? Начните с Метода 1. Он настраивается примерно за 30 секунд и отдаёт данные меньше чем за секунду на страницу.
  • Нужны все видео профиля с пагинацией? Тогда лучше Метод 2, но будьте готовы поддерживать код, когда TikTok меняет параметры API.
  • Нужны логин-стены, CAPTCHA или максимальная устойчивость? Тогда Метод 3 с Playwright. Он медленнее и тяжелее, но TikTokу его сложнее всего заблокировать.

На практике я обычно начинаю с Метода 1 и перехожу к Методам 2 или 3 только тогда, когда упираюсь в ограничения. Это помогает сохранить простую инфраструктуру и низкую стоимость.

Python не нужен? Собирайте видео TikTok с помощью no-code инструментов

Многие, кто ищет «scrape TikTok videos with Python», на самом деле не нуждаются в Python. Им нужны данные. Если вы маркетинговый аналитик, которому нужны метаданные видео из нескольких профилей конкурентов, или бренд-менеджер, отслеживающий упоминания, то настройка Python-окружения, ротация прокси и подписи запросов — это уже лишнее.

python-vs-nocode-ai-comparison.webp

Вот честное сравнение подходов:

| Подход | Уровень навыков | Стоимость | Поддержка | Лучше всего для | |---|---|---|---|---| | Python (своими руками) | Средний и выше | Бесплатно (+ стоимость прокси) | Высокая (скрипты ломаются) | Полный контроль, кастомные пайплайны | | (расширение Chrome) | Новичок | Есть бесплатный тариф | Не требуется (AI каждый раз читает сайт заново) | Быстрое извлечение данных о видео, экспорт в Sheets/Excel | | Apify TikTok Scraper | Новичок | Платно (оплата за запуск) | Низкая (поддерживается Apify) | Массовые автоматические запуски по расписанию | | TikAPI | Разработчик | Платная подписка | Средняя | Создание приложений на базе данных TikTok |

Как Thunderbit работает с TikTok

— это AI web scraper, который мы создали в Thunderbit, и он работает не так, как традиционные инструменты. Вместо заранее заданных CSS-селекторов или XPath-правил, которые ломаются при любом изменении интерфейса TikTok, AI Thunderbit заново читает структуру страницы и предлагает релевантные колонки — подпись, лайки, хэштеги, URL видео, автор и т. д.

Процесс действительно укладывается в два клика:

  1. Откройте профиль TikTok в Chrome, нажмите на расширение Thunderbit и выберите «AI Suggest Fields». Thunderbit просканирует страницу и предложит структуру таблицы.
  2. Проверьте предложенные колонки, при необходимости поправьте их и нажмите «Scrape».

Данные экспортируются прямо в Google Sheets, Excel, Airtable или Notion. Никаких CSS-селекторов для поддержки, никакого кода для отладки, никакой настройки прокси. Для маркетингового аналитика, которому нужны метаданные видео из нескольких профилей, это заметно быстрее, чем поднимать Python-окружение, — и это не ломается каждый раз, когда TikTok обновляет фронтенд (а по сообщениям сообщества, это происходит каждые несколько недель).

Thunderbit также поддерживает — он может заходить на страницу каждого отдельного видео и дополнять таблицу такими данными, как полное число комментариев, информация о музыке или длительность ролика.

Вы можете попробовать его бесплатно через . Подробнее о том, как это работает, смотрите на нашем .

Правовые и этические рамки при сборе данных TikTok

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

Условия использования TikTok (§ 4.1) прямо запрещают автоматический доступ. Нарушение TOS — это нарушение договора, а не уголовное преступление, но оно может привести к бану аккаунта, блокировке IP или гражданскому иску.

Правовая ситуация с публичными данными гораздо мягче, чем многие думают. Ключевой прецедент — Meta Platforms v. Bright Data (Северный округ Калифорнии, январь 2024), где суд постановил, что сбор публично доступных данных при выходе из аккаунта не нарушает Terms of Service Meta. Meta отозвала дело и отказалась от апелляции. Более раннее решение hiQ v. LinkedIn в Девятом округе (подтверждённое после Van Buren) установило, что сбор общедоступных данных не является нарушением CFAA — хотя в итоге hiQ всё же заключила мировое соглашение, заплатила $500K и согласилась на постоянный судебный запрет, что показывает: принудительное исполнение TOS всё равно может быть болезненным.

GDPR и CCPA применяются, если вы собираете персональные данные пользователей из ЕС или Калифорнии. Сбор публичных постов и создание базы персональных данных отдельных пользователей — это не одно и то же.

Практические рекомендации:

  • Ограничивайте частоту запросов (не перегружайте серверы TikTok)
  • Не собирайте данные с приватных аккаунтов или контента несовершеннолетних
  • Не распространяйте коммерчески защищённый авторским правом видеоконтент
  • Уважайте robots.txt (у TikTok большинство автоматических обходов запрещено)
  • Скачивание видео для личного исследования или анализа — не то же самое, что их перепубликация; различайте эти случаи

Дисклеймер: это образовательный материал, а не юридическая консультация. Если вы строите коммерческий продукт на данных, собранных с TikTok, обратитесь к юристу.

Итоги: главное, что стоит запомнить

Сбор данных TikTok в 2025 году — это подвижная цель. Антибот-стек платформы — один из самых продвинутых в сети, и наивные подходы вроде обычного requests, кода от ChatGPT и устаревших туториалов почти наверняка провалятся. Но при правильном методе задача вполне решаема.

Вот что важно запомнить:

  • Метод 1 (Hidden JSON) — самый быстрый и простой; начните с него для быстрых выгрузок профиля.
  • Метод 2 (Internal API) даёт пагинацию и массовый доступ, но требует больше всего поддержки, потому что эндпойнты и сигнатуры меняются часто.
  • Метод 3 (Playwright) лучше всего сопротивляется антибот-мерам, но расплачивается скоростью и ресурсами.
  • Все три метода позволяют получать ссылки на скачивание видео — и только в этом гайде есть пошаговый разбор того, как именно скачать .mp4-файлы с корректными заголовками.
  • Для нетехнических пользователей предлагает действительно более быстрый путь к тем же данным без написания и поддержки кода. Его AI-подход означает, что он не ломается при изменениях интерфейса TikTok — а по сообщениям сообщества это происходит чаще, чем кому-либо хотелось бы.

Если вы хотите начать без настройки Python, — бесплатного тарифа достаточно, чтобы протестировать его на нескольких профилях и понять, подходит ли он под ваш процесс. Если же вы идёте по пути Python, начните с Метода 1, проверьте данные и затем масштабируйтесь.

Хотите глубже разобраться в техниках веб-скрейпинга? Посмотрите наши гайды о , и .

FAQ

Законно ли собирать видео TikTok через Python?

Сбор публично доступных данных находится в серой правовой зоне, а не является однозначным нарушением. Решение Meta v. Bright Data (2024) поддерживает позицию, что сбор публичных данных без входа в аккаунт не нарушает Terms of Service платформы. Однако в TOS TikTok прямо запрещён автоматический доступ, а при работе с персональными данными применяются требования GDPR/CCPA. Это не незаконно в том смысле, которого обычно боятся люди, но и не безрисково. Для вашего конкретного кейса лучше проконсультироваться с юристом.

Какая Python-библиотека лучше всего подходит для скрейпинга TikTok?

Это зависит от выбранного подхода. Для извлечения скрытого JSON (Метод 1) достаточно requests + beautifulsoup4. Для обращения к внутреннему API (Метод 2) подойдут requests или httpx. Для автоматизации браузера (Метод 3) сейчас стандартом считается playwright — по популярности для новых scraping-проектов он уже обогнал Selenium, имея против около 53 миллионов у Selenium. Обёртку TikTok-Api (~6,3K звёзд на GitHub) тоже стоит рассмотреть, если вам нужен более высокий уровень абстракции, хотя она может быть нестабильной.

Можно ли скачать видео TikTok без водяного знака с помощью Python?

Да. В собственных данных TikTok есть URL playAddr, который обычно даёт версию видео без стандартного водяного знака. В этом гайде показано, как извлечь этот URL любым из трёх методов и скачать .mp4-файл с правильными заголовками. Поле downloadAddr, напротив, содержит версию с watermark.

Почему мой TikTok-скрейпер возвращает пустые данные?

Самая частая причина — TikTok рендерит контент через JavaScript. Обычный requests.get() забирает только HTML-оболочку — реальные данные находятся либо в скрытом JSON script-теге (Метод 1), либо подгружаются динамически через JavaScript (Метод 3). Если вы получаете пустой HTML, сначала попробуйте Метод 1. Если он не сработает, проверьте заголовки (отсутствие Referer — причина №1 ошибок 403) или переходите к Методу 3 с Playwright.

Как избежать блокировки при сборе данных TikTok?

Используйте реалистичные браузерные заголовки (User-Agent, Referer, Accept-Language), ротируйте residential или mobile proxy (дата-центровые IP обычно блокируются за минуты), добавляйте случайные задержки между запросами (минимум 1–3 секунды) и не скрейпьте в чрезмерно больших объёмах. Метод 3 (Playwright) даёт наибольшую устойчивость к блокировкам, потому что имитирует реальную браузерную сессию. Если объёмы серьёзные, закладывайте бюджет на прокси — entry-level residential proxy у крупных провайдеров стоят примерно .

Попробуйте Thunderbit для сбора данных TikTok
Shuai Guan
Shuai Guan
Co-founder/CEO @ Thunderbit. Passionate about cross section of AI and Automation. He's a big advocate of automation and loves making it more accessible to everyone. Beyond tech, he channels his creativity through a passion for photography, capturing stories one picture at a time.
Topics
Scrape Tiktok pythonTiktok data extraction pythonPython Tiktok scraper scriptHow to scrape Tiktok videos with python
Содержание

Попробуй Thunderbit

Собирай лиды и другие данные всего за 2 клика. На базе AI.

Получить Thunderbit Это бесплатно
Извлекай данные с помощью AI
Легко передавай данные в Google Sheets, Airtable или Notion
PRODUCT HUNT#1 Product of the Week