🎯 Um navegador em nuvem personalizável e anti-detecção alimentado por Chromium desenvolvido internamente, projetado para rastreadores web e agentes de IA. 👉Experimente agora
De volta ao blog

Como Extrair Dados do TikTok Sem Ser Bloqueado

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

15-Jun-2026

Principais Conclusões:

  • O TikTok envia seus dados na página e depois alimenta o restante via XHR. Perfis e as primeiras postagens estão em um blob JSON #__UNIVERSAL_DATA_FOR_REHYDRATION__; comentários e postagens mais profundas chegam como XHR acionados pelo rolar da página que você captura da rede.
  • A região é parte da obtenção de uma renderização limpa. O mesmo perfil que expira em uma saída é renderizado imediatamente de outra — fixe proxyCountry e dê à sessão tempo de vida suficiente para que os XHRs de hidratação cheguem.
  • Você extrai da rede, não adivinhando seletores. Fique atento às respostas xhr/fetch enquanto a página rola e analise o JSON que o TikTok já retorna — sem arrastar o DOM frágil da grade de vídeos.
  • O TikTok usa impressão digital de forma agressiva, então o navegador tem que ser real. Rodar no Scrapeless Scraping Browser — um Chromium anti-detecção com saída residencial — é o que faz a hidratação acontecer.
  • Uma sessão, cinco superfícies. Perfis, postagens, comentários, buscas e canais se reduzem ao mesmo padrão de renderizar e, em seguida, extrair em uma única sessão em nuvem.
  • Gratuito para começar. Novas contas Scrapeless incluem tempo de execução gratuito do Scraping Browser — inscreva-se em app.scrapeless.com.

Introdução: onde o TikTok mantém seus dados

O TikTok renderiza suas páginas da web em duas fases. O HTML inicial carrega uma grande ilha JSON — um blob <script id="__UNIVERSAL_DATA_FOR_REHYDRATION__"> — que contém o perfil, suas estatísticas e a primeira página de postagens. Tudo além disso (mais postagens conforme você rola, threads de comentários, páginas de busca) é obtido via XHR após a página ser carregada. Portanto, raspar o TikTok envolve duas técnicas: ler o JSON de reidratação para ver o que já está lá e capturar as respostas XHR para o que é carregado sob demanda.

Ambas as fases dependem do TikTok acreditar que um navegador real está em uso. A plataforma usa impressão digital de forma agressiva, e um simples pedido HTTP ou um navegador sem cabeça padrão não obtém uma saída com dados utilizáveis. A renderização simplesmente não é concluída.

Este guia utiliza o Scrapeless Scraping Browser — um navegador em nuvem anti-detecção que combina um Chromium desenvolvido internamente com proxies residenciais — conectado ao Puppeteer via CDP. A extração do perfil abaixo foi capturada ao vivo; os padrões de postagens e comentários usam a mesma abordagem de renderizar e, em seguida, ler a rede. Dados públicos apenas ao longo do texto.


O Que Você Pode Fazer Com Isso

  • Extrair um perfil de criador — bio, verificação, contagem de seguidores/corações/vídeos — do JSON de reidratação.
  • Coletar as postagens de um criador com legendas, metadados de vídeo, autor e estatísticas de engajamento.
  • Raspar threads de comentários com texto, contagens de curtidas, contagens de respostas e manejadores de autor.
  • Executar uma pesquisa por palavra-chave e capturar o feed de resultados.
  • Navegar por um feed de canal/hashtag com o mesmo loop de rolagem e captura.

Por Que Scrapeless Scraping Browser

O Scrapeless Scraping Browser é um navegador em nuvem personalizável e anti-detecção projetado para web crawlers e agentes de IA. Para o TikTok especificamente, ele oferece:

  • Chromium desenvolvido internamente — um verdadeiro motor, então o JSON de reidratação é preenchido e os XHRs são acionados.
  • Impressão digital anti-detecção — a sessão é identificada como um navegador normal, então o TikTok fornece dados reais em vez de uma saída vazia.
  • Proxies residenciais em mais de 195 países — fixe a saída por país para que a página renderize de forma limpa e consistente.
  • TTL de sessão configurável — mantenha a sessão ativa tempo suficiente para que os XHRs acionados pela rolagem cheguem antes do término.
  • Uma conexão padrão do Puppeteer — crie uma sessão com o SDK, depois puppeteer.connect() via CDP; sua extração é simples Puppeteer.

