Comment scraper les pins et boards Pinterest en 2026 : Guide développeur avec proxies

Apprenez à scraper les pins, boards et résultats de recherche Pinterest en 2026 avec des proxies résidentiels rotatifs. Inclut des exemples Python et Node.js, la pagination par bookmark et les bonnes pratiques anti-blocage.

How to Scrape Pinterest Pins and Boards in 2026: A Developer's Guide
Dans cet article

Avertissement légal : Le scraping de Pinterest ne doit concerner que des données publiques et non personnelles. Respectez les Conditions d'utilisation de Pinterest, le Computer Fraud and Abuse Act (CFAA) aux États-Unis et le RGPD dans l'Union européenne. N'accédez jamais à des données login-walled sans autorisation. Privilégiez l'API officielle pour les cas d'usage en production.

Vous voulez construire un jeu de données de tendances visuelles à partir de Pinterest — pins, boards, résultats de recherche — mais vous butez sur les rate limits, les CAPTCHAs et les blocages d'IP. Ce guide explique comment scraper les pins et boards Pinterest en 2026 de manière fiable, avec des exemples de code exécutables et des proxies résidentiels rotatifs. Nous couvrons les surfaces publiques, l'API interne Resource de Pinterest, les stratégies anti-blocage et les limites éthiques.

Comprendre les surfaces de données Pinterest : public vs login-walled

Pinterest expose plusieurs surfaces de données, mais toutes ne sont pas accessibles sans authentification :

  • Pins publics — visibles sur les pages de pins individuelles (/pin/{id}/) sans connexion. Incluent titre, description, image, lien source et board parent.
  • Boards publics — feeds de pins accessibles sur /{username}/{board_slug}/ sans login. Paginés via l'API interne BoardFeedResource.
  • Résultats de recherche/search/pins/?q={query} retourne des pins publics, mais le contenu est localisé (les résultats varient par pays).
  • Home feed et recommandations personnalisées — login-walled. Nécessitent un compte connecté ; leur scraping viole généralement les Conditions d'utilisation.

L'API officielle Pinterest v5 existe, mais elle reste limitée : elle donne accès aux boards et pins de votre propre compte, pas à la recherche publique de pins de tiers. Pour construire des datasets de tendances visuelles sur des pins publics tiers, l'API interne non documentée est la seule voie réaliste — d'où l'importance d'un scraping responsable et mesuré.

L'API interne Resource de Pinterest : anatomy d'un endpoint

Pinterest utilise une architecture d'API interne appelée « Resource API ». Tous les endpoints suivent le même schéma :

GET /resource/{ResourceName}/get/?source_url={url_encoded_path}&data={url_encoded_json}

Les trois endpoints les plus utiles pour le scraping de données publiques :

  • PinResource/resource/PinResource/get/ — récupère un pin individuel par ID.
  • BoardFeedResource/resource/BoardFeedResource/get/ — pagine les pins d'un board public.
  • SearchResource/resource/SearchResource/get/ — exécute une recherche de pins publics.

Le paramètre data contient un objet JSON encodé en URL avec les paramètres de pagination. Par exemple, pour BoardFeedResource :

{"options":{"board_id":"1234567890","page_size":25,"bookmarks":["bookmark-cursor-string"]}}

Les headers requis pour que l'API réponde correctement :

HeaderRôleExemple
X-Pinterest-PWS-HandlerIdentifie le handler côté serveurwww/[username]/[board_slug].js
X-APP-VERSIONVersion du frontend (change régulièrement)9ab3c4f
csrftokenToken anti-CSRF, lié au cookie csrftokenValeur du cookie csrftoken

Le csrftoken est défini dans un cookie Set-Cookie lors de la première requête. Il doit être réutilisé dans les requêtes suivantes avec le même IP — d'où l'importance des sessions sticky.

Anti-bot : rate limits, bot scoring et localisation géographique

Pinterest applique plusieurs couches de protection :

  • Rate limits par IP — environ 50–100 requêtes par minute par IP avant soft-block (HTTP 429 ou page de défi).
  • Bot scoring — Pinterest école les patterns de navigation (headers, TLS fingerprint, cadence). Un User-Agent incohérent ou l'absence de headers navigateur augmente le score.
  • Localisation — les résultats de recherche et les recommandations de pins sont géolocalisés. Une requête depuis une IP française renvoie des résultats différents d'une IP américaine.

