Extrair dados do YouTube com Python: 4 métodos que realmente funcionam

Última atualização em April 15, 2026

Se você já tentou requests.get("https://www.youtube.com/...") e depois usou BeautifulSoup para procurar títulos de vídeos, já sabe como termina: volta um monte de <div> vazia e, no fim das contas, nenhum dado útil.

Essa é a frustração mais comum que vejo entre desenvolvedores que tentam fazer scraping no YouTube pela primeira vez. O YouTube é uma aplicação de página única — quase tudo é renderizado no lado do cliente via JavaScript. O HTML que o teu script em Python recebe é só uma casca. Os títulos reais dos vídeos, a contagem de visualizações e os metadados? Eles ficam escondidos dentro de um enorme bloco JSON chamado ytInitialData, que é injetado pelo JS depois que a página carrega.

Ou seja, aquele soup.find("div", class_="ytd-video-renderer") que parece tão razoável retorna None porque esse elemento literalmente não existe na resposta HTTP bruta. Quando entendi isso, tudo fez sentido — e os quatro métodos abaixo são fruto de muito teste, código quebrado e uma quantidade exagerada de issues no GitHub. Vou te mostrar cada abordagem, explicar exatamente quando usar uma ou outra e, no final, deixar um atalho sem código para quem só quer os dados sem montar um projeto inteiro.

Por que extrair dados do YouTube com Python?

O YouTube não é só uma plataforma de vídeo — é uma fonte de dados com . Com e , existe uma quantidade gigantesca de informação pública que empresas, pesquisadores e criadores querem analisar programaticamente.

O problema é que a análise nativa do YouTube só mostra dados do seu próprio canal. Se você quer entender a frequência de postagem de um concorrente, acompanhar temas em alta no seu nicho ou analisar o sentimento do público nos comentários de vídeos de terceiros, precisa fazer scraping.

Aqui estão os casos de uso mais comuns que vejo no dia a dia:

Caso de usoQuem precisa dissoDados envolvidos
Análise da concorrênciaEquipes de marketing, estrategistas de conteúdoVisualizações, frequência de publicação, taxas de engajamento
Geração de leadsEquipes comerciais, prospecção B2BInformações de contato do canal, e-mails comerciais nas descrições
Pesquisa de mercadoProduct managers, analistasTópicos em alta, sentimento do público nos comentários
Estratégia de conteúdoYouTubers, agênciasFormatos com melhor desempenho, padrões ideais de títulos e tags
SEO / pesquisa de palavras-chaveEspecialistas em SEOTítulos, tags, descrições e sinais de ranqueamento
Monitoramento de marcaTimes de PR, gestores de marcaMenções em títulos, comentários e descrições
Pesquisa acadêmicaPesquisadores, cientistas de dadosConjuntos de comentários para análise de sentimento (um estudo de 2025 atingiu 93,1% de precisão ao ajustar o BERT com 45 mil comentários do YouTube)

Uma análise competitiva entre DJI, GoPro e Insta360, por exemplo, descobriu que — um tipo de insight impossível de enxergar só dentro do YouTube Studio.

Por que requests + BeautifulSoup sozinho não consegue extrair dados do YouTube

Antes de chegar aos métodos que funcionam, você precisa entender por que a abordagem óbvia falha. Isso não é teoria acadêmica — vai te poupar horas de debug.

A abordagem “óbvia” seria algo assim, em termos conceituais:

1import requests
2from bs4 import BeautifulSoup
3response = requests.get("https://www.youtube.com/@somechannel/videos")
4soup = BeautifulSoup(response.text, "html.parser")
5videos = soup.find_all("a", id="video-title-link")
6print(len(videos))  # 0 — sempre

O resultado é sempre zero. Como diz o : “A página foi carregada dinamicamente, o que não é suportado pela biblioteca requests.” O é ainda mais direto: “Usando apenas requests e BeautifulSoup, você não consegue executar JavaScript.”

O explica o mecanismo: o YouTube foi construído como uma Single Page Application (SPA). Quando você faz requisições HTTP básicas, recebe apenas o HTML inicial — o conteúdo real ainda não foi renderizado. Os dados dos vídeos ficam escondidos em objetos JavaScript que o navegador normalmente executaria e injetaria no DOM.

A boa notícia: o YouTube de fato embute todos os dados de que você precisa no HTML bruto. Só que eles não estão em elementos do DOM — estão em dois blocos JSON dentro de tags <script>:

  • ytInitialData — estrutura da página, listagem de vídeos, métricas de engajamento, tokens de continuação de comentários
  • ytInitialPlayerResponse — metadados centrais do vídeo (título, descrição, duração, formatos, legendas)

