Scrapování YouTube v Pythonu: 4 metody, které opravdu fungují

Poslední aktualizace April 15, 2026
Scrapování YouTube v Pythonu: 4 metody, které opravdu fungují

Jestli jste někdy zkusili requests.get("https://www.youtube.com/...") a pak výsledky prohnali přes BeautifulSoup s cílem najít názvy videí, už asi znáte pointu: skončili jste u zdi prázdných <div> tagů a s nulou užitečných dat.

To je úplně nejčastější problém, se kterým se setkávám u vývojářů, kteří se pokoušejí poprvé scrapovat YouTube. YouTube je single-page aplikace — skoro všechno vykresluje na straně klienta pomocí JavaScriptu. HTML, které dostane váš Python skript, je jen prázdná skořápka. Skutečné názvy videí, počty zhlédnutí a metadata? Ty jsou schované v obřím JSON bloku s názvem ytInitialData, který se po načtení stránky injektuje přes JS.

Takže vaše docela rozumné soup.find("div", class_="ytd-video-renderer") vrátí None, protože ten prvek v surové HTTP odpovědi vůbec neexistuje. Jakmile mi tohle došlo, vše do sebe zapadlo — a čtyři metody níže jsou výsledkem spousty testování, rozbíjení věcí a čtení absurdního množství GitHub issue. Provedu vás každým postupem, ukážu vám, kdy se který vyplatí použít, a na konci přidám i no-code zkratku pro každého, kdo prostě chce data bez nastavování projektu.

Proč vlastně scrapovat YouTube pomocí Pythonu?

YouTube není jen video platforma — je to datový zdroj s 2,58 miliardy měsíčně aktivních uživatelů. S více než 5,1 miliardy hostovaných videí a více než 500 hodinami obsahu nahranými každou minutu jde o obrovské množství veřejně dostupných informací, které firmy, výzkumníci i tvůrci chtějí analyzovat programově.

Háček je v tom, že vestavěná analytika YouTube ukazuje data jen pro váš vlastní kanál. Pokud chcete zjistit, jak často publikuje konkurence, sledovat trendy ve svém oboru nebo analyzovat sentiment publika z komentářů u cizích videí, musíte scrapovat.

Tady jsou nejčastější reálné případy použití, se kterými jsem se setkal:

Případ použitíKdo to potřebujeJaká data se sbírají
Analýza konkurenceMarketingové týmy, content stratégovéPočty zhlédnutí, frekvence publikování, míra engagementu
Generování leadůObchodní týmy, B2B outreachKontaktní údaje na kanál, firemní e-maily v popiscích
Průzkum trhuProduktoví manažeři, analyticiTrendující témata, sentiment publika v komentářích
Content strategieYouTubeři, agenturyFormáty s nejlepším výkonem, optimální vzory titulů/tagů
SEO / research klíčových slovSEO specialistéNázvy videí, tagy, popisky, signály pro umístění
Monitoring značkyPR týmy, brand manageřiZmínky v názvech videí, komentářích a popiscích
Akademický výzkumVýzkumníci, datoví vědciDatové sady komentářů pro analýzu sentimentu (jedna studie z roku 2025 dosáhla přesnosti 93,1 % po doladění BERT na 45 tisících komentářů z YouTube)

Například konkurenční analýza DJI vs. GoPro vs. Insta360 ukázala, že dosah DJI na YouTube (390 milionů zhlédnutí) předčil oba konkurenty dohromady — a to je přesně ten typ insightu, který v YouTube Studiu vůbec neuvidíte.

Proč samotné requests + BeautifulSoup na YouTube nestačí

Než se dostaneme k metodám, které fungují, je potřeba pochopit proč ten nejzřejmější postup selhává. Není to akademická vsuvka — ušetří vám to hodiny ladění.

„Zjevný“ přístup vypadá zhruba takto:

import requests
from bs4 import BeautifulSoup

response = requests.get("https://www.youtube.com/@somechannel/videos")
soup = BeautifulSoup(response.text, "html.parser")
videos = soup.find_all("a", id="video-title-link")
print(len(videos))  # 0 — pokaždé

Výsledek je vždy nula. Jak uvádí debugovací příručka ScrapeOps: „Stránka se načetla dynamicky, což knihovna requests nepodporuje.“ Průvodce pro začátečníky od Teclado to říká ještě přímočařeji: „S requests a BeautifulSoup samotnými nemůžete spouštět JavaScript.“

Analýza YouTube od Scrapfly z roku 2026 vysvětluje mechanismus: YouTube je postavený jako Single Page Application (SPA). Když použijete obyčejný HTTP request, dostanete jen počáteční HTML skořápku — skutečný obsah ještě nebyl vykreslen. Video data jsou skrytá v JavaScriptových objektech, které by normálně spustil prohlížeč a vložil do DOM.

