Jak scrapować dane produktów i cen z Temu w 2026: proxy, anti-bot i ukryte JSON

Praktyczny przewodnik po scrapowaniu katalogu Temu w 2026 roku — od wyboru między parsowaniem HTML a wewnętrznymi endpointami JSON, przez obejście Cloudflare Turnstile i TLS fingerprintingu, po konfigurację proxy residential z geo-targetingiem.

How to Scrape Temu Product and Price Data in 2026: Proxies, Anti-Bot, and the Hidden JSON
W tym artykule

Jak scrapować Temu w 2026: API vs HTML i dlaczego to wcale nie jest proste

Temu nie udostępnia publicznego API do pobierania danych o produktach i cenach. Jeśli chcesz zbudować Temu price scraper lub agregator danych katalogowych, masz dwie drogi: parsować niestabilny kod HTML kart produktowych albo odwoływać się do wewnętrznych endpointów JSON, które napędzają siatkę listingów. Ta druga opcja — Temu product data API w postaci nieudokumentowanych ścieżek takich jak /api/poppy/v1/search czy /api/poppy/v1/goods/detail — jest znacznie wydajniejsza, ale wymaga odtworzenia nagłówka anti_content, podpisanego tokena, który Temu sprawdza po stronie serwera.

W tym artykule pokazujemy krok po kroku, jak scrapować dane produktów i cen z Temu w 2026 roku, używając proxy residential z geo-targetingiem na poziomie miasta, biblioteki curl_cffi do odtworzenia sygnatury TLS/HTTP2 oraz sesji sticky dla spójności koszyka i kosztów wysyłki.

Stack anti-bot Temu — co Cię blokuje i dlaczego

Temu korzysta z wielowarstwowego systemu ochrony, który łączy co najmniej trzy technologie:

  • Cloudflare Turnstile — challenge weryfikujący, czy ruch pochodzi od prawdziwej przeglądarki. Pojawia się przy podejrzanym wzorcu żądań, zwłaszcza z adresów IP z centrów danych. Temu integruje Turnstile zarówno na stronach produktów, jak i przy wyszukiwaniu. Dokumentacja Cloudflare Turnstile opisuje mechanizm weryfikacji tokena po stronie serwera.
  • Nagłówek anti_content — podpisany, base64-kodowany token generowany przez JavaScript po stronie klienta. Zawiera m.in. timestamp, sygnaturę przeglądarki i hash parametrów żądania. Bez poprawnego anti_content endpointy JSON zwracają błąd "errorCode": 30000 lub puste wyniki.
  • TLS/HTTP2 fingerprinting — Temu sprawdza sygnaturę handshake'u TLS (JA3/JA4) oraz ustawienia strumieni HTTP/2. Klasyczne biblioteki takie jak requests czy urllib mają sygnaturę różną od Chrome czy Firefox, co pozwala serwerowi odróżnić automat od przeglądarki już na poziomie transportu, zanim żądanie dotrze do warstwy aplikacji.

Dane z adresów IP datacenter są flagowane niemal natychmiast — Temu utrzymuje listy zakresów ASN powiązanych z dostawcami chmurowymi i hostingowymi. Ruch z takich IP dostaje challenge Cloudflare lub HTTP 403 już przy pierwszym żądaniu.

Gdzie znaleźć dane: endpointy JSON i osadzony stan strony

Mimo że Temu renderuje karty produktów w HTML, rzeczywiste dane — cena, SKU, dostępność, opcje wysyłki — pochodzą z wewnętrznych endpointów JSON. Oto główne źródła danych, które warto znać:

Zwraca listę produktów dla danego zapytania. Przykładowy URL:

https://www.temu.com/api/poppy/v1/search?q=bluetooth+earbuds&page=1&pageSize=50

Odpowiedź zawiera tablicę obiektów items z polami takimi jak goods_id, goods_name, salePrice, marketPrice, imageList i rating. Endpoint wymaga nagłówka anti_content oraz poprawnych ciasteczek sesyjnych.

