Jak zeskrobać dane z Twitcha: widzowie, kategorie i sygnały sponsorskie

Oficjalne API Helix ogranicza to, co możesz pobrać, i ukrywa dane, których badacze faktycznie potrzebują. Oto jak uzyskać liczbę widzów, całkowitą liczbę obserwujących i trendy kategorii z własnego endpointu GraphQL Twitcha — oraz proxy, które to umożliwiają.

Twitch posiada kopalnię publicznych danych — liczby widzów na żywo, rankingi kategorii, całkowite liczby obserwujących, klipy, tytuły transmisji i tagi — które interesują marketerów, analityków i łowców sponsorów. Problem polega na tym, że oficjalne API Helix daje ci wyselekcjonowany fragment tych danych, z ograniczeniami szybkości i brakującymi metrykami, o które ludzie najczęściej pytają (jak liczba obserwujących na grę czy historyczne trendy widzów). Ten przewodnik opisuje, jak zeskrobać resztę: co API ci nie da, jak to uzyskać z własnych webowych endpointów Twitcha oraz konfigurację proxy, która zapobiega blokadom skrobaka.

Gdzie kończy się API Helix

Helix to oficjalna droga i powinieneś ją preferować tam, gdzie cię obejmuje: jest stabilna, udokumentowana i zwraca czyste dane o transmisjach, użytkownikach, grach i klipach. Ale ma swoje ograniczenia. Wymaga rejestracji aplikacji i OAuth, mierzy cię przeciwko punktowemu wiadru (domyślnie 800 punktów na minutę) i po prostu nie udostępnia niektórych rzeczy, których ludzie chcą — nie możesz zapytać "ile obserwujących ma główny kanał tej gry" ani odtworzyć krzywej liczby widzów z ostatniej godziny. W momencie, gdy twoje pytanie wykracza poza jego schemat, skrobiesz.

Zeskrobywanie Twitcha oznacza pobieranie tych samych publicznych danych — liczb, które możesz zobaczyć na stronie bez logowania — za pomocą kodu zamiast ręcznie. Nic tutaj nie dotyka danych prywatnych ani uwierzytelnionych stron; to katalog, strony kategorii i publiczne widoki kanałów, które widzi każdy odwiedzający.

Diagram porównawczy oficjalnego API Twitch Helix versus zeskrobywanie webowego endpointu GraphQL, pokazujący limity szybkości i dostępne pola
Helix jest stabilny, ale wyselekcjonowany i z ograniczeniami szybkości; publiczny endpoint GraphQL, którego używa sama strona, zwraca pełniejsze dane bez logowania.

Szybka ścieżka: endpoint GraphQL Twitcha

Własny klient webowy Twitcha komunikuje się z publicznym endpointem GraphQL, używając dobrze znanego Client-ID, który jest zawarty w JavaScripcie strony. Bezpośrednie uderzenie w niego to najszybszy, najlżejszy sposób na zeskrobywanie: bez logowania, bez przeglądarki bezgłowej, strukturalny JSON od razu z powrotem. Wysyłasz zapytanie z nagłówkiem publicznego Client-ID i otrzymujesz transmisje, liczby widzów, tagi i klipy w jednym wywołaniu. Ponieważ to to samo API, którego używa strona, zwraca dokładnie to, co widzi odwiedzający — i znacznie więcej na jedno zapytanie niż zeskrobywanie strony.

import requests

PROXY = "http://USER:PASS@gate.quantumproxies.io:8000"
proxies = {"http": PROXY, "https": PROXY}

# public web Client-ID shipped in Twitch's own frontend
HEADERS = {"Client-ID": "kimne78kx3ncx6brgo4mv6wki5h1ko", "Content-Type": "application/json"}

query = {
    "query": """
      query($name: String!) {
        user(login: $name) {
          displayName
          followers { totalCount }
          stream { title viewersCount game { name } }
        }
      }""",
    "variables": {"name": "somestreamer"},
}