Ambos podem ser acessados com um único requests.get() — sem navegador — desde que você saiba como extrair e interpretar esses dados. Esse é o Método 1 abaixo.

4 formas de extrair dados do YouTube com Python: comparação lado a lado

Antes de entrar em cada método, aqui vai a matriz de decisão. Testei as quatro abordagens e comparei com base nos critérios que realmente importam quando você está escolhendo uma ferramenta para um projeto real.

Critériorequests + BS4 (ytInitialData)Selenium / Playwrightyt-dlpYouTube Data APISem código (Thunderbit)
Complexidade de configuraçãoBaixaMédiaBaixaMédia (chave de API)Nenhuma
Lida com renderização JSParcial (parse de JSON)SimSimN/A (API estruturada)Sim
VelocidadeRápidaLentaRápidaRápidaRápida (na nuvem)
Risco de anti-botMédioAltoBaixoNenhumTratado
Cotas / limites de taxaNenhum (mas há bloqueios de IP)Nenhum (mas há detecção)Nenhum10.000 unidades/diaBaseado em créditos
Extração de comentáriosDifícilPossível, mas complexaNativoNativoDepende da página
TranscriçõesNãoComplexoSimNãoNão
Melhor paraMetadados rápidosResultados de busca, páginas dinâmicasMetadados em lote + comentáriosDados estruturados em escalaNão programadores, exportações rápidas

Resumo rápido: youtube-scraping-methods.webp

Quais dados do YouTube você realmente consegue extrair — e com qual método?

Esta é a tabela de referência que eu queria ter quando comecei. Nenhum método cobre todos os campos — por isso este artigo traz quatro.

Campo de dadosBS4 (ytInitialData)Selenium/Playwrightyt-dlpYouTube APIThunderbit
Título do vídeo
Número de visualizações
Curtidas⚠️ Inconsistente
Comentários (texto)⚠️ Complexo⚠️
Transcrição/legendas⚠️
Tags⚠️
URLs das miniaturas
Número de inscritos do canal⚠️
Data de envio
Duração do vídeo
Dados específicos de Shorts⚠️⚠️⚠️

Escolha o método com base nas linhas que realmente importam para o teu projeto. Se você precisa de comentários e transcrições, o yt-dlp é o vencedor claro. Se precisa de estatísticas estruturadas em escala moderada, a API é a melhor opção. Se quer dados em dois minutos, continue lendo a seção do Thunderbit.

extracted-data-categories.webp

Método 1: extrair dados do YouTube com Python usando requests + BeautifulSoup (parse de ytInitialData)

Esse método aproveita o fato de que o YouTube embute todos os dados da página como JSON dentro do HTML bruto. Você não precisa de navegador — só precisa saber onde procurar.

  • Dificuldade: Iniciante
  • Tempo necessário: ~15 minutos
  • O que você vai precisar: Python 3.10+, requests, beautifulsoup4

Passo 1: enviar uma requisição GET para a página do YouTube

Envie a requisição com um cabeçalho User-Agent realista. O cabeçalho padrão python-requests/2.x é bloqueado na hora — o confirma que esse é o erro mais comum entre iniciantes.

1import requests
2HEADERS = {
3    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
4                  "AppleWebKit/537.36 (KHTML, like Gecko) "
5                  "Chrome/114.0.0.0 Safari/537.36",
6    "Accept-Language": "en-US,en;q=0.9",
7    "Cookie": "CONSENT=YES+cb",  # contorna a barreira de consentimento da UE
8}
9url = "https://www.youtube.com/@mkbhd/videos"
10response = requests.get(url, headers=HEADERS)
11print(response.status_code)  # Deve ser 200

O cookie CONSENT é essencial — sem ele, requisições vindas da região da UE são redirecionadas para consent.youtube.com, que entrega HTML sem nenhum ytInitialData.

Passo 2: analisar o HTML e localizar o script ytInitialData

Use BeautifulSoup ou regex para encontrar a tag <script> que contém var ytInitialData =:

1import re
2import json
3# Extrair o JSON de ytInitialData
4match = re.search(
5    r"var ytInitialData\s*=\s*({.*?});</script>",
6    response.text,
7    re.DOTALL
8)
9if match:
10    data = json.loads(match.group(1))
11    print("ytInitialData extraído com sucesso")
12else:
13    print("ytInitialData não encontrado — verifique headers/cookies")