Pour scraper Pinterest de manière fiable, les proxies résidentiels rotatifs avec géo-ciblage sont essentiels. Les datacenter proxies sont rapidement détectés car leurs plages d'IP appartiennent à des AS connus (AWS, OVH, DigitalOcean). Les IPs résidentielles proviennent de FAI réels et ont un score de confiance beaucoup plus élevé.

Le géo-ciblage est crucial : si vous voulez des tendances visuelles pour le marché US, forcez -country-US dans votre identifiant proxy. Pour le marché français, utilisez -country-FR.

Comparaison des types de proxies pour le scraping Pinterest

TypeDétectionVitesseGéo-ciblageCoût approx.Recommandé pour Pinterest
DatacenterÉlevéeRapide (50–100ms)Limité$0.5–$2 / GBNon — blocage rapide
Résidentiel rotatifFaibleMoyen (200–500ms)Pays / ville$3–$8 / GBOui — recherche & boards
Mobile 4G/5GTrès faibleVariablePays / opérateur$10–$20 / GBOui — haute fiabilité

Consultez notre page de tarification pour les options disponibles.

Exemple Python : paginer BoardFeedResource via ProxyHat

Cet exemple récupère les pins d'un board public avec pagination par bookmark, en utilisant le proxy HTTP ProxyHat sur gate.proxyhat.com:8080 et une session sticky pour préserver le csrftoken.

import requests
import json
from urllib.parse import quote

# Configuration ProxyHat — session sticky pour continuité du csrftoken
proxy_url = "http://user-country-US-session-pinterest01:pass@gate.proxyhat.com:8080"
proxies = {"http": proxy_url, "https": proxy_url}

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",
    "X-Pinterest-PWS-Handler": "www/[username]/[board_slug].js",
    "X-APP-VERSION": "9ab3c4f",
    "Referer": "https://www.pinterest.com/",
}

board_id = "1234567890"
bookmarks = []
all_pins = []

for page in range(5):  # max 5 pages = ~125 pins
    data_param = json.dumps({
        "options": {
            "board_id": board_id,
            "page_size": 25,
            "bookmarks": bookmarks,
        }
    })
    url = (
        "https://www.pinterest.com/resource/BoardFeedResource/get/"
        f"?source_url=/%2F&data={quote(data_param)}"
    )

    resp = requests.get(url, headers=headers, proxies=proxies, timeout=30)
    if resp.status_code == 429:
        print(f"Rate limit atteint page {page}, pause 60s")
        break

    payload = resp.json()
    resource_resp = payload.get("resource_response", {})
    pins = resource_resp.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 = resource_resp.get("bookmark")
    if not bookmarks:
        break  # fin de pagination

    import time; time.sleep(2)  # pacing entre pages

print(f"{len(all_pins)} pins récupérés")
for p in all_pins[:3]:
    print(json.dumps(p, indent=2))

Chaque pin renvoyé contient un id (string), un title, un images.orig.url (URL de l'image en pleine résolution) et un link (URL source canonique). Le champ bookmark dans la réponse contient le curseur de pagination à renvoyer dans la requête suivante.

Exemple Node.js : recherche de pins via SearchResource

Cet exemple utilise le proxy HTTP ProxyHat sur le port 8080 pour exécuter une recherche de pins publics et extraire les premiers résultats.

const axios = require("axios");
const querystring = require("querystring");

const proxyUrl = "http://user-country-US-session-pinterest02:pass@gate.proxyhat.com:8080";

async function searchPins(query, pageSize = 25) {
  const dataParam = JSON.stringify({
    options: {
      query,
      page_size: pageSize,
      bookmarks: [],
    },
  });

  const params = querystring.stringify({
    source_url: `/search/pins/?q=${encodeURIComponent(query)}`,
    data: dataParam,
  });

  const config = {
    url: `https://www.pinterest.com/resource/SearchResource/get/?${params}`,
    method: "GET",
    proxy: {
      host: "gate.proxyhat.com",
      port: 8080,
      auth: {
        username: "user-country-US-session-pinterest02",
        password: "pass",
      },
    },
    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",
      "X-Pinterest-PWS-Handler": "www/search/pins.js",
      "X-APP-VERSION": "9ab3c4f",
      "Referer": "https://www.pinterest.com/",
    },
    timeout: 30000,
  };

  try {
    const resp = await axios(config);
    const pins = resp.data.resource_response.data || [];
    return pins.map((p) => ({
      id: p.id,
      title: p.title || "",
      image_url: p.images?.orig?.url || "",
      link: p.link || "",
    }));
  } catch (err) {
    console.error("Erreur:", err.response?.status, err.message);
    return [];
  }
}