r = requests.post("https://gql.twitch.tv/gql", json=query,
                  headers=HEADERS, proxies=proxies, timeout=15)
print(r.json()["data"]["user"])

Jedno zapytanie zwraca nazwę wyświetlaną, całkowitą liczbę obserwujących i — jeśli kanał jest na żywo — tytuł transmisji, obecnych widzów i kategorię. Ta całkowita liczba obserwujących to dokładnie pole, które API Helix utrudnia uzyskanie na dużą skalę, a tutaj to jedno zapytanie.

Obiekt kanału jest bogaty poza podstawy. Typowy rekord zawiera numeryczny channelId, slug login i displayName, opis profilu, czy kanał ma status partnera i — dla kanałów na żywo — aktualną grę, liczbę widzów i tagi transmisji. Tagi mają większe znaczenie, niż się wydaje: to one pozwalają segmentować streamerów według języka, regionu lub typu treści, gdy budujesz krótką listę do kontaktu. Pobierz to samo zapytanie dla listy loginów i masz porównywalny zestaw danych — wielkość obserwujących, status partnera, kategorię na żywo — w jednym przejściu, bez ładowania stron dla każdego kanału.

Katalog: trendy kategorii i widzów

Dla sygnałów na poziomie rynku — które gry są popularne, jak zmienia się oglądalność w ciągu dnia — źródłem jest katalog kategorii. Wzorzec, który dobrze działa, to robienie migawki strony kategorii (na przykład Just Chatting) w stałych odstępach czasu i przechowywanie najlepszych transmisji z ich tytułami, streamerami i liczbą widzów plus znacznik czasu. Rób to co 15 minut, a zbudujesz krzywe trendów widzów i rankingi kategorii, których oficjalne API nigdy ci nie przekaże. Lekki harmonogram i przeglądarka lub zapytanie GraphQL to wszystko, czego potrzeba; dyscyplina tkwi w interwale i przechowywaniu, nie w pobieraniu.

import requests, time
from datetime import datetime, timezone

def snapshot_category(slug):
    payload = {
        "query": "query($slug: String!){ game(slug:$slug){ streams(first:30){ edges{ node{ title viewersCount broadcaster{ login } } } } } }",
        "variables": {"slug": slug},
    }
    r = requests.post("https://gql.twitch.tv/gql", json=payload,
                      headers=HEADERS, proxies=proxies, timeout=15)
    ts = datetime.now(timezone.utc).isoformat()
    rows = []
    for e in r.json()["data"]["game"]["streams"]["edges"]:
        n = e["node"]
        rows.append({"ts": ts, "login": n["broadcaster"]["login"],
                     "title": n["title"], "viewers": n["viewersCount"]})
    return rows

# run on a schedule (e.g. every 15 min) and append to storage
while True:
    save(snapshot_category("just-chatting"))
    time.sleep(900)

Zdobądź proxy rezydencjalne do zeskrobywania Twitcha

Diagram przepływu zaplanowanego monitora Twitcha: katalog kategorii do proxy rezydencjalnego do migawki JSON do przechowywania szeregów czasowych co 15 minut
Zaplanowana migawka przez rotujące IP rezydencjalne zamienia dane katalogu publicznego w trendy widzów i sygnały sponsorskie.

Dlaczego proxy rezydencjalne mają tutaj znaczenie

Twitch monitoruje ruch jak każda duża platforma. Zaplanowany skrobak działający z jednego IP centrum danych co 15 minut to oczywisty wzorzec, a endpoint GraphQL zacznie zwracać błędy lub puste wyniki, gdy cię oznaczy. IP rezydencjalne od prawdziwych ISP wtapiają się w normalny ruch widzów, a ich rotacja przy każdym uruchomieniu rozprasza zapytania, dzięki czemu żaden pojedynczy adres nie wygląda jak bot. Dla badań wrażliwych na lokalizację — niektóre kategorie i klipy pojawiają się inaczej w zależności od regionu — będziesz także potrzebować wyjść z konkretnych krajów, które pula rezydencjalna w ponad 200 krajach ci zapewnia. Mobilne IP są najsilniejszą opcją dla najbardziej agresywnych celów; nasz przewodnik po proxy dla platform społecznościowych opisuje, kiedy po nie sięgnąć.