2. Endpoint szczegółów produktu: /api/poppy/v1/goods/detail

Zwraca pełne dane pojedynczego produktu, w tym listę wariantów SKU, specyfikacje, opinie i opcje wysyłki. Przykładowe wywołanie:

POST https://www.temu.com/api/poppy/v1/goods/detail
Content-Type: application/json

{"goodsId": "502099882377"}

3. Osadzony stan __NEXT_DATA__ w HTML

Strony produktów i listingów Temu zawierają tag <script id="__NEXT_DATA__" type="application/json"> z pełnym stanem aplikacji w momencie renderowania po stronie serwera. To najszybsze źródło danych, jeśli nie chcesz odtwarzać anti_content — wystarczy jedno żądanie GET do strony HTML i parsowanie JSON z tego tagu.

Klasy CSS w HTML Temu są hashowane (np. _3a8d2f1), co utrudnia selektory oparte na nazwach klas. Zamiast tego używaj atrybutów data-uniqid lub struktury DOM (np. [data-uniqid] > div:nth-child(2)), a jeszcze lepiej — sięgaj po __NEXT_DATA__.

Przykładowa (skrócona) odpowiedź JSON z endpointu goods/detail

{
  "goods_id": "502099882377",
  "goods_name": "Wireless Bluetooth Earbuds Pro",
  "salePrice": {"amount": 12.98, "currency": "USD"},
  "marketPrice": {"amount": 29.99, "currency": "USD"},
  "skuList": [
    {"skuId": "sku_001", "spec": "Black", "price": 12.98, "stock": 3421},
    {"skuId": "sku_002", "spec": "White", "price": 13.49, "stock": 1280}
  ],
  "shipping": {"freeThreshold": 0, "estimatedDays": "7-12"},
  "rating": 4.6,
  "reviewCount": 18453
}

Rate-limity i dlaczego proxy residential z geo-targetingiem są obowiązkowe

Temu nie publikuje oficjalnych limitów żądań, ale testy empiryczne pokazują następujące progi:

  • ~30 żądań/min z jednego IP do endpointów JSON — po tym progu pojawia się HTTP 429 lub challenge Turnstile.
  • ~100 żądań/min z jednego IP do stron HTML — tutaj tolerancja jest wyższa, ale przy 150+ żądań/min zaczynają się blokady.
  • Adresy IP datacenter otrzymują challenge przy 3-5 żądaniach, niezależnie od tempa.

Kluczowym powodem, dla którego musisz używać proxy residential z geo-targetingiem, jest regionalizacja cen i wysyłki. Temu pokazuje różne ceny, progi darmowej wysyłki i czasy dostawy w zależności od lokalizacji użytkownika. Jeśli Twój IP wskazuje Niemcy, zobaczysz ceny w EUR i opcje wysyłki europejskiej. Jeśli IP wskazuje USA — ceny w USD i dostawę z magazynów amerykańskich.

Dla spójności danych musisz więc przypiąć sesję proxy do konkretnego kraju, a najlepiej miasta. ProxyHat obsługuje to przez flagi w nazwie użytkownika:

# Proxy HTTP z geo-targetingiem na USA
http://user-country-US:pass@gate.proxyhat.com:8080

# Proxy HTTP z geo-targetingiem na Berlin, Niemcy
http://user-country-DE-city-berlin:pass@gate.proxyhat.com:8080

Sprawdź dostępne lokalizacje na stronie lokalizacji ProxyHat i porównaj plany na stronie cennika.

Typ proxyWykrywalność przez TemuGeo-targetingStabilność sesjiŚredni czas odpowiedzi
DatacenterBardzo wysoka — blokada po 3-5 żądaniachTylko krajNiska~50ms
Residential (rotacyjne)Niska — wygląda jak ruch domowyKraj + miastoŚrednia (nowy IP co żądanie)~200-500ms
Residential (sticky session)NiskaKraj + miastoWysoka (ten sam IP dla sesji)~200-500ms
MobileBardzo niska — IP operatorów komórkowychKrajŚrednia~300-800ms