Um erro comum é usar um .*? não guloso com apenas }; como sentinela de fim. Terminadores de objetos aninhados aparecem o tempo todo dentro do JSON e vão cortar a captura antes da hora. Use };</script> como faz o — essa é a última atribuição do bloco de script.

Passo 3: navegar pela estrutura do JSON para extrair os vídeos

O JSON é profundamente aninhado. Em vez de fixar caminhos que quebram sempre que o YouTube reorganiza a estrutura (o que acontece com frequência — o documenta várias mudanças de formato desde 2023), use uma busca recursiva por chave:

1def search_dict(partial, search_key):
2    stack = [partial]
3    while stack:
4        cur = stack.pop()
5        if isinstance(cur, dict):
6            for k, v in cur.items():
7                if k == search_key:
8                    yield v
9                else:
10                    stack.append(v)
11        elif isinstance(cur, list):
12            stack.extend(cur)
13# Extrair informações dos vídeos da página do canal
14videos = []
15for vr in search_dict(data, "videoRenderer"):
16    videos.append({
17        "video_id": vr.get("videoId"),
18        "title": vr["title"]["runs"][0]["text"],
19        "views": vr.get("viewCountText", {}).get("simpleText", "N/A"),
20        "published": vr.get("publishedTimeText", {}).get("simpleText", "N/A"),
21    })
22print(f"Encontrados {len(videos)} vídeos")
23for v in videos[:5]:
24    print(f"  {v['title']}{v['views']}")

Essa abordagem recursiva é a mesma que , yt-dlp e Scrapfly acabaram adotando — ela sobrevive às reestruturações frequentes do JSON do YouTube.

Passo 4: exportar os dados extraídos para CSV ou Excel

1import csv
2with open("youtube_videos.csv", "w", newline="", encoding="utf-8") as f:
3    writer = csv.DictWriter(f, fieldnames=["video_id", "title", "views", "published"])
4    writer.writeheader()
5    writer.writerows(videos)
6print("Dados exportados para youtube_videos.csv")

Quando usar este método — e quando não usar

Melhor para: extração rápida de metadados em poucas páginas de canal ou vídeo. Ferramentas leves de SEO. Análises pontuais em que você precisa de título, visualizações e data de envio.

Limitações: a estrutura do JSON muda — quebras já documentadas incluem a reformulação do botão de curtida (2023: toggleButtonRenderersegmentedLikeDislikeButtonViewModel), a reformulação da descrição (2023: description.runs[]attributedDescription.content) e o redesenho da aba Vídeos do canal (2022–2023: gridRendererrichGridRenderer). IPs de datacenter normalmente são bloqueados de forma suave após 50–200 requisições. Sem comentários, sem transcrições.

Método 2: extrair dados do YouTube com Python usando Selenium ou Playwright

Quando você precisa interagir com a página — rolar resultados de busca, clicar em abas, expandir descrições — automação de navegador é o caminho.

  • Dificuldade: Intermediária
  • Tempo necessário: ~30 minutos
  • O que você vai precisar: Python 3.10+, Playwright (pip install playwright && playwright install) ou Selenium + ChromeDriver

Eu recomendo Playwright em vez de Selenium para projetos novos. Os mostram o Playwright como cerca de em comparação com o Selenium. O Playwright usa um WebSocket persistente via Chrome DevTools Protocol, enquanto o Selenium usa WebDriver sobre HTTP, adicionando uma camada de tradução para cada comando.

Passo 1: configurar o Playwright

1pip install playwright
2playwright install chromium
1from playwright.sync_api import sync_playwright
2pw = sync_playwright().start()
3browser = pw.chromium.launch(headless=False)  # com interface reduz parte da detecção
4context = browser.new_context()
5# Pré-carregar cookie de consentimento para contornar a barreira da UE
6context.add_cookies([{
7    "name": "SOCS",
8    "value": "CAISNQgDEitib3FfaWRlbnRpdHlmcm9udGVuZHVpc2VydmVyXzIwMjMwODI5LjA3X3AxGgJlbiACGgYIgJnPpwY",
9    "domain": ".youtube.com",
10    "path": "/",
11}])
12page = context.new_page()

Passo 2: abrir uma página do YouTube e aguardar o carregamento do conteúdo

1page.goto("https://www.youtube.com/@mkbhd/videos")
2page.wait_for_selector("a#video-title-link", timeout=15000)
3print("Página carregada — elementos de vídeo visíveis")

Se estiver extraindo resultados de busca, vá para https://www.youtube.com/results?search_query=sua+busca.

