Dlaczego YouTube nie daje się już tak łatwo scrapować
Dlaczego "Zobacz Źródło" to pułapka na początkujących
Zdarzyło ci się kiedyś kliknąć prawym przyciskiem myszy na YouTube i wybrać "Zobacz źródło strony"? Spodziewałeś się czegoś w rodzaju listy składników — tytuł filmu, opis, może tagi. A zamiast tego zobaczyłeś morze zaszyfrowanego kodu JavaScript, w którym nie sposób się połapać.
Nie chodzi o to, że YouTube coś schował. To po prostu inny sposób działania współczesnych stron internetowych. I jak zrozumiesz tę różnicę, inaczej będziesz podchodzić do pobierania danych.
Czym są Single Page Applications?
Witryny takie jak YouTube, Twitter czy Netflix to tak zwane Single Page Applications (SPA). Zamiast wysyłać ci gotowy dokument HTML z całą zawartością, serwer zwraca pusty szkielet strony i ogromny plik JavaScript. Ten plik uruchamia się dopiero w twojej przeglądarce i dynamicznie pobiera treść.
Efekt jest taki, że patrząc na źródło strony, widzisz przepis na ciasto, a nie samo ciasto.
Dlaczego platformy tak robią?
YouTube opiera się na frameworku Polymer od Google i komunikuje się z serwerami przez API. Ta architektura ma sporo zalet:
- Szybsze ładowanie — szkielet strony pojawia się natychmiast, treść doczytywana jest później
- Lepsze cacheowanie — kod JavaScript zmienia się rzadziej niż treść
- Skalowalność — frontend i backend rozwijają się niezależnie
- Personalizacja — treści dopasowują się do użytkownika bez przeładowywania strony
Dla programistów chcących wyciągnąć dane to jednak utrudnienie.
Legalne sposoby na pobieranie danych z YouTube
Na szczęście YouTube udostępnia narzędzia, które znacznie ułatwiają życie.
Oficjalne API
YouTube Data API v3 to najbardziej eleganckie rozwiązanie. Oferuje dostęp do:
- metadanych filmów (tytuł, opis, miniatura)
- informacji o kanałach
- wyników wyszukiwania
- zawartości playlist
- statystyk (wyświetlenia, polubienia, komentarze)
Potrzebujesz konta Google i klucza API z Google Cloud Console. Limit zapytań jest na tyle hojny, że spokojnie wystarczy do projektów osobistych i nawet niewielkich komercyjnych.
import requests
API_KEY = "twój_klucz_api"
VIDEO_ID = "zdJ9Tbm8ALg"
url = f"https://www.googleapis.com/youtube/v3/videos"
params = {
"part": "snippet,statistics",
"id": VIDEO_ID,
"key": API_KEY
}
response = requests.get(url, params=params)
data = response.json()
tytul = data["items"][0]["snippet"]["title"]
wyświetlenia = data["items"][0]["statistics"]["viewCount"]
print(f"Film '{tytul}' ma {wyświetlenia} wyświetleń")
Biblioteki społeczności
Jeśli oficjalne API wydaje ci się zbyt rozbudowane, sięgnij po gotowe rozwiązania. Biblioteki takie jak pytube (do pobierania filmów) czy youtube-transcript-api (do napisów) powstały właśnie dlatego, że programiści potrzebowali prostszego dostępu.
Kanały RSS (tak, to działa!)
YouTube nadal obsługuje kanały RSS dla kanałów — to klasyczna metoda śledzenia nowych filmów bez żadnego API. Nie wszystkie metadane są dostępne, ale do podstawowego monitoringu sprawdza się zaskakująco dobrze.
Kiedy scraping jest konieczny (i jak się za niego zabrać)
Czasem API nie wystarcza. Może brakować ci potrzebnych danych albo limity zapytań są zbyt restrykcyjne. Wtedy zostaje ci tylko jedno: uruchomić prawdziwą przeglądarkę i wyświetlić stronę tak jak zwykły użytkownik.
Nowoczesne rozwiązanie to headless browser — czyli przeglądarka bez okna, która wykonuje JavaScript i zwraca wyrenderowany HTML.
Tu królują dwie biblioteki: Playwright i Puppeteer.
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://www.youtube.com/watch?v=zdJ9Tbm8ALg');
// Czekamy aż treść się załaduje
await page.waitForSelector('h1.ytd-video-primary-info-renderer');
const tytul = await page.textContent('h1.ytd-video-primary-info-renderer');
console.log('Tytuł filmu:', tytul);
await browser.close();
})();
To podejście działa, ale ma swoje wady:
- Jest wolniejsze niż wywołania API
- Strony mają coraz lepszą ochronę przed botami
- Zmiany w frontendzie YouTube mogą zepsuć twój scraper
- Zużywa więcej zasobów
Podsumowanie
Następnym razem, gdy "Zobacz źródło" pokaże ci непонятный kod zamiast przystępnych danych, nie panikuj. Treść tam jest — ładuje się tylko dynamicznie przez JavaScript. Platformy takie jak YouTube włożyły mnóstwo pracy w tę architekturę z ważnych powodów.
Jako programiści nie powinniśmy walczyć z tymi systemami, tylko je wykorzystywać. Korzystaj z API kiedy to możliwe, wiedz kiedy scraping jest uzasadniony, i szanuj limity oraz regulaminy. Sieć jest bardziej przyjazna niż się wydaje z zewnątrz — trzeba tylko wiedzieć, gdzie zapukać.