Как парсить видео TikTok на Python

Последнее обновление: April 15, 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 ShopE-commerce, продуктовые команды
Исследование рынкаНовые тренды, поведение аудитории, поиск товаровАналитики, хедж-фонды, исследовательские компании
Архивация и комплаенсВидеофайлы для внутреннего просмотра или храненияЮристы, compliance, агентства

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

Почему ваш базовый 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 fingerprinting, , которая генерирует request signatures, и динамические 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 с корректными заголовками
Данные работают один раз, а потом пропадаютRate limiting / блокировка 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 — прямой вызов недокументированного эндпойнта /api/post/item_list/ для массового получения данных с курсорной пагинацией.
  3. Браузерная автоматизация с Playwright — рендер страниц в headless-браузере для работы с бесконечной прокруткой, динамическим контентом и login wall.

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

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

Это подход, с которого я рекомендую начать. TikTok встраивает огромный JSON-блок в <script> с id __UNIVERSAL_DATA_FOR_REHYDRATION__ практически при каждой загрузке страницы. В этом блоке лежат все данные профиля и видео, которые обычно рендерятся фронтенд-скриптами. То есть вы можете получить их одним 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: загрузите содержимое скрипта как 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"Подписчики: {stats['followerCount']}, Лайки: {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"])  # Ссылка на скачивание без водяного знака
12    print(video["video"]["downloadAddr"])  # Ссылка на скачивание с водяным знаком

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

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

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

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

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

Метод 2: парсинг видео TikTok через внутренний API

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

Как найти внутренний 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, в каждом ответе возвращается новое значение cursor)
  • 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 и другие signature-параметры, которые генерируются кастомной JavaScript VM TikTok'а (спойлер: повторить это на чистом Python совсем не тривиально).
  • Для некоторых типов данных могут понадобиться cookie сессии или дополнительные токены
  • Rate limiting по IP всё ещё действует — рекомендуется ротация прокси
  • Если itemList начинает возвращаться пустым, скорее всего, msToken устарел (в браузере он обновляется примерно каждые 10 секунд)
  • Лучше всего подходит для массового извлечения данных, когда нужны все видео профиля, а ограничение первого метода на первую страницу уже не подходит

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

Когда первые два метода упираются в стену — требования логина, CAPTCHA или signature-параметры, которые вы не можете воспроизвести, — на помощь приходит 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-оценки против крупных anti-bot сервисов.

Пошагово: парсим видео профиля 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 — обычно версия без водяного знака или с минимальным его отображением
  • 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 хранит и версию с водяным знаком, и версию без него для каждого видео. Ссылка playAddr часто даёт более чистую версию (ту, что использует сам плеер), а downloadAddr содержит стандартный водяной знак TikTok с именем автора.

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

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

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

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

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

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

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

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

Если Python не нужен: парсинг TikTok без кода

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

python-vs-nocode-ai-comparison.webp

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

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

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

— это 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 активно судился со scraping-сервисами. Вот что важно знать.

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

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

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

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

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

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

Итоги: ключевые выводы

Парсинг TikTok в 2025 году — это постоянно меняющаяся задача. Антибот-стек платформы — один из самых продвинутых в интернете, и наивные подходы (обычный requests, фрагменты кода от ChatGPT, устаревшие туториалы) здесь не сработают. Но при правильном подходе всё вполне реально.

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

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

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

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

FAQ

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

Парсинг публично доступных данных — это юридически серая зона, а не однозначное нарушение. Решение Meta v. Bright Data (2024) поддерживает позицию, что сбор публичных данных в разлогиненном режиме не нарушает условия платформы. Однако в 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, наоборот, содержит водяной знак.

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

Самая частая причина в том, что 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) даёт наибольшую устойчивость к блокировкам, потому что имитирует реальную браузерную сессию. Для серьёзных объёмов стоит заложить бюджет на прокси — residential-прокси начального уровня стоят примерно у крупных провайдеров.

  • Узнать больше
Topics
парсинг TikTok на Pythonизвлечение данных TikTok на Pythonскрипт парсера TikTok на Pythonкак парсить видео TikTok на Python
Содержание

Попробуй Thunderbit

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

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