Passo 3: lidar com infinite scroll para carregar mais vídeos

O YouTube usa rolagem infinita nas páginas de canal e nos resultados de busca. Aqui está o loop clássico de scrollHeight, adaptado do :

1prev_height = -1
2max_scrolls = 20  # limite isso — um canal com 10 mil vídeos vai rolar para sempre
3scroll_count = 0
4while scroll_count &lt; max_scrolls:
5    page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
6    page.wait_for_timeout(1500)  # aguarda o novo conteúdo carregar
7    new_height = page.evaluate("document.body.scrollHeight")
8    if new_height == prev_height:
9        break  # nenhum novo conteúdo foi carregado
10    prev_height = new_height
11    scroll_count += 1
12print(f"Rolou {scroll_count} vezes")

Passo 4: extrair os dados do vídeo a partir da página renderizada

1video_elements = page.query_selector_all("a#video-title-link")
2videos = []
3for el in video_elements:
4    title = el.inner_text()
5    href = el.get_attribute("href")
6    video_id = href.split("v=")[-1] if href else None
7    videos.append({"title": title, "video_id": video_id, "url": f"https://www.youtube.com{href}"})
8print(f"Extraídos {len(videos)} vídeos")

Para contagem de visualizações e data de envio, você vai precisar capturar elementos irmãos. O alerta que id="video-title-link" não é universal — o YouTube publica várias variações de página. O fallback mais robusto é a[href*="watch"].

Passo 5: exportar para CSV ou Google Sheets

1import csv
2with open("youtube_playwright.csv", "w", newline="", encoding="utf-8") as f:
3    writer = csv.DictWriter(f, fieldnames=["title", "video_id", "url"])
4    writer.writeheader()
5    writer.writerows(videos)
6browser.close()
7pw.stop()

Quando usar este método — e quando não usar

Melhor para: extrair resultados de busca, interagir com elementos dinâmicos da página (clicar em abas, expandir descrições) e qualquer coisa que exija um DOM totalmente renderizado.

Limitações: lento (~1,5–3 segundos por vídeo em um fluxo de rolagem + extração). Alto risco de detecção anti-bot — o Selenium padrão define navigator.webdriver === true, que . Consome muitos recursos (cada instância do navegador usa de 200 a 500 MB de RAM). Para 100 vídeos, espere algo entre 3 e 8 minutos, em vez de segundos com yt-dlp.

Método 3: extrair dados do YouTube com Python usando yt-dlp

yt-dlp é o canivete suíço do scraping no YouTube. É um fork comunitário do youtube-dl com , releases noturnos ativos e suporte embutido para metadados, comentários, transcrições e scraping em lote — tudo sem precisar de navegador ou chave de API.

  • Dificuldade: De iniciante a intermediário
  • Tempo necessário: ~10 minutos
  • O que você vai precisar: Python 3.10+, pip install yt-dlp

Passo 1: instalar o yt-dlp

1pip install yt-dlp

Sem drivers de navegador, sem chaves de API, sem arquivos de configuração.

Passo 2: extrair metadados do vídeo sem baixar o arquivo

1import yt_dlp
2opts = {
3    "quiet": True,
4    "skip_download": True,      # sem bytes do vídeo — só metadados
5    "no_warnings": True,
6}
7with yt_dlp.YoutubeDL(opts) as ydl:
8    info = ydl.extract_info(
9        "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
10        download=False
11    )
12print(f"Título: {info['title']}")
13print(f"Visualizações: {info['view_count']:,}")
14print(f"Curtidas: {info.get('like_count', 'N/A')}")
15print(f"Duração: {info['duration']}s")
16print(f"Data de envio: {info['upload_date']}")
17print(f"Canal: {info['channel']} ({info.get('channel_follower_count', 'N/A')} inscritos)")
18print(f"Tags: {info.get('tags', [])[:5]}")

Uma chamada típica de extract_info retorna de 80 a 120 campos, dependendo do estado do vídeo: id, title, channel, channel_id, channel_follower_count, view_count, like_count, comment_count, upload_date, duration, tags, categories, description, thumbnails, is_live, availability, automatic_captions, subtitles, chapters, heatmap e muito mais.

Passo 3: extrair comentários de um vídeo do YouTube

