Как скрейпить пины и доски Pinterest в 2026: руководство для разработчиков

Практическое руководство по скрейпингу публичных пинов и досок Pinterest через внутренний Resource API с резидентными прокси. Примеры кода на Python и Node.js, пагинация, антибот-защита и этические рекомендации.

How to Scrape Pinterest Pins and Boards in 2026: A Developer's Guide
В этой статье

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 это критически важно по двум причинам:

  1. Снижение bot score — запросы с резидентных IP не помечаются как подозрительные при умеренной частоте.
  2. Гео-консистентность — если вам нужны результаты поиска для рынка США, запрос должен идти с американского 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-pinboard1
  • session-pinboard2
  • session-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, задайте себе три вопроса:

  1. Доступны ли данные через официальный API? Если да — используйте API. Это надёжнее, законнее и стабильнее.
  2. Содержат ли данные персональную информацию? Если да — сбор может нарушать GDPR. Ограничьтесь агрегированными, неперсональными метаданными.
  3. Соблюдаете ли вы 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 с прокси остаётся более гибким подходом.

Часто задаваемые вопросы

Что такое скрейпинг пинов и досок 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 с прокси остаётся более гибким подходом.

Готовы начать?

Доступ к более чем 50 млн резидентных IP в 148+ странах с AI-фильтрацией.

Смотреть ценыРезидентные прокси
← Вернуться в Блог