Co możesz z tym zbudować

Przypadki użycia podążają za danymi. Liczby obserwujących i obecność w kategoriach napędzają odkrywanie influencerów i poszukiwanie sponsorów — znajdowanie odpowiednich streamerów przed kampanią, odpowiednio dobranych. Migawki trendów widzów zasilają badania branży gier: które tytuły zyskują, kiedy publiczność osiąga szczyt, jak premiera wypada godzina po godzinie. Dane klipów i tytułów wspierają analizę treści i trendów. Komercyjne skrobaki Twitcha pobierają około pięciu dolarów za tysiąc wyników za to; uruchomienie tego samodzielnie z własnymi proxy to ułamek tej kwoty, gdy już masz pipeline, i posiadasz surowe dane. To samo podejście migawki i różnicowania zasila nasze inne przewodniki platformowe, jak wydobywanie danych z YouTube poza limitem API.

Często zadawane pytania

Czy można zeskrobać dane z Twitcha?

Tak — publiczne dane, takie jak tytuły transmisji, liczby widzów, całkowite liczby obserwujących, kategorie i klipy są widoczne bez logowania i można je zbierać za pomocą kodu. Własny klient webowy Twitcha używa publicznego endpointu GraphQL, który można zapytać bezpośrednio. Szanuj zasady platformy, unikaj danych prywatnych lub uwierzytelnionych i dostosuj tempo swoich zapytań.

Dlaczego nie użyć po prostu API Twitch Helix?

Używaj Helix tam, gdzie pasuje — jest oficjalne i stabilne. Ale wymaga OAuth, mierzy cię przeciwko wiadru 800 punktów na minutę i pomija pola, których badacze chcą, takie jak liczby obserwujących powiązane z kategoriami czy historia widzów minuta po minucie. Gdy twoje pytanie wykracza poza jego schemat, zeskrobywanie publicznych webowych endpointów wypełnia lukę.

Czy potrzebuję proxy, aby zeskrobać Twitcha?

Dla jednorazowego zapytania, nie. Dla czegokolwiek zaplanowanego lub na dużą skalę, tak. Powtarzający się wzorzec z jednego IP zostaje oznaczony, a endpoint zwraca błędy lub puste dane. Rotujące proxy rezydencjalne rozpraszają zapytania na adresy prawdziwych ISP, dzięki czemu twój monitor nadal zwraca pełne wyniki i pozwala na pobieranie widoków specyficznych dla regionu.

Jak często mogę robić migawki danych z Twitcha?

Dla trendów widzów, co 10-15 minut to dobry balans — wystarczająco często, aby zobaczyć zmiany w ciągu dnia bez obciążania endpointu. Dodaj mały losowy jitter do interwału, rotuj swoje wyjściowe IP przy każdym uruchomieniu i przechowuj znaczniki czasu, aby móc odtworzyć trendy. Częstsze interwały zwiększają ryzyko blokady przy niewielkim dodatkowym sygnale.

Publiczne dane Twitcha są znacznie bogatsze niż to, co ujawnia API Helix, a jego własny endpoint GraphQL zwraca większość z nich w pojedynczych zapytaniach — całkowite liczby obserwujących, liczby widzów, katalogi kategorii, klipy. Owiń to w uprzejmy harmonogram, przekieruj przez rotujące IP rezydencjalne, a masz monitor, który ujawnia trendy i sygnały sponsorskie, które oficjalne API trzyma poza zasięgiem.

Zacznij zeskrobywać Twitcha z QuantumProxies