Pinterest — это визуальная поисковая система с более чем 5 миллиардами пинов, и для разработчиков, создающих датасеты трендов, инструменты мониторинга брендов или аналитику визуального контента, платформа представляет собой ценный, но технически сложный источник данных. В этом руководстве мы детально разберём, как скрейпить пины и доски Pinterest в 2026 году, используя резидентные прокси, внутренний Resource API и проверенные паттерны пагинации.
Юридическое предупреждение. Скрейпинг Pinterest должен соблюдать Условия использования Pinterest, Закон о компьютерном мошенничестве и злоупотреблениях (CFAA, США) и Общий регламент по защите данных (GDPR, ЕС). Собирайте только публичные, неперсональные данные. Если сомневаетесь — используйте официальный Pinterest API v5.
Как скрейпить пины и доски Pinterest в 2026: публичные поверхности и ограничения
Прежде чем писать код, важно понять, какие данные Pinterest доступны без авторизации, а какие — нет. Pinterest имеет три уровня доступности данных:
- Публичные пины — отдельные пины с публичных досок, доступные по прямому URL (например,
pinterest.com/pin/123456789/). Содержат изображение, заголовок, описание, ссылку и метаданные. - Публичные доски — ленты досок, видимые без входа в аккаунт. Доступны через URL вида
pinterest.com/username/board-slug/. - Результаты поиска — публичные результаты по ключевым словам, доступные без авторизации, но локализованные по гео пользователя.
- Домашняя лента — персонализированная лента рекомендаций. Требует авторизации. Скрейпить её без аккаунта невозможно.
Это означает, что значительная часть данных Pinterest — пины, доски и поисковые результаты — доступна для сбора, но требует осторожного подхода к инфраструктуре.
Официальный Pinterest API v5: чего хватает, а чего нет
Pinterest предлагает официальный REST API v5 с endpoints для управления пинами, досками и рекламными кампаниями. Однако API ориентирован прежде всего на владельцев бизнес-аккаунтов, управляющих собственным контентом. Базовый лимит составляет около 1000 запросов в день для стандартных приложений, а доступ к чужим пинам и поиск по ключевым словам ограничен.
Для исследовательских задач — сбора трендовых пинов по теме, анализа визуального контента конкурентов, построения датасетов для машинного обучения — официальный API часто недостаточен. Именно поэтому разработчики обращаются к внутреннему Resource API.
Внутренний Resource API Pinterest: как это работает
Pinterest, как и многие современные SPA-приложения, использует внутренний JSON API для загрузки данных на фронтенд. Этот API не задокументирован публично, но его структура относительно стабильна и используется самим Pinterest в продакшене.
Ключевые endpoints
- BoardFeedResource — возвращает ленту пинов конкретной доски. Основной endpoint для сбора пинов с доски.
- PinResource — возвращает детальную информацию о конкретном пине по ID. Endpoint:
/resource/PinResource/get/. - SearchResource — возвращает результаты поиска по ключевым словам. Локализован по гео IP-адреса запроса.
- UserResource — возвращает информацию о профиле пользователя и его досках.
Все endpoints вызываются по базовому URL https://www.pinterest.com/resource/{ResourceName}/get/ с двумя ключевыми параметрами:
source_url— URL-закодированный путь страницы, с которой делается запрос (например,/username/board-slug/).data— URL-закодированный JSON-объект с параметрами запроса, включаяoptions(параметры конкретного ресурса) иcontext(контекст запроса).
Обязательные заголовки
Для успешных запросов к Resource API необходимы следующие заголовки:
| Заголовок | Назначение | Пример значения |
|---|---|---|
X-Pinterest-PWS-Handler |
Идентифицирует обработчик фронтенда | www/[username]/[board].js |
X-APP-VERSION |
Версия приложения Pinterest | a1234b |
csrftoken |
CSRF-токен, связанный с сессией | Случайная строка из cookie |
User-Agent |
Строка браузера — критична для anti-bot | Стандартный UA браузера |
Accept |
Указывает на JSON-запрос | application/json |
Важно: значения X-APP-VERSION и структура X-Pinterest-PWS-Handler периодически меняются. Рекомендуется сначала загрузить целевую страницу обычным GET-запросом, извлечь актуальные значения из HTML или cookie, и только потом делать запросы к Resource API.
Антибот-реальность: почему обычные прокси не работают
Pinterest применяет многоуровневую систему anti-bot защиты, включающую:
- Per-IP rate limiting — Pinterest отслеживает частоту запросов с каждого IP-адреса. Превышение порога (ориентировочно 50–100 запросов в минуту с одного IP) приводит к временным блокировкам с HTTP 429.
- Bot scoring — Pinterest использует поведенческий анализ для оценки вероятности того, что запрос поступает от бота. Факторы: User-Agent, заголовки, частота запросов, паттерны навигации.
- Гео-локализация — результаты поиска и рекомендации Pinterest локализованы. Запрос из немецкого IP-адреса возвращает другие результаты, чем из американского.
- CAPTCHA — при подозрительной активности Pinterest может вернуть CAPTCHA-челлендж вместо данных.
Дата-центр прокси (datacenter proxies) почти всегда детектируются Pinterest, поскольку их IP-диапазоны известны и публично доступны в базах данных вроде ASN регистров. Это означает, что запросы с datacenter IP получают более высокий bot score с самого начала.
Почему нужны резидентные прокси с гео-таргетингом
Резидентные прокси используют IP-адреса реальных интернет-провайдеров, что делает их неотличимыми от обычных пользователей. Для скрейпинга Pinterest это критически важно по двум причинам:
- Снижение bot score — запросы с резидентных IP не помечаются как подозрительные при умеренной частоте.
- Гео-консистентность — если вам нужны результаты поиска для рынка США, запрос должен идти с американского IP. Pinterest локализует контент по IP, и немецкий прокси вернёт другие пины по тому же запросу.
ProxyHat предоставляет резидентные прокси с гео-таргетингом по стране и городу. Подробности — на странице локаций ProxyHat.
Практическая реализация: Python с ProxyHat
Ниже — пример скрейпинга ленты доски Pinterest через BoardFeedResource с пагинацией по bookmark и использованием резидентного прокси ProxyHat с гео-таргетингом США и липкой сессией.
import requests
import json
import time
from urllib.parse import quote
# ProxyHat residential proxy: US geo, sticky session for csrftoken continuity
proxy = {
"http": "http://user-country-US-session-pinboard1:pass@gate.proxyhat.com:8080",
"https": "http://user-country-US-session-pinboard1:pass@gate.proxyhat.com:8080",
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Accept": "application/json",
"X-Pinterest-PWS-Handler": "www/[username]/[board].js",
"X-APP-VERSION": "a1234b",
}
board_slug = "username/board-slug"
bookmarks = [""]
all_pins = []
for page in range(10):
data_param = json.dumps({
"options": {
"board_url": f"/{board_slug}/",
"page_size": 25,
"bookmarks": bookmarks,
},
"context": {}
})
source_url = f"/{board_slug}/"
url = (
"https://www.pinterest.com/resource/BoardFeedResource/get/"
f"?source_url={quote(source_url)}&data={quote(data_param)}"
)
resp = requests.get(url, headers=headers, proxies=proxy, timeout=30)
if resp.status_code == 429:
print(f"Rate limited on page {page}, waiting 60s...")
time.sleep(60)
continue
result = resp.json()
page_data = result.get("resource_response", {}).get("data", [])
for pin in page_data:
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 "end" in str(bookmarks):
break
time.sleep(2) # pacing: 2s between requests
print(f"Collected {len(all_pins)} pins")
for pin in all_pins[:3]:
print(json.dumps(pin, indent=2))
Пример вывода для одного пина:
{
"id": "1234567890123456789",
"title": "Minimalist Home Office Setup",
"image_url": "https://i.pinimg.com/originals/ab/cd/ef/abcdef123456.jpg",
"link": "https://example.com/blog/home-office"
}
Практическая реализация: Node.js через HTTP-шлюз
Тот же паттерн на Node.js с использованием node-fetch и https-proxy-agent, подключение через HTTP-шлюз ProxyHat на порту 8080:
const fetch = require('node-fetch');
const HttpsProxyAgent = require('https-proxy-agent');
const proxyUrl = 'http://user-country-DE-session-pinsearch2:pass@gate.proxyhat.com:8080';
const agent = new HttpsProxyAgent(proxyUrl);
async function scrapeBoard(boardSlug, maxPages = 10) {
const pins = [];
let bookmarks = [''];
const headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
'Accept': 'application/json',
'X-Pinterest-PWS-Handler': 'www/[username]/[board].js',
'X-APP-VERSION': 'a1234b',
};
for (let page = 0; page < maxPages; page++) {
const dataParam = encodeURIComponent(JSON.stringify({
options: {
board_url: `/${boardSlug}/`,
page_size: 25,
bookmarks: bookmarks,
},
context: {}
}));
const sourceUrl = encodeURIComponent(`/${boardSlug}/`);
const url = `https://www.pinterest.com/resource/BoardFeedResource/get/?source_url=${sourceUrl}&data=${dataParam}`;
const resp = await fetch(url, { headers, agent, timeout: 30000 });
if (resp.status === 429) {
console.log(`Rate limited on page ${page}, backing off 60s`);
await new Promise(r => setTimeout(r, 60000));
continue;
}
const result = await resp.json();
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 || bookmarks.includes('end')) break;
await new Promise(r => setTimeout(r, 2000));
}
return pins;
}
scrapeBoard('username/board-slug').then(pins => {
console.log(`Collected ${pins.length} pins`);
console.log(JSON.stringify(pins.slice(0, 3), null, 2));
});
Пагинация, сессии и гигиена отпечатков
Bookmark-пагинация
Pinterest использует cursor-based пагинацию через поле bookmark в ответе Resource API. Каждый ответ содержит bookmark-строку, которую нужно передать в следующем запросе в массиве bookmarks внутри options. Когда bookmark содержит строку "-end-" или пуст, доска полностью пройдена.
Важно: bookmark-токены привязаны к конкретному endpoint и параметрам. Нельзя использовать bookmark от BoardFeedResource в запросе к SearchResource.
Липкие сессии для csrftoken
Если ваш скрейпер делает запросы, требующие cookie csrftoken (например, при доступе к страницам, требующим CSRF-защиту), необходимо использовать липкую сессию (sticky session), чтобы все запросы шли с одного IP-адреса. В ProxyHat это делается через флаг -session- в имени пользователя:
http://user-country-US-session-pinterest1:pass@gate.proxyhat.com:8080
Все запросы с этой строкой подключения будут маршрутизироваться через один и тот же IP-адрес, сохраняя cookie-контекст. Для нового набора запросов просто меняйте идентификатор сессии.
Pacing и частота запросов
Рекомендуемый темп — 1 запрос каждые 2–3 секунды на одну сессию/IP. Это имитирует поведение человека, просматривающего доску. Для параллельного сбора используйте несколько сессий с разными идентификаторами:
session-pinboard1session-pinboard2session-pinboard3
Каждая сессия — отдельный IP, что распределяет нагрузку и снижает риск блокировки. ProxyHat поддерживает до 100 одновременных сессий на аккаунт.
User-Agent гигиена
Используйте реалистичные User-Agent строки, соответствующие современным браузерам. Избегайте:
- Устаревших версий браузеров
- Несоответствий между User-Agent и другими заголовками (например, UA Chrome с заголовками Safari)
- Пустых или стандартных библиотечных UA (например,
python-requests/2.31.0)
Также следите за согласованностью заголовков Accept-Language с гео вашего прокси. Если прокси в Германии, Accept-Language: de-DE,de;q=0.9,en;q=0.8 выглядит естественнее, чем en-US.
Распространённые ошибки и граничные случаи
| Метод | Доступ к данным | Стабильность | Лимиты | Рекомендуется для |
|---|---|---|---|---|
| Pinterest API v5 | Свой аккаунт, ограниченный поиск | Высокая | ~1000 запросов/день (базовый) | Production, бизнес-приложения |
| Internal Resource API | Публичные пины, доски, поиск | Средняя (endpoints меняются) | Зависит от IP и отпечатка | Исследования, датасеты |
| HTML scraping | Только то, что в DOM | Низкая (частые изменения DOM) | Жёсткие anti-bot | Не рекомендуется |
Типичные ошибки при скрейпинге Pinterest:
- Игнорирование изменений
X-APP-VERSION— Pinterest периодически обновляет версию приложения. Старые версии отклоняются. Решение: периодически обновляйте значение, извлекая его из HTML целевой страницы. - Слишком высокая частота запросов — даже с резидентными прокси, более 100 запросов в минуту с одного IP-адреса вызывает блокировку. Соблюдайте pacing.
- Несоответствие гео прокси и
Accept-Language— Pinterest использует гео IP для локализации, но несоответствие заголовков повышает bot score. - Игнорирование
robots.txt— проверьте robots.txt Pinterest перед началом сбора. Уважайте правила для user-agents. - Сохранение персональных данных — данные о пользователях (имена, профили) могут подпадать под GDPR. Собирайте только неперсональные метаданные пинов: заголовки, изображения, ссылки.
Этический скрейпинг: когда использовать официальный API
Скрейпинг — это инструмент, а не стратегия. Прежде чем скрейпить Pinterest, задайте себе три вопроса:
- Доступны ли данные через официальный API? Если да — используйте API. Это надёжнее, законнее и стабильнее.
- Содержат ли данные персональную информацию? Если да — сбор может нарушать GDPR. Ограничьтесь агрегированными, неперсональными метаданными.
- Соблюдаете ли вы
robots.txt? Это базовый стандарт вежливости в веб-скрейпинге.
Для production-систем, где стабильность критична, Pinterest API v5 — правильный выбор, даже с его ограничениями. Для исследовательских задач и разового сбора датасетов Resource API с резидентными прокси — рабочий подход, но он требует постоянного мониторинга и адаптации.
Подробнее о легитимных сценариях использования прокси — в разделе web-scraping use cases и SERP tracking. Тарифы ProxyHat — на странице pricing. Документация по подключению — на docs.proxyhat.com.
Ключевые выводы
- Pinterest Resource API (BoardFeedResource, PinResource, SearchResource) — основной способ доступа к публичным пинам и доскам без авторизации.
- Резидентные прокси с гео-таргетингом обязательны: datacenter IP детектируются, а результаты поиска локализованы по гео.
- Липкие сессии (
-session-) обеспечивают непрерывность cookie и csrftoken между запросами. - Pacing 1 запрос / 2–3 секунды на сессию снижает риск блокировок до минимума.
- Bookmark-пагинация — единственный надёжный способ обхода ленты доски; оффсетная пагинация не работает.
- Для production-систем предпочитайте официальный Pinterest API v5; скрейпинг Resource API — для исследований и датасетов.
- Соблюдайте ToS Pinterest, CFAA и GDPR; собирайте только публичные неперсональные данные.
FAQ
Что такое скрейпинг пинов и досок Pinterest в 2026?
Это программный сбор публичных данных Pinterest — пинов, досок и результатов поиска — через внутренний Resource API платформы. В 2026 году Pinterest использует JSON-based Resource API с bookmark-пагинацией, гео-локализацией результатов и многоуровневой anti-bot защитой. Скрейпинг требует резидентных прокси, корректных заголовков и умеренного темпа запросов.
Зачем скрейпинг Pinterest важен для пользователей прокси?
Pinterest локализует контент по IP-адресу запросчика: результаты поиска с немецкого IP отличаются от американского. Дата-центр IP-адреса детектируются anti-bot системой и получают повышенный bot score. Резидентные прокси с гео-таргетингом (например, -country-US) решают обе проблемы: обеспечивают локализованные результаты и снижают риск блокировок, имитируя реальных пользователей.
Какой тип прокси лучше всего подходит для скрейпинга Pinterest?
Резидентные прокси с гео-таргетингом по стране и липкими сессиями. Datacenter прокси почти всегда детектируются Pinterest. Mobile прокси работают, но стоят дороже и медленнее. Резидентные прокси через ProxyHat (gate.proxyhat.com:8080) с флагами -country-US и -session-xxx обеспечивают оптимальный баланс цены, скорости и надёжности для скрейпинга Pinterest.
Как избежать блокировок при скрейпинге Pinterest?
Соблюдайте pacing (1 запрос / 2–3 секунды на сессию), используйте липкие сессии для непрерывности cookie, ротируйте сессии для распределения нагрузки, поддерживайте согласованность User-Agent и Accept-Language с гео прокси. При HTTP 429 делайте паузу 60 секунд. Не превышайте 100 запросов в минуту с одного IP. Избегайте пустых или библиотечных User-Agent строк.
Можно ли использовать официальный Pinterest API вместо скрейпинга?
Да, и для production-систем это рекомендуется. Pinterest API v5 предоставляет доступ к пинам, доскам и аналитике вашего аккаунта с базовым лимитом около 1000 запросов в день. Однако API ограничен данными вашего аккаунта и не предоставляет поиск по чужим пинам. Для сбора датасетов трендов, визуального контента конкурентов и исследовательских задач Resource API с прокси остаётся более гибким подходом.