1opts = {
2    "quiet": True,
3    "skip_download": True,
4    "getcomments": True,
5    "extractor_args": {
6        "youtube": {
7            "max_comments": ["200", "50", "50", "10"],  # total, principais, respostas por comentário, respostas no total
8            "comment_sort": ["top"],
9        }
10    },
11}
12with yt_dlp.YoutubeDL(opts) as ydl:
13    info = ydl.extract_info(
14        "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
15        download=False
16    )
17comments = info.get("comments", [])
18print(f"{len(comments)} comentários obtidos")
19for c in comments[:3]:
20    print(f"  [{c.get('like_count', 0)} curtidas] {c['author']}: {c['text'][:80]}...")

A extração de comentários é lenta. A relata a coleta de comentários a cerca de 30 KB/s — um vídeo com 100 mil comentários pode levar horas. A documenta vídeos em que as URLs dos formatos expiram (~6 horas) antes de a paginação dos comentários terminar. Defina max_comments de forma agressiva para vídeos grandes.

Passo 4: extrair transcrições e legendas

Nem a YouTube Data API nem o parse com BS4 conseguem te dar transcrições completas. Esse é o grande diferencial do yt-dlp.

1opts = {
2    "quiet": True,
3    "skip_download": True,
4    "writesubtitles": True,
5    "writeautomaticsub": True,
6    "subtitleslangs": ["en", "en-orig"],
7    "subtitlesformat": "json3",   # adequado para parsing por máquina: start/dur em ms + texto
8    "outtmpl": "%(id)s.%(ext)s",
9}
10with yt_dlp.YoutubeDL(opts) as ydl:
11    info = ydl.extract_info(
12        "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
13        download=False
14    )
15# Acessar os dados de legenda diretamente do dicionário info
16auto_captions = info.get("automatic_captions", {})
17manua_lsubs = info.get("subtitles", {})
18print(f"Idiomas de legendas automáticas: {list(auto_captions.keys())[:10]}")
19print(f"Idiomas de legendas manuais: {list(manua_lsubs.keys())}")

O formato json3 é o preferido para parsing por máquina — cada segmento traz start/dur em milissegundos e trechos de texto. Os códigos de idioma seguem BCP-47 (en, en-US, zh-Hans, ja, es).

Passo 5: fazer scraping em lote de vários vídeos ou de um canal inteiro

1opts = {
2    "quiet": True,
3    "skip_download": True,
4    "extract_flat": "in_playlist",  # rápido — só IDs e títulos dos vídeos
5    "sleep_interval": 2,
6    "max_sleep_interval": 6,
7}
8with yt_dlp.YoutubeDL(opts) as ydl:
9    info = ydl.extract_info(
10        "https://www.youtube.com/@mkbhd/videos",
11        download=False
12    )
13entries = info.get("entries", [])
14print(f"Encontrados {len(entries)} vídeos no canal")
15for e in entries[:5]:
16    print(f"  {e.get('title', 'N/A')}{e.get('id')}")

Passe uma URL de canal, uma URL de playlist ou até uma busca (ytsearch10:python scraping) e o yt-dlp cuida da paginação internamente.

Quando usar este método — e quando não usar

Melhor para: extração em massa de metadados, comentários, transcrições, download de vídeos e varreduras de canal quando você precisa do conjunto completo de campos.

Limitações: não é o ideal para páginas de resultados de busca (Selenium/Playwright é melhor nisso). A corrida anti-bot de 2024–2026 tornou o yt-dlp mais complexo para operar em escala — o YouTube agora aplica em alguns clientes. Em produção, instale o plugin e use --cookies-from-browser chrome (com uma conta descartável — a equipe do yt-dlp avisa que cookies de uma conta Google real podem levar a banimento dessa conta).

Método 4: extrair dados do YouTube com Python usando a YouTube Data API

A API oficial YouTube Data API v3 é a forma mais confiável e estruturada de obter dados do YouTube. As respostas vêm em JSON limpo, os campos são documentados e não existe a guerra de gato e rato do anti-bot. Mas há um detalhe que muitos tutoriais ignoram: o sistema de cota.

  • Dificuldade: Intermediária
  • Tempo necessário: ~20 minutos (incluindo a configuração da chave de API)
  • O que você vai precisar: Python 3.10+, um projeto no Google Cloud, pip install google-api-python-client

Passo 1: obter uma chave da YouTube Data API

  1. Acesse o
  2. Crie um novo projeto (ou selecione um existente)
  3. Vá em APIs & Services → Library → pesquise por "YouTube Data API v3" → Enable
  4. Vá em APIs & Services → CredentialsCreate Credentials → API Key
  5. Copie a chave — você vai usá-la no código abaixo

Passo 2: fazer sua primeira chamada à API