(async () => {
  const results = await searchPins("minimalist home decor 2026");
  console.log(`${results.length} pins trouvés`);
  results.slice(0, 3).forEach((p) => console.log(JSON.stringify(p, null, 2)));
})();

Avec axios, la directive proxy route tout le trafic HTTP via le gateway ProxyHat. L'authentification est envoyée en Basic Auth dans le header Proxy-Authorization.

Pagination par bookmark, sessions sticky et hygiène anti-fingerprint

Bookmark / cursor pagination

Pinterest n'utilise pas de pagination par offset (page=2). Chaque réponse contient un champ bookmark (ou resource_response.bookmark) — une chaîne opaque à renvoyer dans options.bookmarks de la requête suivante. Quand bookmark est vide ou null, la pagination est terminée.

Conservez les bookmarks entre les pages dans la même session sticky. Un changement d'IP en milieu de pagination peut invalider le bookmark et provoquer des doublons ou des erreurs 403.

Sessions sticky via -session-

Ajoutez -session-{id} dans votre identifiant proxy pour maintenir la même IP sortante pendant toute la durée d'une tâche de scraping :

http://user-country-US-session-pinterest01:pass@gate.proxyhat.com:8080

La session reste active tant que vous gardez le même ID de session. Utilisez un ID différent par tâche parallèle pour répartir les requêtes sur plusieurs IPs.

Pacing et cadence

  • Insérez un délai de 2–5 secondes entre chaque page.
  • Limitez à 50 requêtes/minute par session/IP pour rester sous le radar.
  • Évitez les bursts de requêtes simultanées — un humain ne charge pas 10 pages en 1 seconde.

User-Agent et headers

Utilisez un User-Agent de navigateur réel et cohérent (Chrome, Firefox, Safari). Ne mélangez pas un UA Chrome avec des headers Accept Firefox. Incluez systématiquement :

  • Accept: application/json
  • Accept-Language: en-US,en;q=0.9 (ou fr-FR selon le géo)
  • Referer: https://www.pinterest.com/
  • Sec-Fetch-Dest: empty, Sec-Fetch-Mode: cors

Le csrftoken doit être extrait du cookie de la première réponse et réinjecté dans le header csrftoken des requêtes suivantes. Utilisez un requests.Session() en Python ou un cookie jar en Node.js pour gérer cela automatiquement.

Erreurs courantes et edge cases

  • HTTP 429 (Too Many Requests) — rate limit atteint. Augmentez le délai ou changez de session proxy.
  • HTTP 403 ou page de défi — bot scoring élevé. Vérifiez vos headers et changez d'IP résidentielle.
  • Réponse vide ou resource_response.data = [] — bookmark invalide ou board privé. Vérifiez que le board est bien public.
  • X-APP-VERSION obsolète — Pinterest met à jour cette valeur régulièrement. Inspectez une requête réelle dans le navigateur pour récupérer la version courante.
  • Résultats de recherche localisés — si vous scrapez depuis une IP non-US, les résultats peuvent différer. Forcez -country-US pour des résultats cohérents.

Scraping éthique et quand utiliser l'API officielle

Le scraping de Pinterest doit respecter des limites claires :

  • Données publiques uniquement — pins, boards et résultats de recherche visibles sans connexion. N'accédez jamais aux home feeds, recommandations personnalisées ou données de comptes privés.
  • Données non personnelles — évitez de collecter des informations identifiantes (profils utilisateurs, données de localisation personnelle) au-delà de ce qui est strictement nécessaire.
  • Respectez robots.txt — consultez https://www.pinterest.com/robots.txt avant de scraper un chemin.
  • Volume modéré — ne répliquez pas la base de données entière de Pinterest. Un dataset de tendances nécessite quelques milliers de pins, pas des millions.
  • Préférez l'API officielle en production — si votre cas d'usage le permet (gestion de vos propres boards, analytics de votre compte), utilisez l'API Pinterest v5 qui est stable, documentée et conforme aux Conditions d'utilisation.

