Zastrzeżenie prawne: Ten artykuł dotyczy wyłącznie dostępu do publicznie dostępnych danych na Pinterest. Musisz przestrzegać Warunków Korzystania (ToS) Pinterest, a w USA — ustawy CFAA (Computer Fraud and Abuse Act), a w UE — RODO (GDPR). Nie zachęcamy do omijania zabezpieczeń, logowania się bez autoryzacji ani gromadzenia danych osobowych bez podstawy prawnej. Jeśli Pinterest oferuje oficjalne API spełniające Twoje potrzeby — użyj go.
Visual-content i trend datasets rosną w wartości, a Pinterest pozostaje jednym z najbogatszych źródeł danych wizualnych na świecie — ponad 500 milionów aktywnych użytkowników miesięcznie wg Pinterest Newsroom. Jeśli budujesz pipeline do analizy trendów, katalogów produktów czy badań rynku, scrapowanie Pinterest może dostarczyć ustrukturyzowanych danych o pinach, tablicach i wynikach wyszukiwania. Ten przewodnik pokazuje, jak scraper Pinterest zbudować produkcyjnie w 2026 roku — z proxy, paginacją i etycznymi ramami.
Jak scrapować piny i tablice Pinterest w 2026: Podstawy
Scrapowanie Pinterest w 2026 wymaga zrozumienia trzech warstw: publicznych powierzchni danych, wewnętrznego Resource API oraz infrastruktury anti-bot. Piny i tablice widoczne bez logowania są dostępne na poziomie stron HTML oraz przez wewnętrzne endpointy JSON. Home feed i rekomendacje spersonalizowane są za loginem — ich scrapowanie narusza ToS i jest technicznie oraz prawnie ryzykowne.
Oficjalne Pinterest API v5 oferuje dostęp do pinów, tablic i statystyk konta, ale jest ograniczone do danych własnego profilu lub kont z wyraźną autoryzacją OAuth. Nie pozwala na masowe przeszukiwanie publicznych tablic innych użytkowników ani na pobieranie wyników wyszukiwania w skali — co czyni Pinterest API scraping uzupełnieniem, nie zastępstwem scrapingu publicznych danych.
Publiczne powierzchnie vs dane za loginem
| Powierzchnia | Dostęp | Typ danych | Legalność scrapowania |
|---|---|---|---|
| Pina (pin page) | Publiczna bez logowania | Obraz, tytuł, opis, link, tagi | Dozwolone (publiczne, nieosobiste) |
| Tablica (board feed) | Publiczna bez logowania | Lista pinów z metadanymi | Dozwolone (publiczne) |
| Wyniki wyszukiwania | Publiczne bez logowania | Piny dopasowane do zapytania | Dozwolone (publiczne, zlokalizowane) |
| Home feed | Za loginem | Spersonalizowane rekomendacje | Ryzykowne — narusza ToS |
| Profil użytkownika (prywatny) | Za loginem / niepubliczny | Prywatne tablice | Niedozwolone |
Kontekst techniczny: Resource API Pinterest
Pinterest jest aplikacją SPA (single-page application) opartą na React/Redux. Wszystkie dane ładują się przez wewnętrzne endpointy JSON pod ścieżką /resource/<NazwaZasobu>/get/. Te endpointy nie są udokumentowane publicznie, ale są wywoływane przez frontend przy każdej nawigacji — więc są częścią normalnego ruchu przeglądarki.
Kluczowe endpointy Resource API
- PinResource —
/resource/PinResource/get/— pobiera metadane pojedynczego pina (id, tytuł, obraz, link, opis). - BoardFeedResource —
/resource/BoardFeedResource/get/— paginowana lista pinów z tablicy. Zwraca obiekty pinów z polamiid,title,images,link,description. - SearchResource —
/resource/SearchResource/get/— wyniki wyszukiwania z lokalizacją geograficzną wpływającą na ranking. - BoardResource —
/resource/BoardResource/get/— metadane tablicy (nazwa, liczba followerów, liczba pinów).
Każde żądanie do Resource API wymaga:
- Parametru
?source_url=— zakodowany URL ścieżki, np.?source_url=%2Fboard%2Fuser%2Fboard-name%2F - Parametru
data=— URL-encoded JSON z opcjami paginacji, np.{"bookmarks":["..."],"board_id":"123","page_size":25} - Nagłówka
X-Pinterest-PWS-Handler— identyfikator handlera frontendu - Nagłówka
X-APP-VERSION— wersja aplikacji (zmienia się okresowo) - Cookie
csrftoken— token CSRF wymagany dla żądań modyfikujących, ale obecny też w żądaniach GET
Anti-bot i strategia proxy
Pinterest stosuje per-IP rate limiting i bot scoring oparty na sygnałach takich jak: częstotliwość żądań, powtarzalność nagłówków, brak interakcji JavaScript, geolokalizacja IP vs język żądania. Po przekroczeniu progu (często ~50–100 żądań/min z jednego IP) Pinterest zwraca HTTP 429 lub stronę CAPTCHA.
Rotujące proxy residencjalne są konieczne z dwóch powodów:
- Rate limiting per-IP — każdy IP ma limit żądań; rotacja IP pozwala rozproszyć obciążenie.
- Lokalizacja wyników — wyszukiwanie i rekomendacje Pinterest są zlokalizowane. Pin pokazywany w USA może różnić się od tego w Niemczech. Geo-targetowanie (
-country-US,-country-DE) daje kontrolę nad tym, jakie dane otrzymujesz.
Dla ProxyHat konfiguracja proxy residencjalnego z geo-targetowaniem wygląda następująco:
# HTTP proxy z geo-targetowaniem na USA
http://user-country-US:pass@gate.proxyhat.com:8080
# HTTP proxy z geo-targetowaniem na Niemcy i sesją sticky
http://user-country-DE-session-abc123:pass@gate.proxyhat.com:8080
# SOCKS5 proxy
socks5://user-country-US:pass@gate.proxyhat.com:1080
Szczegóły konfiguracji znajdziesz w dokumentacji ProxyHat oraz na stronie lokalizacji proxy.
Implementacja: Python — paginacja BoardFeedResource
Poniższy przykład pobiera piny z publicznej tablicy przez BoardFeedResource, używając proxy residencjalnego ProxyHat z geo-targetowaniem na USA. Implementuje paginację bookmark — Pinterest używa kursorów opartych na base64-encoded stringach zamiast offsetów.
import requests
import json
from urllib.parse import quote, urlencode
PROXY = "http://user-country-US:pass@gate.proxyhat.com:8080"
proxies = {"http": PROXY, "https": PROXY}
HEADERS = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/120.0.0.0 Safari/537.36",
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Language": "en-US,en;q=0.9",
"X-Pinterest-PWS-Handler": "board/[username]/[slug].js",
"X-APP-VERSION": "d4c1f3e",
"Referer": "https://www.pinterest.com/",
}
BOARD_SLUG = "username/board-name"
SOURCE_URL = f"/{BOARD_SLUG}/"
bookmarks = [""]
all_pins = []
page = 0
while bookmarks and page < 10: # limit stron dla bezpieczeństwa
data = json.dumps({
"bookmarks": bookmarks,
"board_id": "1234567890",
"page_size": 25,
"currentFilter": -1,
"field_set_key": "react_grid_pin",
})
params = {
"source_url": SOURCE_URL,
"data": data,
}
url = "https://www.pinterest.com/resource/BoardFeedResource/get/"
resp = requests.get(url, params=params, headers=HEADERS,
proxies=proxies, timeout=30)
if resp.status_code == 429:
print(f"Rate limited na stronie {page}, czekam...")
import time
time.sleep(60)
continue
resp.raise_for_status()
payload = resp.json()
resource_response = payload.get("resource_response", {})
pins = resource_response.get("data", [])
if not pins:
break
for pin in pins:
pin_obj = {
"id": pin.get("id"),
"title": pin.get("title") or pin.get("grid_title"),
"image_url": pin.get("images", {}).get("orig", {}).get("url"),
"link": pin.get("link"),
"description": pin.get("description", "")[:200],
}
all_pins.append(pin_obj)
bookmarks = resource_response.get("bookmark")
if not bookmarks or bookmarks == [""]:
break
page += 1
import time
time.sleep(2) # pacing — 2s między żądaniami
print(f"Pobrano {len(all_pins)} pinów")
for p in all_pins[:3]:
print(json.dumps(p, indent=2))
Kluczowe elementy tego kodu:
- Geo-targetowanie
-country-US— wyniki odpowiadają rynku amerykańskiemu - Pacing — 2 sekundy między żądaniami zmniejsza ryzyko rate limit
- Bookmark pagination — kursory z odpowiedzi, nie offset liczbowy
- Truncated pin object — ekstrakcja id, title, image_url, link, description
Implementacja: Node.js — wyszukiwanie przez SearchResource
Drugi przykład w Node.js używa HTTP gateway ProxyHat na porcie 8080 do scrapowania wyników wyszukiwania przez SearchResource.
const axios = require('axios');
const HttpsProxyAgent = require('https-proxy-agent');
const PROXY_URL = 'http://user-country-US:pass@gate.proxyhat.com:8080';
const agent = new HttpsProxyAgent.HttpsProxyAgent(PROXY_URL);
const HEADERS = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) '
+ 'AppleWebKit/537.36 (KHTML, like Gecko) '
+ 'Chrome/120.0.0.0 Safari/537.36',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'en-US,en;q=0.9',
'X-Pinterest-PWS-Handler': 'search/[scope].js',
'X-APP-VERSION': 'd4c1f3e',
'Referer': 'https://www.pinterest.com/',
};
async function searchPins(query, maxPages = 5) {
const sourceUrl = `/search/pins/?q=${encodeURIComponent(query)}`;
let bookmarks = [''];
const allPins = [];
for (let page = 0; page < maxPages; page++) {
const data = JSON.stringify({
bookmarks: bookmarks,
query: query,
page_size: 25,
scope: 'pins',
});
const params = new URLSearchParams({
source_url: sourceUrl,
data: data,
});
const url = `https://www.pinterest.com/resource/SearchResource/get/?${params}`;
try {
const resp = await axios.get(url, {
headers: HEADERS,
httpsAgent: agent,
timeout: 30000,
});
const resourceResponse = resp.data.resource_response || {};
const pins = resourceResponse.data || [];
if (pins.length === 0) break;
pins.forEach(pin => {
allPins.push({
id: pin.id,
title: pin.title || pin.grid_title,
image_url: pin.images?.orig?.url,
link: pin.link,
});
});
bookmarks = resourceResponse.bookmark ? [resourceResponse.bookmark] : [];
if (!bookmarks[0]) break;
await new Promise(r => setTimeout(r, 2000)); // 2s pacing
} catch (err) {
if (err.response?.status === 429) {
console.log('Rate limited, czekam 60s...');
await new Promise(r => setTimeout(r, 60000));
page--; // retry
continue;
}
throw err;
}
}
return allPins;
}
(async () => {
const pins = await searchPins('minimalist interior design');
console.log(`Pobrano ${pins.length} pinów`);
console.log(JSON.stringify(pins.slice(0, 3), null, 2));
})();
Paginacja bookmark, sesje sticky i higiena fingerprint
Bookmark pagination
Pinterest nie używa tradycyjnego offsetu liczbowego. Zamiast tego zwraca pole bookmark — base64-encoded ciąg znaków reprezentujący pozycję kursora. Przekazujesz go w kolejnym żądaniu w tablicy bookmarks. Gdy bookmark jest pusty lub brakuje — osiągnięto koniec danych.
Ważne: bookmark może zawierać token -end- sygnalizujący koniec wyników. Sprawdzaj tę wartość.
Sesje sticky dla csrftoken
Cookie csrftoken jest ustawiane przy pierwszym żądaniu i powiązane z sesją. Jeśli używasz rotacji IP per-request, każde żądanie dostanie nowy csrftoken, co może wyglądać podejrzanie. Dla ciągłości sesji używaj sticky sessions:
# Sticky session — ten sam IP przez całą sesję
http://user-session-pinterest-board-abc:pass@gate.proxyhat.com:8080
Sticky session utrzymuje ten sam IP przez konfigurowalny czas (zwykle 10–30 minut), co pozwala zachować ciągłość csrftoken i innych cookies. Po zakończeniu sesji lub po wygaśnięciu, ProxyHat przydziela nowy IP.
User-Agent i higiena nagłówków
Fingerprint risk rośnie, gdy nagłówki są niespójne. Najlepsze praktyki:
- Używaj realistycznego, aktualnego User-Agent (Chrome 120+ na Windows/macOS/Linux)
- Dopasuj
Accept-Languagedo geo-targetowania proxy —en-USdla USA,de-DEdla Niemiec - Utrzymuj
X-APP-VERSIONaktualnym — sprawdź aktualną wersję w żądaniach przeglądarki - Ustaw
Referernahttps://www.pinterest.com/ - Nie wysyłaj nagłówków bot-like (
python-requests/2.x,axios/1.x)
Pacing i rate limiting
Rekomendowane tempo: 1 żądanie na 2–3 sekundy na IP. Przy 100 IP przez rotujące proxy, daje to ~20–30 żądań/s — wystarczająco dla większości pipeline'ów. Przy 429 (Too Many Requests) — pauzuj 60s i retry. Przy 403 lub CAPTCHA — zmień IP i zredukuj tempo.
Najczęstsze błędy i przypadki brzegowe
- Ignorowanie
X-APP-VERSION— Pinterest odrzuca żądania z nieaktualną wersją. Sprawdzaj aktualną wersję w DevTools co kilka tygodni. - Brak
source_url— endpoint zwraca błąd bez poprawnegosource_urlodpowiadającego ścieżce frontendu. - Offset zamiast bookmark — próba paginacji offsetowej nie działa; zawsze używaj zwróconego
bookmark. - Niespójne geo i język — proxy w DE z
Accept-Language: en-USwygląda podejrzanie. Dopasuj je. - Zbyt szybkie żądania — 10+ req/s z jednego IP = natychmiastowy ban. Pacing 2–3s jest bezpieczny.
- Piny bez obrazu — niektóre piny (np. wideo, artykuły) mogą nie mieć
images.orig.url. ObsłużNone/null.
Etyczne scrapowanie i kiedy użyć oficjalnego API
Scrapowanie publicznych danych z Pinterest jest legalne, gdy:
- Gromadzisz nieosobiste dane pinów — obrazy, tytuły, linki, tagi
- Przestrzegasz
robots.txt— sprawdź robots.txt Pinterest - Nie gromadzisz danych osobowych bez podstawy prawnej (GDPR Art. 6)
- Nie obciążasz infrastruktury Pinterest nadmiernie — pacing i limit concurrency
- Nie omijasz zabezpieczeń (CAPTCHA, login walls)
Kiedy użyć oficjalnego API zamiast scrapowania:
- Gdy budujesz aplikację dla użytkowników Pinterest (zarządzanie ich własnymi tablicami)
- Gdy potrzebujesz statystyk i analityki konta
- Gdy gromadzisz dane z własnego konta firmowego
- Gdy potrzebujesz SLA i stabilności produkcyjnej
Oficjalne Pinterest API v5 ma limity rate limit ~1000 żądań/min dla zapytań odczytu — wystarczające dla większości zastosowań zarządzania kontem. Dla masowego gromadzenia danych o trendach z publicznych tablic i wyszukiwania, scraping publicznych powierzchni z proxy residencjalnymi pozostaje praktyczną opcją.
Zobacz też nasze przypadki użycia: web scraping i SERP tracking, oraz cennik ProxyHat.
Kluczowe wnioski
Podsumowanie:
- Scrapuj tylko publiczne piny, tablice i wyniki wyszukiwania — unikaj home feed i danych za loginem.
- Resource API (
/resource/.../get/) z parametramisource_urlidatajest głównym kanałem danych.- Rotujące proxy residencjalne z geo-targetowaniem są konieczne — wyniki są zlokalizowane, a rate limit jest per-IP.
- Bookmark pagination, sticky sessions dla csrftoken i pacing 2–3s to fundamenty stabilnego pipeline'u.
- Przestrzegaj ToS, GDPR, CFAA i robots.txt — dla produkcji rozważ oficjalne API v5.
FAQ
Czym jest scrapowanie pinów i tablic Pinterest w 2026?
To proces automatycznego pobierania publicznie dostępnych danych z pinów, tablic i wyników wyszukiwania Pinterest poprzez wewnętrzne Resource API lub parsowanie HTML. W 2026 wymaga proxy residencjalnych z geo-targetowaniem, paginacji bookmark i higieny fingerprint, ponieważ Pinterest zaostrzył anti-bot scoring i per-IP rate limiting.
Dlaczego proxy są potrzebne do scrapowania Pinterest?
Pinterest stosuje rate limiting per-IP (często ~50–100 żądań/min) oraz bot scoring oparty na geolokalizacji, nagłówkach i wzorcu ruchu. Bez rotujących proxy residencjalnych szybko otrzymasz HTTP 429 lub CAPTCHA. Dodatkowo wyniki wyszukiwania i rekomendacje są zlokalizowane — geo-targetowanie (np. -country-US) daje kontrolę nad rynkiem, z którego pochodzą dane.
Który typ proxy działa najlepiej dla scrapowania Pinterest?
Proxy residencjalne z geo-targetowaniem są optymalne — pochodzą z ISP, wyglądają jak ruch realnych użytkowników i wspierają targeting kraj/miasto. Proxy datacenter są łatwiej wykrywane przez anti-bot Pinterest. Mobile proxies są alternatywą dla bardzo wysokiej niezawodności, ale są droższe. ProxyHat oferuje wszystkie trzy typy — zobacz cennik.
Jak unikać blokad podczas scrapowania Pinterest?
Stosuj pacing 2–3s między żądaniami, rotuj IP per-request lub używaj sticky sessions dla ciągłości csrftoken, dopasuj Accept-Language do geo proxy, utrzymuj aktualny X-APP-VERSION, używaj realistycznego User-Agent i obsługuj HTTP 429 z backoff 60s. Nigdy nie omijaj CAPTCHA ani login walls — to narusza ToS.
Czy scrapowanie Pinterest jest legalne?
Scrapowanie publicznie dostępnych, nieosobistych danych (piny, obrazy, tytuły) jest ogólnie legalne, ale zależy od jurysdykcji. W USA CFAA ogranicza dostęp do danych chronionych zabezpieczeniami technicznymi. W UE RODO (GDPR) wymaga podstawy prawnej dla danych osobowych. Zawsze sprawdzaj ToS Pinterest, robots.txt i skonsultuj się z prawnikiem dla zastosowań komercyjnych.