1from googleapiclient.discovery import build
2API_KEY = "SUA_CHAVE_DE_API_AQUI"
3youtube = build("youtube", "v3", developerKey=API_KEY)
4# Buscar detalhes de um vídeo específico
5response = youtube.videos().list(
6    part="snippet,statistics,contentDetails",
7    id="dQw4w9WgXcQ"
8).execute()
9video = response["items"][0]
10print(f"Título: {video['snippet']['title']}")
11print(f"Visualizações: {video['statistics']['viewCount']}")
12print(f"Curtidas: {video['statistics'].get('likeCount', 'oculto')}")
13print(f"Comentários: {video['statistics'].get('commentCount', 'desativado')}")
14print(f"Duração: {video['contentDetails']['duration']}")
15print(f"Tags: {video['snippet'].get('tags', [])[:5]}")

A resposta é limpa, tipada e documentada. Sem arqueologia em JSON.

Passo 3: extrair detalhes de vídeos, informações do canal e comentários

1# Buscar vídeos
2search_response = youtube.search().list(
3    part="snippet",
4    q="tutorial de web scraping em Python",
5    type="video",
6    maxResults=10,
7    order="viewCount"
8).execute()
9for item in search_response["items"]:
10    print(f"  {item['snippet']['title']}{item['id']['videoId']}")
11# Buscar comentários
12comments_response = youtube.commentThreads().list(
13    part="snippet",
14    videoId="dQw4w9WgXcQ",
15    maxResults=20,
16    order="relevance"
17).execute()
18for item in comments_response["items"]:
19    comment = item["snippet"]["topLevelComment"]["snippet"]
20    print(f"  [{comment['likeCount']} curtidas] {comment['authorDisplayName']}: {comment['textDisplay'][:80]}")

A realidade das cotas da YouTube API (o que ninguém conta)

Esta é a parte que separa um guia útil de um tutorial de copiar e colar. A alocação padrão é de , com redefinição à meia-noite no horário do Pacífico. Veja quanto cada chamada custa:

Endpoint da APICusto por chamadaMáximo por chamada
search.list100 unidades50 resultados
videos.list1 unidade50 IDs de vídeo (em lote)
channels.list1 unidade50 IDs de canal
commentThreads.list1 unidade100 comentários
captions.list50 unidadesN/A

Agora a conta. Suponha que você queira extrair 1.000 resultados de busca:

  • Chamadas de busca: 1.000 resultados ÷ 50 por página = 20 chamadas × 100 unidades = 2.000 unidades (20% do teu orçamento diário — já foi)
  • Detalhes dos vídeos para esses 1.000 vídeos: 1.000 IDs ÷ 50 por lote = 20 chamadas × 1 unidade = 20 unidades (barato — o videos.list em lote é o grande alívio)
  • Comentários desses 1.000 vídeos (assumindo 1 página por vídeo): 1.000 chamadas × 1 unidade = 1.000 unidades

Total: cerca de 3.020 unidades para uma extração modesta. Mas se esses vídeos tiverem threads longas de comentários (50+ páginas cada), você vai queimar as 7.000 unidades restantes bem rápido. Um vídeo com 50.000 comentários = ~500 páginas = 500 unidades. Faça isso com 20 vídeos e a cota do dia acaba.

O exige uma auditoria de conformidade completa: URL da política de privacidade, URL dos termos de uso, vídeo mostrando o app e justificativa matemática da cota. Relatos da comunidade sugerem resposta típica do Google em 3–5 dias úteis, aprovação completa pode levar semanas ou meses, e muitos pedidos são negados — especialmente casos do tipo “quero mais dados para análise”.

Quando usar a API: escala pequena a média, quando você precisa de dados estruturados e confiáveis, quando comentários e estatísticas do canal importam, e quando você consegue conviver com o limite de cota.

Quando fazer scraping faz mais sentido: projetos em grande escala (>10 mil vídeos/dia), campos que a API não expõe (transcrições completas — captions.download exige OAuth + permissão do proprietário do vídeo), ou quando você precisa de mais de 500 resultados de busca por consulta (limite rígido da API, independentemente do totalResults).

O atalho sem código: extrair dados do YouTube com Thunderbit (sem Python)

Se você precisa de Python para uma pipeline de dados, use os Métodos 1–4 acima. Mas se precisa de dados do YouTube em 2 minutos — talvez você seja um profissional de marketing querendo comparar concorrentes, ou um desenvolvedor que só quer uma extração rápida sem configurar projeto nenhum — existe um caminho mais curto.