Dobrá zpráva: YouTube opravdu ukládá všechna potřebná data do surového HTML. Jen nejsou v DOM elementech — jsou ve dvou JSON blocích uvnitř <script> tagů:

  • ytInitialData — struktura stránky, seznamy videí, metriky engagementu, continuation tokeny komentářů
  • ytInitialPlayerResponse — základní metadata videa (název, popis, délka, formáty, titulky)

Oba bloky můžete získat jediným requests.get() — bez prohlížeče — jakmile víte, kde je hledat a jak je parsovat. To je níže Metoda 1.

4 způsoby, jak scrapovat YouTube v Pythonu: srovnání vedle sebe

Než se pustíme do jednotlivých metod, tady je rozhodovací matice. Otestoval jsem všechny čtyři přístupy a porovnal je podle kritérií, která jsou v reálném projektu skutečně důležitá.

Kritériumrequests + BS4 (ytInitialData)Selenium / Playwrightyt-dlpYouTube Data APINo-code (Thunderbit)
Složitost nastaveníNízkáStředníNízkáStřední (API klíč)Žádná
Zvládá renderování JSČástečně (parsování JSON)AnoAnoN/A (strukturované API)Ano
RychlostRychláPomaláRychláRychláRychlá (cloud)
Riziko anti-bot blokaceStředníVysokéNízkéŽádnéOšetřeno
Kvóty / rate limitsŽádné (ale IP bloky)Žádné (ale detekce)Žádné10 000 jednotek/denNa bázi kreditů
Extrakce komentářůTěžkáMožná, ale složitáVestavěnáVestavěnáZáleží na stránce
Přepisy / titulkyNeSložitéAnoNeNe
Nejlepší proRychlá metadataVýsledky hledání, dynamické stránkyHromadná metadata + komentářeStrukturovaná data ve větším měřítkuNetechnické uživatele, rychlý export

Rychlé shrnutí: youtube-scraping-methods.webp

Jaká YouTube data můžete vlastně získat a jakou metodou?

Tohle je referenční tabulka, kterou jsem si přál mít, když jsem začínal. Žádná jednotlivá metoda nepokrývá všechna pole — právě proto tenhle článek pokrývá čtyři.

Datové poleBS4 (ytInitialData)Selenium/Playwrightyt-dlpYouTube APIThunderbit
Název videa
Počet zhlédnutí
Počet lajků⚠️ Nekonzistentní
Komentáře (text)⚠️ Složité⚠️
Přepis / titulky⚠️
Tagy⚠️
URL miniatur
Počet odběratelů kanálu⚠️
Datum nahrání
Délka videa
Data specifická pro Shorts⚠️⚠️⚠️

Vyberte si metodu podle toho, které řádky jsou pro váš projekt nejdůležitější. Pokud potřebujete komentáře a přepisy, yt-dlp je jasný vítěz. Pokud potřebujete strukturovaná data ve středním objemu, nejlepší je API. Pokud potřebujete data za dvě minuty, čtěte dál k Thunderbit.

extracted-data-categories.webp

Metoda 1: Scrapujte YouTube v Pythonu pomocí requests + BeautifulSoup (parsování ytInitialData)

Tahle metoda využívá fakt, že YouTube ukládá všechna data stránky jako JSON přímo do surového HTML. Prohlížeč nepotřebujete — jen musíte vědět, kam se dívat.

  • Obtížnost: Začátečník
  • Časová náročnost: ~15 minut
  • Co budete potřebovat: Python 3.10+, requests, beautifulsoup4

Krok 1: Odešlete GET request na stránku YouTube

Pošlete request s realistickým User-Agent hlavičkou. Výchozí hlavička python-requests/2.x bývá zablokována téměř okamžitě — průvodce hlavičkami od ScrapeOps potvrzuje, že tohle je pro začátečníky nejčastější minové pole.

import requests

HEADERS = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/114.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
    "Cookie": "CONSENT=YES+cb",  # obejde EU consent stránku
}

url = "https://www.youtube.com/@mkbhd/videos"
response = requests.get(url, headers=HEADERS)
print(response.status_code)  # Mělo by být 200

Cookie CONSENT je zásadní — bez ní budou requesty z EU přesměrovány na consent.youtube.com, které vrací HTML bez jakéhokoli ytInitialData.

Krok 2: Zpracujte HTML a najděte skript ytInitialData

Použijte BeautifulSoup nebo regulární výraz k nalezení <script> tagu obsahujícího var ytInitialData =:

import re
import json

# Extrakce JSON z ytInitialData
match = re.search(
    r"var ytInitialData\s*=\s*({.*?});</script>",
    response.text,
    re.DOTALL
)
if match:
    data = json.loads(match.group(1))
    print("ytInitialData bylo úspěšně extrahováno")
else:
    print("ytInitialData nenalezeno — zkontrolujte hlavičky/cookies")