Obtenha sua chave de API no plano gratuito em app.scrapeless.com.


Pré-requisitos

  • Node.js 18 ou mais recente
  • Uma conta Scrapeless e chave de API — inscreva-se em app.scrapeless.com
  • Familiaridade básica com Puppeteer e JSON

Instalação

bash Copy
npm install @scrapeless-ai/sdk puppeteer-core
bash Copy
export SCRAPELESS_API_KEY="seu_token_api_aqui"

Passo 1 — Crie uma sessão e conecte o Puppeteer

O SDK cria a sessão em nuvem (onde você fixa o país do proxy e o TTL) e retorna um endpoint WebSocket; o Puppeteer se conecta a ele via CDP:

javascript Copy
import { Scrapeless } from '@scrapeless-ai/sdk';
import puppeteer from 'puppeteer-core';

const client = new Scrapeless({ apiKey: process.env.SCRAPELESS_API_KEY });

const { browserWSEndpoint } = await client.browser.create({
  proxyCountry: 'US',   // fixar a saída — a região afeta se a página renderiza
  sessionTTL: 300,      // segundos; tempo suficiente para que os XHRs de hidratação cheguem
});

const browser = await puppeteer.connect({ browserWSEndpoint });
const page = await browser.newPage();

Uma observação do mundo real ao rodar isso: o mesmo perfil que expirou repetidamente de uma região de saída foi renderizado na primeira tentativa de outra. Se uma renderização travar, mude proxyCountry antes de qualquer outra coisa.


Passo 2 — Raspe um perfil do JSON de reidratação

O perfil, suas estatísticas e as primeiras postagens já estão na página quando ela carrega — dentro da tag de script #__UNIVERSAL_DATA_FOR_REHYDRATION__. Espere por esse nó, analise-o e leia o escopo webapp.user-detail:

javascript Copy
await page.goto('https://www.tiktok.com/@oddanimalspecimens', {
  waitUntil: 'domcontentloaded',
  timeout: 120000,
});
await page.waitForSelector('#__UNIVERSAL_DATA_FOR_REHYDRATION__', { timeout: 60000 });

const userInfo = await page.evaluate(() => {
  const el = document.getElementById('__UNIVERSAL_DATA_FOR_REHYDRATION__');
  const data = JSON.parse(el.textContent);
  return data.__DEFAULT_SCOPE__['webapp.user-detail'].userInfo;
});

console.log(userInfo.user.uniqueId, '—', userInfo.stats);

Isso retorna o próprio objeto userInfo do TikTok verbatim — um objeto user e um objeto stats. Sem raspagem de DOM; você está lendo os dados que o TikTok enviou para renderizar sua própria página.

Obtenha sua chave de API no plano gratuito: app.scrapeless.com


Etapa 3 — Capturar postagens e comentários de XHR

Postagens além da primeira página e todos os comentários chegam como XHR após a página inicializar e à medida que você rola. O padrão é anexar um ouvinte de response antes de navegar, rolar para acionar as requisições, e então analisar os corpos JSON:

javascript Copy
const xhrCalls = [];
page.on('response', async (resp) => {
  const rt = resp.request().resourceType();
  if (rt !== 'xhr' && rt !== 'fetch') return;
  try {
    xhrCalls.push({ url: resp.url(), body: await resp.text() });
  } catch { /* alguns corpos não são legíveis; ignorar */ }
});

await page.goto('https://www.tiktok.com/@oddanimalspecimens', { waitUntil: 'domcontentloaded' });

// Role para acionar postagens/comentários carregados de forma preguiçosa
for (let i = 0; i < 5; i++) {
  await page.evaluate(() => window.scrollBy(0, document.body.scrollHeight));
  await new Promise((r) => setTimeout(r, 2000));
}