é uma extensão de AI web scraper para Chrome que criamos justamente para os casos em que escrever código é exagero. Ela funciona diretamente nas páginas do YouTube no teu navegador.

Como extrair dados do YouTube com Thunderbit em 3 passos

Passo 1: instale a e abra uma página de canal, uma página de resultados de busca ou uma página de vídeo no YouTube.

Passo 2: clique em "AI Suggest Fields" na barra lateral do Thunderbit. A IA lê a página e sugere colunas como título do vídeo, visualizações, data de envio, duração, nome do canal e URL da miniatura. Você pode adicionar, remover ou renomear colunas como quiser.

Passo 3: clique em "Scrape" e exporte para Google Sheets, Excel, CSV, Airtable ou Notion. Os dados caem numa tabela limpa, pronta para uso.

Para quem isso é indicado

  • Profissionais de marketing que precisam de dados de canais concorrentes, mas não programam
  • Desenvolvedores que querem uma extração rápida sem criar ambiente virtual e instalar dependências
  • Qualquer pessoa esbarrando em barreiras anti-bot — o Thunderbit faz o scraping na própria sessão autenticada do teu navegador, herdando cookies e tokens PO. Isso contorna vários bloqueios que atrapalham scrapers no lado do servidor
  • O Thunderbit também pode usar para visitar cada página de vídeo e enriquecer a tabela com detalhes adicionais (curtidas, descrição, tags)

Para uma análise mais profunda de como o Thunderbit lida especificamente com o YouTube, confira o e o .

Dicas para extrair dados do YouTube com Python sem ser bloqueado

Essas dicas valem para todos os quatro métodos em Python. As medidas anti-bot do YouTube têm dificuldade , com três sinais principais: análise comportamental do IP, necessidade de execução de JS e estrutura HTML que muda com frequência.

Para todos os métodos:

  • Alterne os User-Agents e o conjunto completo de headers — Accept, Accept-Language e os client hints Sec-CH-UA precisam bater com o UA declarado. O tem uma lista atualizada.
  • Adicione atrasos aleatórios de 2 a 8 segundos entre requisições. Intervalos fixos são um sinal de detecção.
  • Use proxies residenciais para qualquer coisa além de poucas páginas. IPs de datacenter (AWS, GCP, Hetzner) estão .
  • Alterne sessão + IP juntos — o YouTube vincula sessões ao IP, e o mesmo cookie de sessão aparecendo em dois IPs é um sinal vermelho.

Para requests + BS4: defina o cookie CONSENT=YES+cb. Sem isso, requisições da UE são redirecionadas para uma página de consentimento sem dados.

Para Selenium/Playwright: rode com interface, usando xvfb em servidores Linux, em vez de --headless=new — o Chrome headless ainda entrega sinais de fingerprint suficientes para detectores mais sofisticados. Considere o , que aplica cerca de 17 evasões.

Para yt-dlp: use as opções sleep_interval e max_sleep_interval. Instale o plugin para geração de PO Token. Use --cookies-from-browser chrome com uma conta descartável.

Para a API: monitore o uso de cota no e faça requisições em lote de forma eficiente. Uma única chamada videos.list com 50 IDs separados por vírgula custa 1 unidade — use isso a teu favor.

Para o Thunderbit: as medidas anti-bot são tratadas automaticamente, já que o scraping acontece na tua sessão do navegador. É basicamente como automatizar o que você faria manualmente.

Depende do que você extrai, de como você extrai e do que faz com os dados.

O cenário jurídico mudou em 2024 com Meta Platforms v. Bright Data (N.D. Cal., janeiro de 2024), quando . Depois dessa decisão, extrair dados públicos ficou “significativamente menos arriscado”. Por outro lado, hiQ v. LinkedIn terminou com uma por violação dos termos, violações da CFAA (contas falsas) e invasão de bens móveis — além de uma liminar permanente.

Os próprios são explícitos: “Você não está autorizado a acessar o Serviço usando meios automatizados (como robôs, botnets ou scrapers)”, exceto com permissão prévia por escrito ou conforme permitido pela legislação aplicável. A YouTube Data API é a forma oficialmente autorizada de acessar os dados.

Algumas regras práticas:

  • Extrair dados públicos visíveis para pesquisa pessoal ou análise não comercial geralmente traz menos risco
  • A API é o caminho mais seguro — ela é explicitamente autorizada
  • Evite extrair conteúdo privado ou protegido por login, baixar vídeos com copyright para redistribuição ou violar GDPR com dados pessoais de comentários
  • Comentários do YouTube contêm dados pessoais sob o Art. 4(1) do GDPR — trate com cuidado as informações de titulares de dados da UE
  • Consulte um advogado para projetos de scraping comercial

