Ważne zastrzeżenie: Ten artykuł dotyczy wyłącznie dostępu do publicznie dostępnych danych na Pinterest. Przed rozpoczęciem scrapowania sprawdź Warunki korzystania z usług Pinterest oraz przepisy obowiązujące w Twojej jurysdykcji — w tym Computer Fraud and Abuse Act (CFAA) w USA oraz RODO (GDPR) w UE. Scrapowanie danych osobowych bez zgody może naruszać prawo. Jeśli Pinterest oferuje oficjalne API spełniające Twoje potrzeby, użyj go zamiast scrapowania.
Pinterest to jedno z najbogatszych źródeł danych wizualnych i trendów w internecie — ponad 500 milionów aktywnych użytkowników miesięcznie generuje piny, tablice i zapytania wyszukiwania, które tworzą unikalny zbiór danych dla badaczy rynku, e-commerce i analityków trendów. Jeśli chcesz wiedzieć, jak scrapować piny i tablice Pinterest w 2026 roku, ten przewodnik poprowadzi Cię przez architekturę Resource API Pinterest, wyzwania anti-bot oraz praktyczne implementacje z wykorzystaniem proxy rezydencyjnych ProxyHat.
Jak scrapować piny i tablice Pinterest w 2026: podsumowanie podejścia
Scrapowanie Pinterest w 2026 roku opiera się na trzech filarach: (1) zrozumieniu, które powierzchnie Pinterest są publicznie dostępne bez logowania; (2) wykorzystaniu wewnętrznego Resource API Pinterest, które zwraca ustrukturyzowane dane JSON zamiast parsowania HTML; (3) rotacji adresów IP przez proxy rezydencyjne, aby uniknąć blokad anti-bot i uzyskać lokalnie relevantne wyniki wyszukiwania. Poniżej omawiamy każdy z tych filarów szczegółowo, z runnable kodem w Pythonie i Node.js.
Publiczne powierzchnie vs dane za loginem
Co jest dostępne publicznie
Pinterest udostępnia publicznie następujące powierzchnie bez wymogu logowania:
- Strony pinów — pojedynczy pin pod adresem
https://www.pinterest.com/pin/{pin_id}/zawiera obraz, tytuł, opis, link źródłowy i metadane. - Tablice użytkowników — feed tablicy pod
https://www.pinterest.com/{username}/{board_name}/zawiera listę pinów z obrazami i opisami. - Wyniki wyszukiwania — strona wyszukiwania pod
https://www.pinterest.com/search/pins/?q={query}zwraca piny pasujące do zapytania. - Profile użytkowników — publiczne tablice i podstawowe metadane profilu.
Co wymaga logowania
Home feed (strona główna po zalogowaniu), rekomendacje spersonalizowane, zapisane tablice prywatne oraz dane analityczne pinów (np. liczba zapisów w czasie rzeczywistym) są dostępne wyłącznie po uwierzytelnieniu. Scrapowanie tych powierzchni wymaga sesji logowania, co zwiększa ryzyko naruszenia Warunków korzystania z usług Pinterest oraz potencjalnie CFAA. Nie zalecamy scrapowania danych za loginem bez wyraźnej autoryzacji.
Oficjalne Pinterest API v5
Pinterest oferuje oficjalne API w wersji 5, które zapewnia autoryzowany dostęp do danych pinów, tablic i kampanii reklamowych. API v5 wymaga rejestracji aplikacji, autoryzacji OAuth i przestrzegania limitów zapytań. Dla zastosowań produkcyjnych — szczególnie tych wymagających danych analitycznych lub zarządzania tablicami — oficjalne API jest preferowanym rozwiązaniem. Scrapowanie Resource API jest uzasadnione, gdy potrzebujesz danych publicznych w skali wykraczającej poza limity oficjalnego API lub gdy API v5 nie udostępnia potrzebnych pól (np. pełne wyniki wyszukiwania bez limitów).
| Cecha | Oficjalne API v5 | Resource API (scraping) |
|---|---|---|
| Dostęp | OAuth 2.0, rejestracja aplikacji | Publiczny, bez logowania |
| Limity zapytań | Dokumentowane, ~1000 req/h na token | Nieudokumentowane, per-IP |
| Dane wyszukiwania | Ograniczone, paginacja cursor | Pełne, paginacja bookmark |
| Ryzyko blokady | Niskie (autoryzowane) | Średnie–wysokie (anti-bot) |
| Koszt infrastruktury | Brak proxy | Wymaga proxy rezydencyjnych |
| Idealne dla | Produkcji, zarządzania kontami | Budowania zbiorów danych trendów |
Architektura Resource API Pinterest
Pinterest nie udostępnia publicznie dokumentacji Resource API, ale jego struktura jest odwracalna przez analizę ruchu sieciowego na publicznych stronach. Resource API to wewnętrzny interfejs, którego używa frontend Pinterest do asynchronicznego ładowania danych. Wszystkie endpointy mają wspólny wzorzec:
GET https://www.pinterest.com/resource/{ResourceName}/get/?source_url={url_encoded_path}&data={url_encoded_json}Kluczowe endpointy
- PinResource —
/resource/PinResource/get/— pobiera dane pojedynczego pinu po ID. - BoardFeedResource —
/resource/BoardFeedResource/get/— paginowana lista pinów z tablicy. - SearchResource —
/resource/SearchResource/get/— wyniki wyszukiwania pinów po zapytaniu. - BoardResource —
/resource/BoardResource/get/— metadane tablicy (nazwa, opis, liczba pinów). - UserResource —
/resource/UserResource/get/— metadane profilu użytkownika.
Parametry zapytania
Każde zapytanie do Resource API wymaga dwóch parametrów URL:
source_url— URL-enkodowana ścieżka, która symuluje stronę, z której „przyszedł" użytkownik, np.%2Fsearch%2Fpins%2F%3Fq%3Dinterior%2520design.data— URL-enkodowany JSON zawierający parametry zapytania, np.{"query":"interior design","bookmarks":["..."]}dla paginacji.
Wymagane nagłówki HTTP
Resource API weryfikuje kilka nagłówków, które muszą być obecne, aby zapytanie zostało przetworzone:
X-Pinterest-PWS-Handler— identyfikator handlera, np.SearchResourceHandlerdla wyszukiwania.X-APP-VERSION— wersja aplikacji frontend, np.0a3f2c1. Wartość zmienia się z czasem — sprawdź aktualną w nagłówkach odpowiedzi.csrftoken— token CSRF pobierany z ciasteczka o tej samej nazwie, które Pinterest ustawia przy pierwszej wizycie.User-Agent— realistyczny nagłówek przeglądarki; unikaj wartości domyślnych bibliotek HTTP.Accept—application/json, text/javascript, */*; q=0.01.
Kluczowa uwaga: token
csrftokenmusi być spójny między ciasteczkiem a nagłówkiem. Jeśli używasz proxy z rotacją IP per-request, ciasteczko CSRF straci ważność przy zmianie IP. Dlatego do paginacji jednego zasobu zalecamy sesje sticky, które utrzymują ten sam adres IP przez cały czas trwania sesji.
Anti-bot Pinterest: dlaczego proxy są niezbędne
Pinterest stosuje wielowarstwowy system anti-bot, który obejmuje:
- Limity zapytań per-IP — brak publicznej dokumentacji, ale w praktyce ~50–100 zapytań na adres IP w krótkim oknie czasowym prowadzi do tymczasowej blokady (HTTP 429 lub 403).
- Bot scoring — Pinterest analizuje wzorce zachowań: tempo zapytań, nagłówki, TLS fingerprint, sekwencję zapytań i spójność ciasteczek.
- Lokalizację geograficzną — wyniki wyszukiwania i rekomendacje są lokalizowane na podstawie kraju adresu IP. Scrapowanie z IP z Niemiec zwraca inne wyniki dla tego samego zapytania niż IP z USA.
Dla zbiorów danych trendów, lokalizacja ma krytyczne znaczenie — trendy w modzie czy wnętrzach różnią się między rynkami. Dlatego rotujące proxy rezydencyjne z geo-targetingiem są standardem dla scrapowania Pinterest w skali produkcyjnej. Proxy datacenter są łatwiej wykrywalne przez systemy anti-bot ze względu na znane zakresy IP dostawców chmurowych.
Wybór typu proxy
| Cecha | Rezydencyjne | Datacenter | Mobilne |
|---|---|---|---|
| Wykrywalność anti-bot | Niska | Wysoka | Bardzo niska |
| Koszt | Średni | Niski | Wysoki |
| Przepustowość | Średnia (~200ms) | Wysoka (~50ms) | Niska (~500ms) |
| Geo-targeting | Kraj + miasto | Ograniczony | Kraj |
| Idealne dla Pinterest | Tak | Nie (szybka blokada) | Tak, ale wolne |
Dla scrapowania Pinterest zalecamy proxy rezydencyjne z geo-targetingiem na poziomie kraju, opcjonalnie miasta dla bardziej precyzyjnych wyników lokalnych.
Implementacja w Pythonie: paginacja BoardFeedResource
Poniższy przykład pokazuje, jak scrapować piny z tablicy użytkownika z wykorzystaniem ProxyHat SDK i proxy rezydencyjnych. Kod paginuje przez BoardFeedResource używając mechanizmu bookmark i utrzymuje sesję sticky dla spójności ciasteczka CSRF.
import requests
import json
from urllib.parse import quote
# ProxyHat — proxy rezydencyjne z geo USA i sesją sticky
proxy_url = "http://user-country-US-session-pinterest01:pass@gate.proxyhat.com:8080"
proxies = {"http": proxy_url, "https": proxy_url}
session = requests.Session()
session.proxies = proxies
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": "application/json, text/javascript, */*; q=0.01",
"Accept-Language": "en-US,en;q=0.9",
"X-APP-VERSION": "0a3f2c1",
"X-Pinterest-PWS-Handler": "BoardFeedResourceHandler",
"Referer": "https://www.pinterest.com/",
}
# Krok 1: Pobierz stronę tablicy, aby uzyskać ciasteczko csrftoken
board_url = "https://www.pinterest.com/janedoe/home-inspiration/"
resp = session.get(board_url, headers=headers)
csrf_token = session.cookies.get("csrftoken")
headers["X-Pinterest-PWS-Handler"] = "BoardFeedResourceHandler"
headers["csrftoken"] = csrf_token
# Krok 2: Paginacja przez BoardFeedResource
board_id = "1234567890123456789"
bookmarks = [""]
all_pins = []
for page in range(5): # 5 stron = ~100 pinów
data_param = json.dumps({
"board_id": board_id,
"bookmarks": bookmarks,
"page_size": 25,
"currentFilter": -1,
"field_set_key": "react_grid_pin"
})
source_url = quote(f"/janedoe/home-inspiration/", safe="")
api_url = f"https://www.pinterest.com/resource/BoardFeedResource/get/?source_url={source_url}&data={quote(data_param, safe='')}"
resp = session.get(api_url, headers=headers)
result = resp.json()
pins = result.get("resource_response", {}).get("data", [])
for pin in pins:
all_pins.append({
"id": pin.get("id"),
"title": pin.get("title", ""),
"image_url": pin.get("images", {}).get("orig", {}).get("url", ""),
"link": pin.get("link", "")
})
bookmarks = result.get("resource_response", {}).get("bookmark", [])
if not bookmarks or bookmarks == [""]:
break
# Pacing — 2 sekundy między stronami
import time
time.sleep(2)
print(f"Pobrano {len(all_pins)} pinów")
for pin in all_pins[:3]:
print(json.dumps(pin, indent=2, ensure_ascii=False))Powyższy kod pobiera do 100 pinów z tablicy, parsując do uproszczonego obiektu z czterema polami: id, title, image_url i link. Wartość page_size wynosi 25 — jest to standardowa wielkość strony dla Resource API Pinterest.
Implementacja w Node.js: SearchResource przez HTTP gateway
Poniższy przykład w Node.js scrapuje wyniki wyszukiwania Pinterest przez SearchResource, używając proxy HTTP ProxyHat na porcie 8080 z geo-targetingiem na Niemcy.
const axios = require('axios');
const HttpsProxyAgent = require('https-proxy-agent').HttpsProxyAgent;
// ProxyHat — proxy rezydencyjne, geo Niemcy, sesja sticky
const proxyAgent = new HttpsProxyAgent(
'http://user-country-DE-session-pinde01:pass@gate.proxyhat.com:8080'
);
const client = axios.create({
httpsAgent: proxyAgent,
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': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'de-DE,de;q=0.9,en;q=0.7',
'X-APP-VERSION': '0a3f2c1',
'X-Pinterest-PWS-Handler': 'SearchResourceHandler',
'Referer': 'https://www.pinterest.com/search/pins/?q=interior%20design'
},
timeout: 15000
});
async function scrapeSearch(query, maxPages = 3) {
const pins = [];
let bookmarks = [''];
for (let page = 0; page < maxPages; page++) {
const dataParam = JSON.stringify({
query,
bookmarks,
page_size: 25,
scope: 'pins',
field_set_key: 'react_grid_pin'
});
const sourceUrl = encodeURIComponent(`/search/pins/?q=${encodeURIComponent(query)}`);
const apiUrl = `https://www.pinterest.com/resource/SearchResource/get/?source_url=${sourceUrl}&data=${encodeURIComponent(dataParam)}`;
try {
const resp = await client.get(apiUrl);
const result = resp.data;
const pagePins = result.resource_response?.data || [];
pagePins.forEach(pin => {
pins.push({
id: pin.id,
title: pin.title || '',
image_url: pin.images?.orig?.url || '',
link: pin.link || ''
});
});
bookmarks = result.resource_response?.bookmark || [];
if (!bookmarks.length || bookmarks[0] === '') break;
await new Promise(r => setTimeout(r, 2000)); // Pacing
} catch (err) {
console.error(`Błąd na stronie ${page}:`, err.message);
break;
}
}
return pins;
}
(async () => {
const results = await scrapeSearch('interior design', 3);
console.log(`Pobrano ${results.length} pinów`);
results.slice(0, 3).forEach(p => console.log(JSON.stringify(p, null, 2)));
})();Oba przykłady używają sesji sticky (-session-pinterest01 i -session-pinde01), co zapewnia, że wszystkie zapytania w ramach jednego uruchomienia skryptu wychodzą z tego samego adresu IP. To kluczowe dla utrzymania spójności ciasteczka csrftoken.
Paginacja bookmark, sesje sticky i higiena fingerprint
Mechanizm bookmark
Pinterest Resource API używa paginacji opartej na bookmarkach, a nie na tradycyjnych numerach stron. Każda odpowiedź zawiera pole bookmark — tablicę z jednym ciągiem znaków (tokenem). Ten token przekazuje się w kolejnym zapytaniu w parametrze data.bookmarks. Gdy bookmark jest pustą tablicą lub zawiera pusty ciąg, oznacza to koniec wyników.
// Przykład struktury odpowiedzi
{
"resource_response": {
"data": [/* 25 pinów */],
"bookmark": ["Y2I6...token..."]
}
}Sesje sticky dla ciasteczka CSRF
Token csrftoken jest powiązany z sesją serwera, która z kolei jest powiązana z adresem IP. Jeśli IP zmieni się w trakcie paginacji, Pinterest odrzuci zapytanie z błędem 403. ProxyHat obsługuje to przez flagę -session-{id} w nazwie użytkownika proxy:
http://user-country-US-session-pinterest01:pass@gate.proxyhat.com:8080Wszystkie zapytania z tą samą nazwą sesji wychodzą z tego samego adresu IP przez konfigurowalny okres (domyślnie do 30 minut). Dla dłuższych sesji sprawdź dokumentację ProxyHat dotyczącą parametrów sesji.
Pacing i tempo zapytań
Nawet z proxy rezydencyjnymi, tempo zapytań musi być kontrolowane. Zalecane wartości:
- 2–3 sekundy między zapytaniami do tego samego endpointu.
- Maksymalnie 50 zapytań na adres IP na 5 minut.
- 100–200 zapytań współbieżnie przy puli 20+ adresów IP.
- Losowe jitter ±500ms na opóźnienie, aby uniknąć wykrycia wzorca.
Higiena User-Agent i nagłówków
Bot scoring Pinterest analizuje nagłówki HTTP pod kątem spójności. Praktyki:
- Używaj realistycznego, aktualnego nagłówka
User-Agent— nie domyślnego z bibliotekirequestsczyaxios. - Dopasuj
Accept-Languagedo geo proxy — np.de-DE,de;q=0.9dla IP z Niemiec. - Utrzymuj spójność między
Refererasource_url—Refererpowinien odpowiadać stronie, którą symulujesource_url. - Nie rotuj
User-Agentw ramach jednej sesji — to sygnał ostrzegawczy dla systemów anti-bot.
Konfiguracja ProxyHat i linki wewnętrzne
ProxyHat oferuje proxy rezydencyjne, mobilne i datacenter z geo-targetingiem na poziomie kraju i miasta. Dla scrapowania Pinterest zalecamy konfigurację:
- Typ proxy: rezydencyjne (najlepszy stosunek wykrywalności do kosztu).
- Geo: dopasowane do rynku badanych trendów, np.
-country-USdla trendów amerykańskich. - Sesje: sticky z flagą
-session-{id}dla paginacji. - Port: 8080 dla HTTP, 1080 dla SOCKS5.
Sprawdź ceny ProxyHat, dostępne lokalizacje oraz przypadki użycia web scraping i SERP tracking. Szczegóły konfiguracji znajdziesz w dokumentacji ProxyHat.
Najczęstsze błędy i przypadki brzegowe
1. Brak ciasteczka csrftoken
Niektóre endpointy Resource API wymagają nagłówka csrftoken, który musi być pobrany z ciasteczka ustawionego przez Pinterest przy pierwszej wizycie. Pominięcie kroku pobrania strony przed zapytaniem API prowadzi do błędu 403. Rozwiązanie: zawsze wykonaj najpierw GET na publiczną stronę Pinterest, aby zainicjować sesję.
2. Nieaktualny X-APP-VERSION
Wartość X-APP-VERSION zmienia się przy każdym wdrożeniu frontend Pinterest. Stara wartość może działać przez kilka dni, ale ostatecznie prowadzi do błędów. Rozwiązanie: pobierz aktualną wartość z nagłówków odpowiedzi strony Pinterest (X-APP-VERSION w nagłówkach HTTP lub w tagu <script> z danymi konfiguracyjnymi).
3. Rotacja IP w trakcie paginacji
Użycie proxy z rotacją per-request podczas paginacji bookmark powoduje utratę sesji i błędy 403. Rozwiązanie: używaj sesji sticky dla całej sekwencji paginacji, a nową sesję (i nowe IP) uruchamiaj tylko przy rozpoczęciu scrapowania nowego zasobu.
4. Zbyt agresywne tempo
Nawet z idealnymi proxy, 100 zapytań na sekundę z jednego IP wywoła blokadę. Rozwiązanie: implementuj pacing z jitterem i monitoruj kody odpowiedzi — 429 oznacza, że musisz zwolnić.
5. Scrapowanie danych osobowych
Piny mogą zawierać dane osobowe użytkowników (nazwy, awatary, lokalizacje). Scrapowanie i przechowywanie tych danych bez podstawy prawnej narusza RODO w UE. Rozwiązanie: scrapuj wyłącznie dane publiczne, nieosobowe — treść pinów, obrazy, kategorie, trendy. Unikaj przechowywania danych profilowych.
Etyczne scrapowanie i kiedy użyć oficjalnego API
Scrapowanie Pinterest powinno być przeprowadzane odpowiedzialnie i zgodnie z prawem. Kluczowe zasady:
- Respektuj robots.txt — sprawdź
https://www.pinterest.com/robots.txtprzed rozpoczęciem scrapowania. Jeśli dana ścieżka jest wyłączona, nie scrapuj jej. - Tylko dane publiczne, nieosobowe — treści pinów, obrazy, kategorie i trendy są publiczne. Dane profilowe, zapisy i interakcje użytkowników mogą podlegać RODO/GDPR.
- Minimalizuj obciążenie serwerów — pacing i limity współbieżności chronią infrastrukturę Pinterest i zmniejszają ryzyko blokad.
- Przestrzegaj Warunków korzystania — Warunki Pinterest zabraniają automatycznego pobierania danych bez autoryzacji. Scrapowanie danych publicznych może być interpretowane jako naruszenie ToS — ocena prawna zależy od jurysdykcji.
- Preferuj oficjalne API dla produkcji — jeśli Pinterest API v5 spełnia Twoje potrzeby, użyj go. Jest stabilniejsze, legalne i nie wymaga infrastruktury proxy.
Scrapowanie Resource API jest uzasadnione w przypadkach, gdy oficjalne API jest niewystarczające — np. przy budowaniu zbiorów danych trendów obejmujących pełne wyniki wyszukiwania w wielu krajach, co wykracza poza limity API v5. W takich przypadkach traktuj scrapowanie jako uzupełnienie, nie zastępstwo, oficjalnego API.
Najważniejsze wnioski
Kluczowe punkty:
- Pinterest Resource API (
/resource/{Name}/get/) zwraca ustrukturyzowane JSON z parametramisource_urlidata.- Wymagane nagłówki:
X-Pinterest-PWS-Handler,X-APP-VERSION,csrftoken— wszystkie muszą być spójne.- Paginacja oparta na bookmarkach, nie numerach stron — przekazuj token w
data.bookmarks.- Proxy rezydencyjne z geo-targetingiem i sesjami sticky są niezbędne dla unikania blokad i uzyskiwania lokalnych wyników.
- Pacing 2–3 sekundy między zapytaniami, maksymalnie ~50 zapytań na IP na 5 minut.
- Scrapuj wyłącznie dane publiczne, nieosobowe; respektuj ToS i RODO; preferuj oficjalne API v5 dla produkcji.
Często zadawane pytania
Czym jest scrapowanie pinów i tablic Pinterest w 2026 roku?
Scrapowanie Pinterest w 2026 roku polega na pobieraniu publicznie dostępnych danych pinów i tablic przez wewnętrzne Resource API Pinterest, które zwraca ustrukturyzowane JSON. Wymaga użycia proxy rezydencyjnych z geo-targetingiem i sesjami sticky dla utrzymania spójności ciasteczka CSRF, a także odpowiedniego pacingu i higieny nagłówków HTTP, aby uniknąć blokad anti-bot.
Dlaczego scrapowanie Pinterest ma znaczenie dla użytkowników proxy?
Pinterest stosuje limity zapytań per-IP i bot scoring, co sprawia, że scrapowanie bez proxy prowadzi do szybkich blokad. Proxy rezydencyjne z geo-targetingiem są niezbędne, ponieważ wyniki wyszukiwania i rekomendacje Pinterest są lokalizowane — różne kraje zwracają różne trendy. Sesje sticky zapewniają spójność ciasteczka csrftoken podczas paginacji bookmark.
Który typ proxy działa najlepiej do scrapowania Pinterest?
Proxy rezydencyjne są optymalne do scrapowania Pinterest, ponieważ oferują niską wykrywalność anti-bot, geo-targeting na poziomie kraju i miasta oraz rozsądną latencję (~200ms). Proxy datacenter są szybko blokowane przez systemy anti-bot Pinterest. Proxy mobilne są najtrudniejsze do wykrycia, ale wolniejsze i droższe, co ogranicza ich zastosowanie do scrapowania w skali.
Jak uniknąć blokad podczas scrapowania Pinterest?
Aby uniknąć blokad: używaj proxy rezydencyjnych z rotacją IP między sesjami, utrzymuj sesje sticky w trakcie paginacji bookmark, stosuj pacing 2–3 sekundy między zapytaniami z jitterem, używaj realistycznego nagłówka User-Agent dopasowanego do geo proxy, pobieraj ciasteczko csrftoken przed pierwszym zapytaniem API, i monitoruj kody odpowiedzi 429/403, aby dynamicznie dostosowywać tempo.
Czy scrapowanie Pinterest jest legalne?
Legalność scrapowania zależy od jurysdykcji i rodzaju danych. Scrapowanie publicznie dostępnych danych nieosobowych jest ogólnie akceptowane, ale Warunki korzystania z usług Pinterest zabraniają automatycznego pobierania danych. W USA CFAA może mieć zastosowanie przy omijaniu zabezpieczeń. W UE RODO chroni dane osobowe. Zalecamy konsultację prawną i preferowanie oficjalnego API v5 dla zastosowań produkcyjnych.