// Filtrar os endpoints de lista de item/comentário e JSON.parse os corpos
const itemLists = xhrCalls.filter((c) => /\/api\/(post|comment)\//.test(c.url));

A partir daí, você JSON.parse cada corpo capturado e puxa os arrays de itens ou comentários. Essa é a mesma abordagem de renderizar e depois ler a rede que foi usada no perfil, apenas conduzida pela rolagem em vez de um único blob de hidratação.


O Que Você Recebe de Volta

A extração do perfil retorna o objeto userInfo do TikTok. A forma abaixo é exatamente o que a execução ao vivo emitiu; as contagens são uma captura real e mudarão com o tempo:

json Copy
{
  "user": {
    "id": "...",
    "uniqueId": "oddanimalspecimens",
    "nickname": "Odd Animal Specimens",
    "avatarLarger": "https://...",
    "signature": "...",
    "verified": false,
    "secUid": "...",
    "privateAccount": false
  },
  "stats": {
    "followerCount": 4000000,
    "followingCount": 9,
    "heartCount": 78000000,
    "videoCount": 179,
    "diggCount": 0,
    "friendCount": 6
  }
}
// A forma é verbatim do userInfo do TikTok; campos de string mostrados como "..." são uma amostra ilustrativa, as contagens são uma captura real e mudarão com o tempo.

Algumas observações honestas:

  • O objeto user é amplo — O TikTok inclui dezenas de campos (configurações, secUid, bandeiras de relação). Leia o punhado que você precisa; ignore o resto.
  • heart e heartCount aparecem ambos e carregam o mesmo total — use heartCount.
  • Contagens arredondam em escala. Contas grandes relatam totais arredondados (por exemplo, 4.000.000) da mesma forma que o TikTok os exibe na interface.
  • A região importa para a renderização, não apenas para os dados. Defina proxyCountry e dê à sessão um TTL suficiente.

Conclusão: um padrão em todas as superfícies do TikTok

Raspar o TikTok se resume a duas leituras: analisar #__UNIVERSAL_DATA_FOR_REHYDRATION__ para o que já está na página e capturar respostas XHR para o que se hidrata ao rolar. Perfis, postagens, comentários, busca e canais são todas variações desse único loop de renderizar e extrair. Executá-lo no Scrapeless Scraping Browser é o que faz a renderização acontecer — Chromium anti-detecção mais egressos residenciais, para que o TikTok forneça dados reais em vez de uma casca vazia. Para uma variante de e-commerce do mesmo padrão SDK-over-CDP, veja o guia do scraper Etsy; a página do produto Scraping Browser e docs cobrem toda a superfície do SDK. Defina a região, estenda o TTL para superfícies com muita rolagem e leia o JSON que o TikTok já te oferece.


Pronto para Construir Seu Pipeline de Dados Potencializado por IA?

Junte-se à nossa comunidade para reivindicar um plano gratuito e conectar-se com desenvolvedores que constroem pipelines de dados sociais: Discord · Telegram.
Cadastre-se em app.scrapeless.com para obter o runtime gratuito do Scraping Browser e adaptar os padrões acima aos perfis, consultas e canais necessários para o seu fluxo de trabalho. Veja preços para escalabilidade.


FAQ

P: É legal fazer scraping no TikTok?
Coletar dados publicamente visíveis é geralmente permitido, mas as regras variam conforme a jurisdição e os Termos de Serviço do TikTok se aplicam. Faça scraping apenas de dados públicos, revise os ToS e consulte um advogado para o seu caso de uso.

P: Por que meu scraping retorna uma página vazia ou expira?
Duas causas comuns: a região de saída pela qual o TikTok te redireciona e uma sessão que termina antes que a hidratação finalize. Fixe proxyCountry (troque se a renderização travar) e aumente sessionTTL.

P: Eu preciso de um proxy?
Sim. O TikTok pesa muito a reputação do IP; fixe a saída residencial com proxyCountry para que a página renderize e as XHRs sejam ativadas.

P: Como consigo posts além da primeira página?
Role a página para ativar as requisições XHR carregadas de forma preguiçosa e capture-as com um ouvinte de response, depois analise os corpos JSON — o blob de reidratação contém apenas o primeiro lote.

P: A marcação DOM mudou e meus seletores quebraram. E agora?
Confie nas fontes JSON — o blob de reidratação e os corpos XHR — em vez de fazer scraping da grade renderizada. Elas mudam muito menos do que a marcação visual. Verifique novamente os seletores apenas para os poucos que você ainda precisa.

P: Quantos workers posso executar contra o TikTok?
Mantenha a concorrência modesta — um punhado de sessões por host — para que o sinal de reputação do IP permaneça limpo.

P: Posso executar isso sem um agente de IA?
Sim. É o SDK Scrapeless mais o Puppeteer simples sobre o CDP — nenhum agente é necessário.

Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.

Artigos mais populares

Catálogo