Nada disso é aconselhamento jurídico. O cenário muda rápido — uma nova onda de que fizeram scraping no YouTube para treinamento está redesenhando esse campo em 2025–2026.

Qual método você deve usar para extrair dados do YouTube com Python?

Guia de decisão:

  • Precisa de metadados rápidos de poucas páginas? → Método 1 (requests + BS4). Rápido, leve, sem dependências além de requests e beautifulsoup4.
  • Precisa extrair resultados de busca ou interagir com páginas dinâmicas? → Método 2 (Selenium/Playwright). Renderização completa no navegador, suporte a infinite scroll, mas lento e sujeito à detecção.
  • Precisa de metadados em massa, comentários ou transcrições? → Método 3 (yt-dlp). A ferramenta única mais completa — por um motivo.
  • Precisa de dados estruturados e confiáveis em escala moderada? → Método 4 (YouTube Data API). Oficial, limpa, mas limitada a .
  • Precisa dos dados em 2 minutos sem escrever código?. Baseado no navegador, com IA, exporta para Google Sheets em poucos cliques.

Nenhum método cobre todos os casos de uso. Salve a tabela comparativa e a tabela de campos extraíveis acima — elas vão te poupar tempo no teu próximo projeto. E, se quiser explorar mais , temos vários guias no blog da Thunderbit cobrindo desde até .

Experimente o Thunderbit para extrair dados do YouTube

Perguntas frequentes

Posso extrair dados do YouTube sem uma chave de API?

Sim. Os Métodos 1 (requests + BS4), 2 (Selenium/Playwright) e 3 (yt-dlp) não exigem chave de API. Só o Método 4 (YouTube Data API) precisa de uma. O Thunderbit também funciona sem chave de API — ele faz a extração diretamente no teu navegador.

Qual é a maneira mais rápida de extrair dados do YouTube com Python?

Em Python, yt-dlp e requests + BS4 são os mais rápidos — ambos evitam a sobrecarga de navegador e conseguem puxar metadados em segundos por vídeo. O yt-dlp é especialmente rápido em operações em lote porque cuida da paginação internamente. Para quem não usa Python, o Thunderbit é o mais rápido no geral porque não há tempo de configuração.

Como extrair comentários do YouTube com Python?

yt-dlp tem extração de comentários embutida via opção getcomments — é o caminho mais simples. A YouTube Data API também suporta comentários por meio de commentThreads.list (1 unidade de cota por chamada, até 100 comentários por página). Selenium/Playwright até consegue fazer isso rolando a página e extraindo os elementos renderizados, mas é lento e frágil.

Posso extrair Shorts do YouTube com Python?

Sim. O yt-dlp lida bem com metadados de Shorts — ele os trata como vídeos normais, com campos extras específicos de Shorts. A YouTube Data API tem suporte parcial (a contagem de visualizações de Shorts — agora a métrica conta qualquer início de reprodução/replay). BS4 e Selenium/Playwright têm suporte limitado a Shorts, porque a vitrine de Shorts usa estruturas de DOM diferentes.

Quantos vídeos do YouTube posso extrair por dia?

Com a YouTube Data API, você fica limitado a cerca de 10.000 unidades de cota por dia. Usando chamadas em lote de videos.list (50 IDs por chamada por 1 unidade), isso dá até 500 mil consultas de estatísticas de vídeo por dia — mas search.list, com 100 unidades por chamada, consome o orçamento rapidamente. Com métodos de scraping (BS4, Selenium, yt-dlp), o limite é prático, não fixo: bloqueios de IP costumam começar após algumas centenas ou alguns milhares de requisições por IP por dia, dependendo da configuração de proxy e do padrão de requisições. O Thunderbit usa um sistema de créditos vinculado ao seu .

Saiba mais

Ke
Ke
CTO @ Thunderbit. Ke is the person everyone pings when data gets messy. He's spent his career turning tedious, repetitive work into quiet little automations that just run. If you've ever wished a spreadsheet could fill itself in, Ke has probably already built the thing that does it.
Sumário

Experimente a Thunderbit

Extraia leads e outros dados em apenas 2 cliques. Com tecnologia de IA.

Obter Thunderbit É grátis
Extraia dados usando IA
Transfira dados facilmente para Google Sheets, Airtable ou Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week