Praktyczna implementacja: Python + curl_cffi + ProxyHat

Oto kompletny przykład pobierania strony produktu Temu z odtworzeniem sygnatury TLS Chrome i routingiem przez proxy residential ProxyHat. Używamy curl_cffi, biblioteki, która korzysta z libcurl-impersonate do odtworzenia handshake'u TLS i ustawień HTTP/2 identycznych z Chrome.

from curl_cffi import requests as cffi_requests
import json
import re

# Konfiguracja proxy ProxyHat — residential, geo USA
PROXY_URL = "http://user-country-US:pass@gate.proxyhat.com:8080"

HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Referer": "https://www.temu.com/",
}

def fetch_temu_product(goods_id: str, session_id: str = None):
    """Pobiera stronę produktu Temu i wyciąga dane z __NEXT_DATA__."""
    url = f"https://www.temu.com/goods/{goods_id}.html"

    # Sticky session dla spójności ceny/wysyłki
    proxy = PROXY_URL
    if session_id:
        proxy = proxy.replace("user-", f"user-session-{session_id}-")

    proxies = {"http": proxy, "https": proxy}

    resp = cffi_requests.get(
        url,
        headers=HEADERS,
        proxies=proxies,
        impersonate="chrome131",
        timeout=30,
    )

    if resp.status_code == 403:
        raise Exception("Cloudflare challenge — wymaga rotacji IP lub pauzy")
    if resp.status_code == 429:
        raise Exception("Rate limit — zmniejsz tempo lub zwiększ pulę IP")

    # Parsuj __NEXT_DATA__
    match = re.search(
        r'<script id="__NEXT_DATA__" type="application/json">(.+?)</script>',
        resp.text,
        re.DOTALL,
    )
    if not match:
        raise Exception("Nie znaleziono __NEXT_DATA__ — struktura strony mogła się zmienić")

    data = json.loads(match.group(1))
    goods = data.get("props", {}).get("pageProps", {}).get("goods", {})

    return {
        "goods_id": goods.get("goods_id"),
        "goods_name": goods.get("goods_name"),
        "sale_price": goods.get("salePrice", {}).get("amount"),
        "currency": goods.get("salePrice", {}).get("currency"),
        "sku_list": [
            {"sku_id": s.get("skuId"), "spec": s.get("spec"), "price": s.get("price")}
            for s in goods.get("skuList", [])
        ],
        "rating": goods.get("rating"),
        "review_count": goods.get("reviewCount"),
    }

# Przykład użycia
result = fetch_temu_product("502099882377", session_id="temu-prod-001")
print(json.dumps(result, indent=2, ensure_ascii=False))

Powyższy kod zwraca skrócony obiekt z danymi produktu. Przykładowy wynik:

{
  "goods_id": "502099882377",
  "goods_name": "Wireless Bluetooth Earbuds Pro",
  "sale_price": 12.98,
  "currency": "USD",
  "sku_list": [
    {"sku_id": "sku_001", "spec": "Black", "price": 12.98},
    {"sku_id": "sku_002", "spec": "White", "price": 13.49}
  ],
  "rating": 4.6,
  "review_count": 18453
}

Sesje sticky, retre i paginacja

Podczas scrapowania Temu napotkasz dwa wyzwania związane z sesjami:

Sticky sessions dla spójności koszyka i wysyłki

Jeśli pobierasz dane o kosztach wysyłki lub sprawdzasz dostępność SKU dla konkretnej lokalizacji, musisz utrzymywać ten sam adres IP przez całą sesję. Bez tego Temu może zwracać różne ceny wysyłki w zależności od tego, jaki IP obsłużył poprzednie żądanie. ProxyHat pozwala przypiąć sesję przez flagę -session-:

# Sticky session — ten sam IP przez całą sesję
http://user-session-temu-prod-001-country-US:pass@gate.proxyhat.com:8080

Sesja utrzymuje ten sam IP residential przez zazwyczaj 10-30 minut, zależnie od dostępności w danej lokalizacji. Po wygaśnięciu sesji ProxyHat automatycznie przydziela nowy IP z tego samego regionu.

Retre z backoffem wykładniczym

Nawet z proxy residential, około 2-5% żądań do Temu kończy się błędem 429 lub challenge Turnstile. Implementuj retre z backoffem wykładniczym:

import time
import random

def fetch_with_retry(url, max_retries=5, base_delay=2.0):
    for attempt in range(max_retries):
        try:
            result = fetch_temu_product(url)
            return result
        except Exception as e:
            if attempt == max_retries - 1:
                raise
            delay = base_delay * (2 ** attempt) + random.uniform(0, 1)
            print(f"Retry {attempt + 1}/{max_retries} po {delay:.1f}s: {e}")
            time.sleep(delay)

Paginacja listingu

Endpoint wyszukiwania /api/poppy/v1/search obsługuje parametry page i pageSize. Maksymalna wartość pageSize to 50. Przy 10 stronach otrzymasz 500 produktów na zapytanie. Utrzymuj tempo nie wyższe niż 1 strona na 2-3 sekundy z jednego IP, aby nie przekroczyć progu 30 żądań/min.

Etyka, warunki korzystania i aspekty prawne

Scrapowanie Temu — jak każdego serwisu e-commerce — wiąże się z kwestiami prawnymi i etycznymi. Oto kluczowe zasady, których powinieneś przestrzegać:

  • Scrapuj tylko publiczny katalog — dane o produktach, cenach i dostępności, które są widoczne bez logowania. Nie scrapuj danych kontowych, historii zamówień ani panelu sprzedawcy.
  • Przestrzegaj robots.txt — sprawdź https://www.temu.com/robots.txt przed rozpoczęciem i szanuj reguły Disallow.
  • CFAA i GDPR — w USA Computer Fraud and Abuse Act (18 U.S.C. § 1030) może mieć zastosowanie do scrapowania, które omija mechanizmy autoryzacji. W UE RODO (GDPR) chroni dane osobowe — jeśli zbierasz opinie użytkowników zawierające identyfikowalne informacje, musisz mieć podstawę prawną.
  • Nie omijaj płatnych ścian ani logowania — jeśli dane są dostępne tylko po zalogowaniu, ich scrapowanie bez konta narusza warunki korzystania z serwisu.
  • Rozważ oficjalny merchant feed — jeśli jesteś sprzedawcą na Temu, platforma udostępnia kanał danych produktowych przez panel sprzedawcy. To legalna i stabilna alternatywa dla scrapowania.

Kluczowa zasada: scrapuj dane publicznego katalogu w tempie, które nie zakłóca działania serwisu, używaj proxy residential do symulacji realnego ruchu i nigdy nie zbieraj danych osobowych bez podstawy prawnej.

Najczęstsze błędy i przypadki brzegowe

  • Parsowanie hashowanych klas CSS — klasy takie jak _3a8d2f1 zmieniają się przy każdym deployu. Zamiast tego używaj __NEXT_DATA__ lub atrybutów data-uniqid.
  • Ignorowanie regionalizacji cen — jeśli używasz rotacyjnych IP bez geo-targetingu, dostaniesz mieszankę cen w EUR, USD i GBP. Przypnij sesję do kraju.
  • Zbyt wysokie tempo z jednego IP — nawet residential IP dostaje 429 przy 30+ żądaniach/min. Rozprosz ruch na wiele sesji.
  • Brak odtworzenia TLS fingerprintrequests z proxy residential nadal zostanie rozpoznany przez TLS fingerprinting. Używaj curl_cffi z impersonate="chrome131".
  • Nieaktualny anti_content — jeśli korzystasz z endpointów JSON, token anti_content ma krótki TTL (zazwyczaj kilka minut). Generuj go fresh dla każdej sesji.