Častá chyba: použití nehladového .*? s koncovým oddělovačem jen };. Uvnitř JSON se neustále vyskytují vnořené ukončovací závorky a capture se tím odřízne moc brzy. Použijte };</script> stejně jako Scrapfly ve svém scraperu z roku 2026 — je to poslední přiřazení v samostatném script bloku.

Krok 3: Projděte JSON a vytáhněte video data

JSON je hluboce zanořený. Místo hardcodování cest, které se rozbijí pokaždé, když YouTube přeuspořádá strukturu (což dělá pravidelně — issue tracker yt-dlp dokumentuje několik změn formátu od roku 2023), použijte rekurzivní hledání klíče:

def search_dict(partial, search_key):
    stack = [partial]
    while stack:
        cur = stack.pop()
        if isinstance(cur, dict):
            for k, v in cur.items():
                if k == search_key:
                    yield v
                else:
                    stack.append(v)
        elif isinstance(cur, list):
            stack.extend(cur)

# Extrakce informací o videích z kanálové stránky
videos = []
for vr in search_dict(data, "videoRenderer"):
    videos.append({
        "video_id": vr.get("videoId"),
        "title": vr["title"]["runs"][0]["text"],
        "views": vr.get("viewCountText", {}).get("simpleText", "N/A"),
        "published": vr.get("publishedTimeText", {}).get("simpleText", "N/A"),
    })

print(f"Nalezeno {len(videos)} videí")
for v in videos[:5]:
    print(f"  {v['title']} — {v['views']}")

Právě tenhle rekurzivní přístup používají scrapetube, yt-dlp i Scrapfly — přežívá časté přestavby JSON struktury na YouTube.

Krok 4: Exportujte data do CSV nebo Excelu

import csv