Pour des cas d'usage de recherche de pins publics tiers (tendances visuelles, datasets de design, analyse de marché), le scraping de l'API interne reste la seule option, mais doit être fait avec parcimonie et respect.

Points clés à retenir

  • Pinterest expose trois surfaces publiques scrapables : pins individuels, boards publics et résultats de recherche. Le home feed est login-walled.
  • L'API interne Resource (/resource/{Name}/get/) accepte un paramètre data JSON encodé en URL et nécessite les headers X-Pinterest-PWS-Handler, X-APP-VERSION et csrftoken.
  • La pagination se fait par bookmark — pas d'offset. Conservez la même session sticky pour ne pas invalider le curseur.
  • Les proxies résidentiels avec géo-ciblage (-country-US) sont indispensables : les datacenter proxies sont bloqués en minutes.
  • Pacing de 2–5s entre pages, max 50 req/min par IP, User-Agent cohérent avec les headers.
  • En production, préférez l'API officielle v5 quand elle couvre votre cas d'usage.

Pour aller plus loin, consultez notre guide de scraping web, notre cas d'usage SERP tracking, la liste des localisations proxy disponibles, et la documentation ProxyHat.

Questions fréquentes

Comment scraper les pins et boards Pinterest en 2026 ?

Pour scraper Pinterest en 2026, utilisez l'API interne Resource de Pinterest (PinResource, BoardFeedResource, SearchResource) avec les headers requis (X-Pinterest-PWS-Handler, X-APP-VERSION, csrftoken). Paginez via le champ bookmark de la réponse. Utilisez des proxies résidentiels rotatifs avec géo-ciblage pour éviter les blocages, et maintenez une session sticky pour préserver le csrftoken entre les pages.

Pourquoi scraper Pinterest nécessite-t-il des proxies résidentiels ?

Pinterest applique des rate limits par IP (environ 50–100 requêtes/minute) et un bot scoring qui détecte rapidement les IPs datacenter (AWS, OVH, DigitalOcean). Les proxies résidentiels proviennent de FAI réels et ont un score de confiance élevé. De plus, les résultats de recherche Pinterest sont localisés géographiquement, donc le géo-ciblage (ex. -country-US) est nécessaire pour obtenir des résultats cohérents.

Quel type de proxy fonctionne le mieux pour scraper Pinterest ?

Les proxies résidentiels rotatifs avec géo-ciblage sont le meilleur compromis pour Pinterest : faible détection, géo-ciblage par pays/ville, et coût modéré ($3–$8/GB). Les proxies mobiles 4G/5G offrent la meilleure fiabilité mais sont plus coûteux ($10–$20/GB). Les proxies datacenter sont déconseillés car leurs plages d'IP sont rapidement identifiées et bloquées par Pinterest.

Comment éviter les blocages quand on scrape Pinterest ?

Pour éviter les blocages : utilisez des proxies résidentiels avec sessions sticky, maintenez un pacing de 2–5 secondes entre les pages, limitez à 50 requêtes/minute par IP, utilisez un User-Agent de navigateur réel et cohérent avec les headers Accept, incluez le csrftoken dans toutes les requêtes, et forcez le géo-ciblage pays pour des résultats localisés cohérents.

L'API officielle Pinterest v5 suffit-elle pour scraper des pins publics ?

Non. L'API officielle Pinterest v5 donne accès principalement aux boards et pins de votre propre compte, pas à la recherche de pins publics de tiers. Pour construire des datasets de tendances visuelles sur des pins publics tiers, l'API interne Resource non documentée reste la seule option. Cependant, pour les cas d'usage de gestion de compte ou d'analytics, l'API v5 est préférable car elle est stable, documentée et conforme aux Conditions d'utilisation.

Prêt à commencer ?

Accédez à plus de 50M d'IPs résidentielles dans plus de 148 pays avec filtrage IA.

Voir les tarifsProxies résidentiels
← Retour au Blog