Konfiguracja ProxyHat dla scrapowania Temu

ProxyHat oferuje proxy residential, mobile i datacenter z geo-targetingiem na poziomie kraju i miasta. Dla scrapowania Temu zalecamy wyłącznie residential z geo-targetingiem. Oto szybka konfiguracja:

# HTTP — residential, USA, sticky session
http://user-session-temu-batch01-country-US:pass@gate.proxyhat.com:8080

# SOCKS5 — residential, Niemcy, Berlin
socks5://user-country-DE-city-berlin:pass@gate.proxyhat.com:1080

Szczegółową dokumentację techniczną znajdziesz na docs.proxyhat.com. Więcej przypadków użycia w kontekście scrapowania opisujemy na stronie web scraping oraz SERP tracking.

Kluczowe wnioski (Key Takeaways)

  • Wybierz JSON nad HTML — osadzony __NEXT_DATA__ i endpointy /api/poppy/v1/ są stabilniejsze niż parsowanie kart HTML z hashowanymi klasami CSS.
  • Odtwarzaj TLS fingerprint — używaj curl_cffi z impersonate="chrome131", aby ominąć TLS/HTTP2 fingerprinting Temu.
  • Geo-targeting jest obowiązkowy — ceny i wysyłka różnią się w zależności od regionu. Przypnij proxy do kraju (np. -country-US) i miasta.
  • Sticky sessions dla spójności — używaj flagi -session- dla operacji wymagających tego samego IP (koszyk, wysyłka, paginacja).
  • Tempo ma znaczenie — utrzymuj max 30 żądań/min do JSON i max 100 żądań/min do HTML z jednego IP. Implementuj retre z backoffem.
  • Scrapuj tylko publiczny katalog — przestrzegaj robots.txt, CFAA i GDPR. Jeśli jesteś sprzedawcą, rozważ oficjalny merchant feed.

FAQ

Czym jest scrapowanie danych produktów i cen z Temu w 2026?

To proces automatycznego pobierania publicznie dostępnych danych katalogowych z platformy Temu — nazw produktów, cen, list SKU, ocen i opcji wysyłki — przy użyciu skryptów i proxy residential. W 2026 roku wymaga odtworzenia sygnatury TLS przeglądarki, generowania nagłówka anti_content dla endpointów JSON oraz geo-targetingu proxy, ponieważ Temu regionalizuje ceny i koszty wysyłki w zależności od lokalizacji IP.

Dlaczego proxy residential są kluczowe dla scrapowania Temu?

Temu flaguje adresy IP z centrów danych niemal natychmiast — ruch z takich IP dostaje challenge Cloudflare Turnstile lub HTTP 403 po 3-5 żądaniach. Proxy residential używa adresów domowych ISP, które wyglądają jak ruch realnych użytkowników. Dodatkowo geo-targeting na poziomie kraju i miasta zapewnia, że pobierane ceny i opcje wysyłki są spójne z wybranym rynkiem, co jest kluczowe dla price intelligence.

Który typ proxy działa najlepiej do scrapowania Temu?

Residential proxy z geo-targetingiem na poziomie kraju i sticky session. Datacenter proxy są blokowane po kilku żądaniach. Mobile proxy mają bardzo niską wykrywalność, ale wyższą latencję (300-800ms) i nie wspierają geo-targetingu na poziomie miasta. Residential z flagą -country-US i -session- oferuje najlepszy balans między niewykrywalnością, stabilnością sesji i precyzją geolokalizacji.

Jak unikać blokad podczas scrapowania Temu?

