Miért nem működik már a YouTube scraping?
Miért nem működik a "Forrás megtekintése" YouTube-on?
Képzeld el a következő helyzetet: rákattintasz jobb gombbal egy YouTube videó oldalára, kiválasztod a "Forrás megtekintése" opciót, és azt várod, hogy ott lesz a videó címe, leírása, minden adat szépen előtted. Ehelyett egy óriási falnyi, összetömörített JavaScript kódot látsz, ahol a videó címét hiába keresed.
Ez nem hiba — ez szándékos működés. És ha megérted, miért van így, teljesen másképp állsz majd hozzá az adatkinyeréshez.
A modern web működése
A YouTube-hoz hasonló platformok — Twitter, Netflix, Instagram — mind Single Page Application (SPA) architektúrával működnek. A lényege: a szerver nem egy kész, teljes HTML oldalt küld neked, hanem csak egy vázat és egy hatalmas JavaScript csomagot. A böngésződ letölti ezt, majd futtatja a kódot, ami dinamikusan tölti be a tartalmat.
Tehát amikor a forráskódot nézed, a receptet látod — nem pedig a kész süteményt.
Miért csinálják ezt?
A YouTube frontendje a Google Polymer keretrendszerére épül, és API-kon keresztül kommunikál a háttérrendszerekkel. Ez az architektúra több szempontból is előnyös:
- Gyorsabb betöltési idő érzékelése — a váz azonnal megjelenik, a tartalom utána érkezik
- Hatékonyabb cache-elés — a JavaScript ritkábban változik, mint a tartalom
- Méretarányosság — a frontend és backend egymástól függetlenül fejlődhet
- Személyre szabás — a tartalom felhasználónként változhat újratöltés nélkül
Na de mi a helyzet azokkal, akik adatokat akarnak kinyerni? Nos, ez problémás.
YouTube adatok: a helyes megközelítés
Ha adatokra van szükséged, ne刮éold a forráskódot, hanem használd azokat az eszközöket, amiket a platform nyújt:
1. Hivatalos API
A YouTube Data API v3 strukturált hozzáférést biztosít szinte mindenhez:
- Videó metaadatai (cím, leírás, bélyegképek)
- Csatorna információk
- Keresési eredmények
- Playlist tartalmak
- Statisztikák (megtekintések, lájkok, kommentek)
Google fiók kell és egy API kulcs a Google Cloud Console-ból. A kvóta límitek viszont elég szűkmarkúak ahhoz képest, amit a legtöbb projekt igényel.
import requests
API_KEY = "your_api_key_here"
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()
video_title = data["items"][0]["snippet"]["title"]
views = data["items"][0]["statistics"]["viewCount"]
print(f"'{video_title}' — {views} megtekintés")
2. Közösségi library-k
Ha az API túl hivatalosnak tűnik, ott vannak a közösség által fejlesztett megoldások. A pytube videóletöltéshez, a youtube-transcript-api feliratok kinyeréséhez — ezek azért léteznek, mert a fejlesztőknek egyszerűbb hozzáférésre volt szükségük.
3. RSS feedek (igen, működik!)
A YouTube még mindig támogatja az RSS feedeket csatornákhoz. Ez az ősi módszer az API-k előttről. Nem minden metaadat érhető el, de alapvető monitoringra meglepően jól működik.
Mikor kell mégis scrapelni?
Előfordul, hogy az API nem adja meg, amire szükséged van, vagy a rate limitek túl szigorúak. Ilyenkor előfordulhat, hogy ténylegesen le kell renderelned az oldalt és scrapelned kell.
A modern megoldás a headless browser — vagyis egy böngésző látható ablak nélkül, ami képes JavaScript-et futtatni és visszaadni a renderelt HTML-t.
Playwright és Puppeteer a két domináns eszköz:
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');
// Várunk, amíg a tartalom betöltődik
await page.waitForSelector('h1.ytd-video-primary-info-renderer');
const title = await page.textContent('h1.ytd-video-primary-info-renderer');
console.log('Videó címe:', title);
await browser.close();
})();
Működik, de van néhány hátránya:
- Lassabb, mint az API hívások
- Bejöhetnek az anti-bot védelmek
- Ha a YouTube megváltoztatja a frontendet, a kódod elromlik
- Több erőforrást zabál
Végszó
Amikor legközelebb egy modern weboldalon a "Forrás megtekintése" gombra kattintasz és úgy érzed, értelmetlen krix-kraxot látsz, ne felejtsd el: a tartalom ott van — csak JavaScript tölti be dinamikusan. A platformok nagyon jó okokból fektettek ennyit az architektúrájukba.
Mint fejlesztők, a feladatunk nem az, hogy harcoljunk ezekkel a rendszerekkel, hanem az, hogy együttműködjünk velük. Használd az API-kat, amikor lehetséges, értsd meg, mikor válik szükségessé a scrapelés, és mindig tartsd tiszteletben a rate limiteket és a felhasználási feltételeket. A web barátságosabb, mint amilyennek kívülről tűnik.