with open("youtube_videos.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=["video_id", "title", "views", "published"])
    writer.writeheader()
    writer.writerows(videos)

print("Data byla exportována do youtube_videos.csv")

Kdy tuhle metodu použít a kdy ne

Nejlepší pro: Rychlé vytahování metadat z několika kanálových nebo video stránek. Lehký SEO tooling. Jednorázové analýzy, kde potřebujete název, zhlédnutí a datum nahrání.

Omezení: JSON struktura se mění — zdokumentované rozbití zahrnuje refaktor tlačítka lajků (2023: toggleButtonRenderersegmentedLikeDislikeButtonViewModel), refaktor popisu (2023: description.runs[]attributedDescription.content) a redesign záložky Videos na kanálu (2022–2023: gridRendererrichGridRenderer). Datacentrové IP bývají měkce blokovány už po 50–200 requestech. Žádné komentáře, žádné přepisy.

Metoda 2: Scrapujte YouTube v Pythonu pomocí Selenium nebo Playwright

Když potřebujete se stránkou interagovat — scrollovat výsledky hledání, klikat na záložky, rozbalovat popisy — je správnou cestou browser automation.

  • Obtížnost: Střední
  • Časová náročnost: ~30 minut
  • Co budete potřebovat: Python 3.10+, Playwright (pip install playwright && playwright install) nebo Selenium + ChromeDriver

Pro nové projekty doporučuji Playwright před Selenium. Benchmarky TestDino z roku 2026 ukazují, že Playwright je zhruba 1,85× rychlejší na jednu akci, používá asi 2,1× méně paměti a zvládne až 4× větší paralelní zátěž než Selenium. Playwright používá trvalý WebSocket přes Chrome DevTools Protocol, zatímco Selenium komunikuje přes WebDriver nad HTTP, což přidává překladovou vrstvu pro každý příkaz.

Krok 1: Nastavte Playwright

pip install playwright
playwright install chromium
from playwright.sync_api import sync_playwright

pw = sync_playwright().start()
browser = pw.chromium.launch(headless=False)  # headful režim pomáhá obejít část detekce
context = browser.new_context()

# Přednastavte consent cookie, abyste obešli EU wall
context.add_cookies([{
    "name": "SOCS",
    "value": "CAISNQgDEitib3FfaWRlbnRpdHlmcm9udGVuZHVpc2VydmVyXzIwMjMwODI5LjA3X3AxGgJlbiACGgYIgJnPpwY",
    "domain": ".youtube.com",
    "path": "/",
}])

page = context.new_page()

Krok 2: Otevřete stránku YouTube a počkejte na načtení obsahu

page.goto("https://www.youtube.com/@mkbhd/videos")
page.wait_for_selector("a#video-title-link", timeout=15000)
print("Stránka načtena — video prvky jsou viditelné")

Pokud scrapujete výsledky hledání, použijte místo toho https://www.youtube.com/results?search_query=your+query.

Krok 3: Ošetřete nekonečný scroll pro načtení dalších videí

YouTube používá na kanálových stránkách a ve výsledcích hledání nekonečný scroll. Tady je klasická smyčka scrollHeight, upravená podle návodu od Scrapfly k scrollování ve Playwrightu:

prev_height = -1
max_scrolls = 20  # omezte to — kanál s 10 000 videi by se scrolloval navždy
scroll_count = 0

while scroll_count < max_scrolls:
    page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
    page.wait_for_timeout(1500)  # počkejte na načtení nového obsahu
    new_height = page.evaluate("document.body.scrollHeight")
    if new_height == prev_height:
        break  # nenačítá se nic nového
    prev_height = new_height
    scroll_count += 1

print(f"Proscrollováno {scroll_count}×")

Krok 4: Získejte video data z renderované stránky

video_elements = page.query_selector_all("a#video-title-link")
videos = []

for el in video_elements:
    title = el.inner_text()
    href = el.get_attribute("href")
    video_id = href.split("v=")[-1] if href else None
    videos.append({"title": title, "video_id": video_id, "url": f"https://www.youtube.com{href}"})

print(f"Extrahováno {len(videos)} videí")

Pro počty zhlédnutí a datum nahrání budete muset vytáhnout související elementy. Průvodce od Crawlee z roku 2025 upozorňuje, že id="video-title-link" není univerzální — YouTube nasazuje víc variant stránek. Robustní fallback je a[href*="watch"].

Krok 5: Exportujte do CSV nebo Google Sheets

import csv

with open("youtube_playwright.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=["title", "video_id", "url"])
    writer.writeheader()
    writer.writerows(videos)

browser.close()
pw.stop()

Kdy tuhle metodu použít a kdy ne

Nejlepší pro: Scrapování výsledků hledání, práci s dynamickými prvky stránky (klikání na záložky, rozbalování popisů), vše, co vyžaduje plně renderovaný DOM.

Omezení: Pomalé (~1,5–3 sekundy na video při scroll-extract flow). Vysoké riziko anti-bot detekce — čisté Selenium nastavuje navigator.webdriver === true, což jakákoli JS detekce okamžitě odhalí. Náročné na zdroje (každá instance prohlížeče spotřebuje 200–500 MB RAM). U 100 videí počítejte spíš s 3–8 minutami než se sekundami jako u yt-dlp.

Metoda 3: Scrapujte YouTube v Pythonu pomocí yt-dlp

yt-dlp je švýcarský armádní nůž pro scrapování YouTube. Jde o komunitní fork youtube-dl s více než 157 000 hvězdičkami na GitHubu, aktivními nočními verzemi a vestavěnou podporou metadat, komentářů, přepisů i dávkového scrapování — a to bez prohlížeče i bez API klíče.

  • Obtížnost: Začátečník až středně pokročilý
  • Časová náročnost: ~10 minut
  • Co budete potřebovat: Python 3.10+, pip install yt-dlp

Krok 1: Nainstalujte yt-dlp

pip install yt-dlp

Žádné browser drivery, žádné API klíče, žádné konfigurační soubory.

Krok 2: Získejte metadata videa bez stahování

import yt_dlp

opts = {
    "quiet": True,
    "skip_download": True,      # žádná video data — jen metadata
    "no_warnings": True,
}

with yt_dlp.YoutubeDL(opts) as ydl:
    info = ydl.extract_info(
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
        download=False
    )

print(f"Název: {info['title']}")
print(f"Zhlédnutí: {info['view_count']:,}")
print(f"Lajky: {info.get('like_count', 'N/A')}")
print(f"Délka: {info['duration']} s")
print(f"Datum nahrání: {info['upload_date']}")
print(f"Kanál: {info['channel']} ({info.get('channel_follower_count', 'N/A')} odb.)")
print(f"Tagy: {info.get('tags', [])[:5]}")

Typické volání extract_info vrací 80–120 polí podle stavu videa: 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 a další.

Krok 3: Získejte komentáře z YouTube videa

opts = {
    "quiet": True,
    "skip_download": True,
    "getcomments": True,
    "extractor_args": {
        "youtube": {
            "max_comments": ["200", "50", "50", "10"],  # celkem, rodiče, odpovědi na rodiče, odpovědi celkem
            "comment_sort": ["top"],
        }
    },
}

with yt_dlp.YoutubeDL(opts) as ydl:
    info = ydl.extract_info(
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
        download=False
    )

comments = info.get("comments", [])
print(f"Staženo {len(comments)} komentářů")
for c in comments[:3]:
    print(f"  [{c.get('like_count', 0)} lajků] {c['author']}: {c['text'][:80]}...")

Extrakce komentářů je pomalá. Issue #3532 na yt-dlp uvádí rychlost stahování komentářů kolem ~30 KB/s — video se 100 tisíci komentáři může trvat hodiny. Issue #11849 popisuje videa, kde formátové URL vyprší (~za 6 hodin) dřív, než se dojede pagination komentářů. U velkých videí nastavte max_comments agresivně.

Krok 4: Získejte přepisy a titulky

Ani YouTube Data API, ani parsování přes BS4 vám nedají plné přepisy. To je unikátní výhoda yt-dlp.

opts = {
    "quiet": True,
    "skip_download": True,
    "writesubtitles": True,
    "writeautomaticsub": True,
    "subtitleslangs": ["en", "en-orig"],
    "subtitlesformat": "json3",   # strojově zpracovatelné: start/dur v ms + text
    "outtmpl": "%(id)s.%(ext)s",
}

with yt_dlp.YoutubeDL(opts) as ydl:
    info = ydl.extract_info(
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
        download=False
    )

# Data titulků přímo z info dict
auto_captions = info.get("automatic_captions", {})
manual_subs = info.get("subtitles", {})
print(f"Jazyky automatických titulků: {list(auto_captions.keys())[:10]}")
print(f"Jazyky ručních titulků: {list(manual_subs.keys())}")

Pro strojové parsování je preferovaný formát json3 — každý segment má start/dur v milisekundách plus textové části. Jazykové kódy jsou BCP-47 (en, en-US, zh-Hans, ja, es).

Krok 5: Dávkové scrapování více videí nebo celého kanálu

opts = {
    "quiet": True,
    "skip_download": True,
    "extract_flat": "in_playlist",  # rychlé — jen video ID a názvy
    "sleep_interval": 2,
    "max_sleep_interval": 6,
}

with yt_dlp.YoutubeDL(opts) as ydl:
    info = ydl.extract_info(
        "https://www.youtube.com/@mkbhd/videos",
        download=False
    )

entries = info.get("entries", [])
print(f"Na kanálu nalezeno {len(entries)} videí")
for e in entries[:5]:
    print(f"  {e.get('title', 'N/A')} — {e.get('id')}")

Předáte URL kanálu, playlistu nebo dokonce vyhledávací dotaz (ytsearch10:python scraping) a yt-dlp si stránkování řeší interně.

Kdy tuhle metodu použít a kdy ne

Nejlepší pro: Hromadnou extrakci metadat, komentáře, přepisy, stahování videí, scrapování celého kanálu, kdy potřebujete kompletní sadu polí.

Omezení: Není ideální na scrapování výsledků hledání (na to je lepší Selenium/Playwright). Anti-bot válka v letech 2024–2026 zkomplikovala provoz yt-dlp ve větším měřítku — YouTube dnes u některých klientů vynucuje BotGuard attestation a PO Tokeny. Pro produkční použití nainstalujte plugin bgutil-ytdlp-pot-provider a používejte --cookies-from-browser chrome (s jednorázovým účtem — tým yt-dlp upozorňuje, že cookies z reálného Google účtu mohou vést k jeho zablokování).

Metoda 4: Scrapujte YouTube v Pythonu přes YouTube Data API

Oficiální YouTube Data API v3 je nejspolehlivější a nejstrukturovanější způsob, jak získat data z YouTube. Odpovědi jsou čisté JSON, pole jsou zdokumentovaná a neřešíte žádnou hru na kočku a myš s anti-bot ochranou. Ale je tu háček, který většina tutoriálů přechází: kvótový systém.

  • Obtížnost: Střední
  • Časová náročnost: ~20 minut (včetně nastavení API klíče)
  • Co budete potřebovat: Python 3.10+, Google Cloud projekt, pip install google-api-python-client

Krok 1: Získejte API klíč pro YouTube Data API

  1. Otevřete Google Cloud Console
  2. Vytvořte nový projekt (nebo vyberte existující)
  3. Přejděte do APIs & Services → Library → vyhledejte „YouTube Data API v3“ → Enable
  4. Jděte do APIs & Services → CredentialsCreate Credentials → API Key
  5. Zkopírujte klíč — budete ho potřebovat v kódu níže

Krok 2: Udělejte první API call

from googleapiclient.discovery import build

API_KEY = "YOUR_API_KEY_HERE"
youtube = build("youtube", "v3", developerKey=API_KEY)

# Získání detailů konkrétního videa
response = youtube.videos().list(
    part="snippet,statistics,contentDetails",
    id="dQw4w9WgXcQ"
).execute()

video = response["items"][0]
print(f"Název: {video['snippet']['title']}")
print(f"Zhlédnutí: {video['statistics']['viewCount']}")
print(f"Lajky: {video['statistics'].get('likeCount', 'skryté')}")
print(f"Komentáře: {video['statistics'].get('commentCount', 'vypnuto')}")
print(f"Délka: {video['contentDetails']['duration']}")
print(f"Tagy: {video['snippet'].get('tags', [])[:5]}")

Odpověď je čistá, typovaná a dokumentovaná. Není potřeba žádná archeologie v JSON.

Krok 3: Získejte detaily videí, informace o kanálu i komentáře

# Vyhledání videí
search_response = youtube.search().list(
    part="snippet",
    q="python web scraping tutorial",
    type="video",
    maxResults=10,
    order="viewCount"
).execute()

for item in search_response["items"]:
    print(f"  {item['snippet']['title']} — {item['id']['videoId']}")

# Získání komentářů
comments_response = youtube.commentThreads().list(
    part="snippet",
    videoId="dQw4w9WgXcQ",
    maxResults=20,
    order="relevance"
).execute()

for item in comments_response["items"]:
    comment = item["snippet"]["topLevelComment"]["snippet"]
    print(f"  [{comment['likeCount']} lajků] {comment['authorDisplayName']}: {comment['textDisplay'][:80]}")

Realita kvót YouTube API (to, co vám nikdo neřekne)

Tady se odděluje užitečný návod od copy-paste tutoriálu. Výchozí přidělení je 10 000 kvótových jednotek denně, resetovaných o půlnoci pacifického času. Tohle stojí jednotlivé volání:

API endpointCena za volání v kvótových jednotkáchMax. výsledků na volání
search.list100 jednotek50 výsledků
videos.list1 jednotka50 video ID (dávkově)
channels.list1 jednotka50 ID kanálů
commentThreads.list1 jednotka100 komentářů
captions.list50 jednotekN/A

A teď matematika. Představte si, že chcete scrapovat 1 000 výsledků hledání:

  • Vyhledávací volání: 1 000 výsledků ÷ 50 na stránku = 20 volání × 100 jednotek = 2 000 jednotek (20 % denního limitu — pryč)
  • Detaily videí pro těchto 1 000 videí: 1 000 ID ÷ 50 na dávku = 20 volání × 1 jednotka = 20 jednotek (levné — dávkované videos.list je záchrana)
  • Komentáře pro těchto 1 000 videí (předpoklad 1 stránka na video): 1 000 volání × 1 jednotka = 1 000 jednotek

Celkem: asi 3 020 jednotek pro poměrně malý scraping. Ale pokud mají videa hluboké komentářové vlákno (50+ stránek každé), zbylých 7 000 jednotek vyčerpáte rychle. Video s 50 000 komentáři = zhruba 500 stránek = 500 jednotek. Když takových videí scrapnete 20, máte na den hotovo.

Proces žádosti o navýšení kvóty vyžaduje kompletní compliance audit: URL zásad ochrany soukromí, URL podmínek služby, video ukázku aplikace, zdůvodnění kvótové matematiky. Zkušenosti komunity ukazují, že odpověď od Googlu obvykle přijde za 3–5 pracovních dnů, plné schválení může trvat týdny až měsíce a mnoho žádostí je zamítnuto — zejména u případů typu „potřebuji víc dat pro analýzu“.

Kdy použít API: Menší až střední měřítko, když potřebujete strukturovaná a spolehlivá data, když záleží na komentářích a statistikách kanálu, a když vám nevadí kvótový strop.

Kdy dává větší smysl scrapování: Velké projekty (>10K videí/den), pole, která API neposkytuje (plné přepisy — captions.download vyžaduje OAuth + oprávnění vlastníka videa), nebo když potřebujete více než 500 výsledků hledání na dotaz (tvrdý limit API bez ohledu na claim totalResults).

No-code zkratka: scrapujte YouTube s Thunderbit (bez Pythonu)

Pokud potřebujete Python kvůli datovému pipeline, použijte výše Metody 1–4. Ale jestli potřebujete data z YouTube za 2 minuty — třeba jste marketér, který tahá data o konkurenci, nebo vývojář, který chce jen rychlý výstup bez nastavování projektu — existuje rychlejší cesta.

Thunderbit je AI web scraper jako rozšíření do Chromu, které jsme postavili přesně pro situace, kdy je psaní kódu zbytečné. Funguje přímo na YouTube stránkách ve vašem prohlížeči.

Jak scrapovat YouTube s Thunderbit ve 3 krocích

Krok 1: Nainstalujte rozšíření Thunderbit do Chromu a otevřete stránku kanálu na YouTube, stránku s výsledky hledání nebo konkrétní video.

Krok 2: V postranním panelu Thunderbit klikněte na „AI Suggest Fields“. AI přečte stránku a navrhne sloupce jako název videa, počet zhlédnutí, datum nahrání, délka, název kanálu a URL miniatury. Sloupce můžete podle potřeby přidat, odebrat nebo přejmenovat.

Krok 3: Klikněte na „Scrape“ a exportujte data do Google Sheets, Excelu, CSV, Airtable nebo Notion. Data se uloží do přehledné tabulky připravené k použití.

Vyzkoušet Thunderbit pro scrapování YouTube

Pro koho je to vhodné

  • Marketéři, kteří potřebují data o konkurenčních kanálech, ale neumí programovat
  • Vývojáři, kteří chtějí rychlý výstup bez nastavování virtuálního prostředí a instalace závislostí
  • Kdokoli, kdo naráží na anti-bot bariéry — Thunderbit scrapuje v rámci vašeho přihlášeného prohlížeče, takže využívá vaše cookies i PO tokeny. Tím obchází velkou část blokací, které trápí server-side scrapery
  • Thunderbit umí také využít subpage scraping, kdy navštíví každou stránku videa zvlášť a obohatí tabulku o další údaje (počet lajků, popis, tagy)

Podrobnější pohled na to, jak Thunderbit pracuje konkrétně s YouTube, najdete v Thunderbit YouTube Channel Scraper šabloně a na YouTube kanálu Thunderbit.

Tipy, jak scrapovat YouTube v Pythonu bez blokace

Tyto tipy platí napříč všemi čtyřmi Python metodami. Anti-bot ochrany YouTube mají podle ScrapeOps obtížnost 6/10, přičemž sledují hlavně tři signály: behaviorální analýzu IP, nutnost JS renderování a často se měnící HTML strukturu.

Pro všechny metody:

  • Rotujte User-Agent stringy i celou sadu hlaviček — Accept, Accept-Language, Sec-CH-UA client hints musí odpovídat deklarovanému UA. Aktuální seznam má průvodce ScraperAPI pro rok 2026.
  • Přidávejte náhodné prodlevy 2–8 sekund mezi requesty. Pevné intervaly jsou detekční signál.
  • Pro cokoli nad pár stránek používejte rezidenční proxy. Datacentrové IP (AWS, GCP, Hetzner) jsou pro YouTube scraping v letech 2025–2026 prakticky mrtvé.
  • Rotujte session a IP zároveň — YouTube váže session na IP a stejný session cookie na dvou IP adresách je podezřelý signál.

Pro requests + BS4: Nastavte cookie CONSENT=YES+cb. Bez ní budou requesty z EU přesměrovány na consent stránku bez dat.

Pro Selenium/Playwright: Na linuxových serverech raději spusťte headful režim přes xvfb než --headless=new — headless Chrome stále prozrazuje dost fingerprint signálů pro sofistikované detektory. Zvažte playwright-stealth, který aplikuje asi 17 obcházení.

Pro yt-dlp: Používejte volby sleep_interval a max_sleep_interval. Nainstalujte plugin bgutil-ytdlp-pot-provider pro generování PO tokenů. Používejte --cookies-from-browser chrome s jednorázovým účtem.

Pro API: Sledujte spotřebu kvót v Google Cloud Console a požadavky dávkujte efektivně. Jediný videos.list s 50 ID oddělenými čárkou stojí 1 jednotku — využívejte to.

Pro Thunderbit: Anti-bot ochrana je řešena automaticky, protože scrapování probíhá v rámci vaší browser session. V podstatě jen automatizujete to, co byste dělali ručně.

Je scrapování YouTube v Pythonu legální?

Záleží na tom, co scrapujete, jak to scrapujete a co s daty děláte.

Právní situace se v roce 2024 změnila díky případu Meta Platforms v. Bright Data (N.D. Cal., leden 2024), kde soudce Chen rozhodl, že ToS Meta zakazuje jen scraping po přihlášení, nikoli veřejný scraping bez přihlášení. Scrapování veřejně dostupných dat se tím stalo „výrazně méně riskantní“. Na druhé straně případ hiQ v. LinkedIn skončil rozsudkem 500 000 USD proti hiQ za porušení ToS, porušení CFAA (falešné účty) a zásah do movité věci — plus trvalým zákazem.

Vlastní Podmínky služby YouTube jsou explicitní: „Není dovoleno přistupovat ke službě pomocí automatizovaných prostředků (například robotů, botnetů nebo scraperů)“ s výjimkou předchozího písemného povolení nebo případů povolených platným právem. Oficiálně schválený způsob přístupu k datům je YouTube Data API.

Několik praktických pravidel:

  • Scrapování veřejně viditelných dat pro osobní výzkum nebo nekomerční analýzu je obecně méně rizikové
  • API je nejbezpečnější cesta — je výslovně autorizované
  • Vyhněte se scrapování soukromého nebo loginem chráněného obsahu, stahování chráněných videí pro další šíření a porušování GDPR kvůli osobním údajům v komentářích
  • Komentáře na YouTube obsahují osobní údaje podle GDPR čl. 4(1) — zacházejte s informacemi subjektů z EU opatrně
  • U komerčních scrapingových projektů se poraďte s právníkem

Nic z toho není právní rada. Situace se rychle mění — nová vlna žalob podle DMCA §1201 od tvůrců proti AI firmám, které scrapovaly YouTube pro trénovací data, přetváří prostředí v letech 2025–2026.

Kterou metodu byste měli použít pro scrapování YouTube v Pythonu?

Rozhodovací průvodce:

  • Potřebujete rychle metadata z pár stránek? → Metoda 1 (requests + BS4). Rychlá, lehká, bez závislostí mimo requests a beautifulsoup4.
  • Potřebujete scrapovat výsledky hledání nebo pracovat s dynamickými stránkami? → Metoda 2 (Selenium/Playwright). Plné renderování prohlížečem, podpora nekonečného scrollu, ale pomalá a náchylná na detekci.
  • Potřebujete hromadná metadata, komentáře nebo přepisy? → Metoda 3 (yt-dlp). Nejschopnější jediný nástroj — a 157 tisíc+ hvězdiček má své důvody.
  • Potřebujete strukturovaná, spolehlivá data ve středním měřítku? → Metoda 4 (YouTube Data API). Oficiální, čisté, ale omezené na 10 000 jednotek/den.
  • Potřebujete data za 2 minuty bez psaní kódu?Thunderbit. V prohlížeči, s AI, export do Google Sheets na pár kliknutí.

Neexistuje jediná metoda, která pokryje všechny případy. Uložte si výše srovnávací tabulku a přehled extrahovatelných dat — ušetří vám čas v dalším projektu. A pokud chcete prozkoumat další přístupy k web scrapingu, máme na blogu Thunderbit spoustu návodů od Python scraping tutoriálů až po scraping dat do Google Sheets.

Vyzkoušet Thunderbit pro scrapování YouTube Get Started Free

Často kladené otázky

Můžu scrapovat YouTube bez API klíče?

Ano. Metody 1 (requests + BS4), 2 (Selenium/Playwright) a 3 (yt-dlp) API klíč nepotřebují. Jen Metoda 4 (YouTube Data API) ho vyžaduje. Thunderbit také funguje bez jakéhokoli API klíče — scrapuje přímo ve vašem prohlížeči.

Jaký je nejrychlejší způsob scrapování YouTube v Pythonu?

V Pythonu jsou nejrychlejší yt-dlp a requests + BS4 — obě metody obcházejí režii prohlížeče a umí vytáhnout metadata během několika sekund na video. yt-dlp je obzvlášť rychlé pro dávkové operace, protože si stránkování řeší interně. Pro uživatele bez Pythonu je nejrychlejší celkově Thunderbit, protože odpadá jakékoli nastavování.

Jak scrapovat komentáře z YouTube v Pythonu?

yt-dlp má vestavěnou extrakci komentářů přes volbu getcomments — je to nejjednodušší cesta. YouTube Data API také podporuje komentáře přes commentThreads.list (1 kvótová jednotka na volání, až 100 komentářů na stránku). Selenium/Playwright to technicky zvládnou tak, že scrollují a extrahují vyrenderované komentáře, ale je to pomalé a křehké.

Můžu scrapovat YouTube Shorts v Pythonu?

Ano. yt-dlp zvládá metadata Shorts velmi dobře — bere je jako běžná videa s několika dalšími Shorts poli. YouTube Data API má částečnou podporu (počítání zhlédnutí u Shorts se 30. dubna 2025 změnilo — view nyní započítá jakýkoli start přehrání/opakování). BS4 a Selenium/Playwright mají omezenou podporu Shorts, protože shelf pro Shorts používá odlišnou DOM strukturu.

Kolik YouTube videí můžu scrapovat denně?

S YouTube Data API jste omezeni na zhruba 10 000 kvótových jednotek denně. Při dávkovaných voláních videos.list (50 ID na jedno volání za 1 jednotku) to teoreticky znamená až 500 000 kontrol statistik videí denně — ale search.list za 100 jednotek na volání rozpočet vyčerpá velmi rychle. U scraping metod (BS4, Selenium, yt-dlp) není limit pevně daný, ale praktický: IP bloky obvykle přicházejí po několika stovkách až tisících requestů na IP a den, podle proxy setupu a vzorů požadavků. Thunderbit používá systém kreditů navázaný na váš plán.

Další informace

Ke
Ke
CTO ve Thunderbit | Senior Data Scientist a expert na ML S téměř desetiletou zkušeností v oblasti strojového učení a datové vědy je Ke Shen absolventem Kolumbijské univerzity a bývalým Senior Data Scientist ve Walmart Labs. Díky hlubokým odborným znalostem v Pythonu, R, Javě a statistice, uznávaným i mezi kolegy, sdílí ověřené poznatky o tom, jak převést složité AI algoritmy od teorie až k produkční architektuře.

Vyzkoušej Thunderbit

Získej leady i další data jen na 2 kliknutí. Pohání AI.

Získat Thunderbit Je to zdarma
Vytěž data pomocí AI
Snadno přenes data do Google Sheets, Airtable nebo Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week