Używaj curl_cffi z impersonate Chrome, aby odtworzyć sygnaturę TLS/HTTP2. Utrzymuj tempo max 30 żądań/min do endpointów JSON i max 100 żądań/min do stron HTML z jednego IP. Implementuj retre z backoffem wykładniczym (2s, 4s, 8s, 16s). Rozprosz ruch na wiele sesji sticky z różnymi IP residential. Generuj świeży token anti_content dla każdej sesji i zawsze dołączaj poprawne nagłówki Accept-Language zgodne z geo-lokalizacją proxy.

Czy scrapowanie Temu jest legalne?

Scrapowanie publicznie dostępnego katalogu bez logowania jest ogólnie legalne, ale zależy od jurysdykcji i interpretacji CFAA w USA oraz GDPR w UE. Należy przestrzegać robots.txt, nie omijać mechanizmów autoryzacji, nie zbierać danych osobowych bez podstawy prawnej i nie zakłócać działania serwisu. Jeśli jesteś sprzedawcą na Temu, oficjalny merchant feed jest bezpieczniejszą alternatywą. Skonsultuj się z prawnikiem przed uruchomieniem operacji scrapowania na skalę produkcyjną.

Często zadawane pytania

Czym jest scrapowanie danych produktów i cen z Temu w 2026?

To proces automatycznego pobierania publicznie dostępnych danych katalogowych z platformy Temu — nazw produktów, cen, list SKU, ocen i opcji wysyłki — przy użyciu skryptów i proxy residential. W 2026 roku wymaga odtworzenia sygnatury TLS przeglądarki, generowania nagłówka anti_content dla endpointów JSON oraz geo-targetingu proxy, ponieważ Temu regionalizuje ceny i koszty wysyłki w zależności od lokalizacji IP.

Dlaczego proxy residential są kluczowe dla scrapowania Temu?

Temu flaguje adresy IP z centrów danych niemal natychmiast — ruch z takich IP dostaje challenge Cloudflare Turnstile lub HTTP 403 po 3-5 żądaniach. Proxy residential używa adresów domowych ISP, które wyglądają jak ruch realnych użytkowników. Dodatkowo geo-targeting na poziomie kraju i miasta zapewnia, że pobierane ceny i opcje wysyłki są spójne z wybranym rynkiem.

Który typ proxy działa najlepiej do scrapowania Temu?

Residential proxy z geo-targetingiem na poziomie kraju i sticky session. Datacenter proxy są blokowane po kilku żądaniach. Mobile proxy mają bardzo niską wykrywalność, ale wyższą latencję (300-800ms) i nie wspierają geo-targetingu na poziomie miasta. Residential z flagą -country-US i -session- oferuje najlepszy balans między niewykrywalnością, stabilnością sesji i precyzją geolokalizacji.

Jak unikać blokad podczas scrapowania Temu?

Używaj curl_cffi z impersonate Chrome, aby odtworzyć sygnaturę TLS/HTTP2. Utrzymuj tempo max 30 żądań/min do endpointów JSON i max 100 żądań/min do stron HTML z jednego IP. Implementuj retre z backoffem wykładniczym. Rozprosz ruch na wiele sesji sticky z różnymi IP residential. Generuj świeży token anti_content dla każdej sesji i zawsze dołączaj poprawne nagłówki Accept-Language zgodne z geo-lokalizacją proxy.

Czy scrapowanie Temu jest legalne?

Scrapowanie publicznie dostępnego katalogu bez logowania jest ogólnie legalne, ale zależy od jurysdykcji i interpretacji CFAA w USA oraz GDPR w UE. Należy przestrzegać robots.txt, nie omijać mechanizmów autoryzacji, nie zbierać danych osobowych bez podstawy prawnej i nie zakłócać działania serwisu. Jeśli jesteś sprzedawcą na Temu, oficjalny merchant feed jest bezpieczniejszą alternatywą.

Gotowy, aby zacząć?

Dostęp do ponad 50 mln rezydencjalnych IP w ponad 148 krajach z filtrowaniem AI.

Zobacz cenyProxy rezydencjalne
← Powrót do Bloga