2026'da Pinterest Pinleri ve Panoları Nasıl Scrape Edilir

Pinterest'in dahili Resource API'sini kullanarak pinleri, pano beslemelerini ve arama sonuçlarını scrape etmek için geliştirici rehberi. Rotasyonlu residential proxy'ler, sayfalama ve anti-bot stratejileri dahildir.

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

2026'da Pinterest pinleri ve panoları nasıl scrape edilir sorusu, görsel içerik ve trend veri setleri oluşturan geliştiriciler için giderek daha kritik hâle geliyor. Pinterest, milyarlarca pin ve pano barındıran bir görsel keşif platformudur ve bu içeriklerin önemli bir kısmı herkese açıktır. Ancak platform, otomatik erişime karşı katı anti-bot mekanizmaları uygular; bu nedenle başarılı bir Pinterest scraper kurmak, doğru proxy stratejisi, dahili API bilgisine ve dikkatli pacing gerektirir.

Yasal Uyarı: Bu rehber yalnızca herkese açık, kişisel olmayan pin verilerine erişimi ele alır. Pinterest'in Kullanım Şartları'na, ABD'de CFAA'ya ve AB'de GDPR'ye uygun davranmanız zorunludur. Login duvarı arkasındaki kişisel verileri toplamayın, robots.txt kurallarına saygı gösterin ve üretim ortamında resmi Pinterest API v5'i tercih edin.

2026'da Pinterest Pinleri ve Panoları Nasıl Scrape Edilir: Temel Yaklaşım

Pinterest'de scrape edilebilir üç ana herkese açık yüzey vardır: pin sayfaları (tek bir pinin görüntülendiği sayfa), pano beslemeleri (bir kullanıcı panosundaki pinlerin listesi) ve arama sonuçları. Bu yüzeylerin HTML'i, sunucu tarafında render edilmiş olsa da, asıl yapısal veri Pinterest'in dahili Resource API'si üzerinden JSON formatında gelir.

Buna karşılık, ana sayfa beslemesi (home feed) login duvarı arkasındadır ve kişiselleştirilmiş öneri algoritmalarıyla çalışır. Bu nedenle anonim erişilemez ve bu rehberin kapsamı dışındadır.

Resmi Pinterest API v5 ile Sınırlar

Pinterest, resmi olarak Pinterest API v5'i sunar. Ancak bu API öncelikli reklam ve iş hesapları için tasarlanmıştır. Ücretsiz tier'da günlük istek limitleri düşüktür (yaklaşık 10 istek/dakika yazma, okuma için sınırlı kotalar) ve pin arama, pano keşfi gibi özellikler kısıtlıdır. Görsel trend veri seti oluşturmak için gereken ölçekte (günde on binlerce pin) resmi API yetersiz kalır.

YöntemErişilebilir VeriRate LimitAnti-Bot RiskiUygun Senaryo
Resmi API v5Sahip olduğunuz pinler/panolarDüşük (~10/dk)YokÜretim, kendi hesabınız
Resource API (scrape)Herkese açık pinler, panolar, aramaOrta-YüksekYüksekTrend araştırması, veri seti
HTML ScrapeSınırlı, kırılganDüşükÇok YüksekÖnerilmez

Pinterest'in Dahili Resource API'sini Anlamak

Pinterest'in web arayüzü, sayfa yüklendikten sonra veriyi dahili Resource API uç noktalarından çeker. Bu uç noktalar /resource/<ResourceName>/get/ formatındadır. En yaygın kullanılanlar:

  • PinResource — tek bir pinin detaylarını döner (/resource/PinResource/get/)
  • BoardFeedResource — bir panodaki pinlerin listesini sayfalı olarak döner
  • SearchResource — arama sorgusu sonuçlarını döner

Bu uç noktalara istek atarken iki önemli parametre gerekir:

  • ?source_url= — kullanıcının "bulunduğu" sayfanın URL yolu (örneğin /board/username/board-name/)
  • data= — URL-encoded JSON parametresi; içinde options nesnesi ve sayfalama için bookmarks alanı bulunur

Gerekli HTTP başlıkları şunlardır:

X-Pinterest-PWS-Handler: www\[username, board\].js
X-APP-VERSION: 9b8c7a6 (herkesçe açık sürüm hash'i)
csrftoken: <cookie'ten alınan token>
User-Agent: Mozilla/5.0 ... (gerçek bir tarayıcı UA'sı)
Accept: application/json

csrftoken, Pinterest'in ilk sayfa ziyaretinde set ettiği bir çerezdir. Resource API isteklerinde bu token'ı göndermeniz gerekir. Bu, sticky session kullanımını zorunlu kılar — aynı IP ve çerez setini korumak için proxy tarafında -session- bayrağı kullanmalısınız.

Anti-Bot Gerçekleri ve Neden Rotasyonlu Residential Proxy Gerekir

Pinterest, IP başına istek hızını sıkı şekilde sınırlar. Tek bir IP'den dakikada 50–100 istek'i aşan trafik, bot skorlama sistemine takılır ve sonuç olarak 403 veya 429 yanıtları alırsınız. Ayrıca Pinterest'in arama ve öneri sonuçları coğrafi olarak lokalizedir — bir Almanya IP'sinden yapılan arama ile bir ABD IP'sinden yapılan arama farklı pinler döner.

Bu nedenle, doğru Pinterest scraper kurulumu için şu proxy özellikleri gerekir:

  • Residential proxy'ler: Veri merkezi IP'leri Pinterest tarafından kolayca tespit edilir ve bloke edilir. Residential IP'ler gerçek İSS'lerden gelir ve bot skorlamasında daha düşük risk taşır.
  • Coğrafi hedefleme: -country-US veya -country-DE bayrakları ile arama sonuçlarının tutarlılığını sağlayın.
  • IP rotasyonu: Her istekte yeni IP alarak per-IP rate limit'i aşın; ancak csrftoken sürekliliği için sticky session kullanın.

ProxyHat'in residential proxy ağı, 100+ lokasyon üzerinde coğrafi hedefleme sunar. Fiyatlandırma sayfası'nda trafik bazlı paketleri inceleyebilirsiniz.

Python ile BoardFeedResource Sayfalama Örneği

Aşağıdaki örnek, bir Pinterest panosundaki pinleri BoardFeedResource üzerinden sayfalı olarak çeker. ProxyHat HTTP gateway'i üzerinden rotasyonlu residential proxy kullanır.

import requests
import json
from urllib.parse import quote

PROXY = "http://user-country-US-session-pin001:PASSWORD@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": "www\\[username, board\\].js",
    "X-APP-VERSION": "9b8c7a6",
    "X-Requested-With": "XMLHttpRequest",
}

def fetch_board_pins(username, board_slug, max_pages=10):
    base_url = "https://www.pinterest.com/resource/BoardFeedResource/get/"
    bookmarks = []
    all_pins = []

    # Önce ana sayfayı ziyaret et ve csrftoken al
    session = requests.Session()
    session.proxies = PROXIES
    session.headers.update(HEADERS)
    board_page = f"https://www.pinterest.com/{username}/{board_slug}/"
    session.get(board_page)
    csrf = session.cookies.get("csrftoken", "")
    session.headers["X-CSRFToken"] = csrf

    for page in range(max_pages):
        options = {
            "board_id": "",
            "board_url": f"/{username}/{board_slug}/",
            "page_size": 25,
            "current_page": page,
            "bookmarks": bookmarks,
        }
        data_param = quote(json.dumps({"options": options, "context": {}}))
        source_url = quote(f"/{username}/{board_slug}/")
        params = {"source_url": source_url, "data": data_param}

        resp = session.get(base_url, params=params, timeout=30)
        if resp.status_code != 200:
            print(f"Sayfa {page}: HTTP {resp.status_code} — duraklatılıyor")
            break

        payload = resp.json()
        pins = payload.get("resource_response", {}).get("data", [])
        if not pins:
            break

        for pin in pins:
            all_pins.append({
                "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", ""),
            })

        bookmarks = payload.get("resource_response", {}).get("bookmark", [])
        if not bookmarks:
            break

    return all_pins

pins = fetch_board_pins("username", "board-name", max_pages=5)
print(f"Toplam {len(pins)} pin çekildi")
for p in pins[:3]:
    print(json.dumps(p, indent=2, ensure_ascii=False))

Bu örnekte dikkat edilecek noktalar: -session-pin001 bayrağı, tüm isteklerde aynı IP'yi koruyarak csrftoken sürekliliğini sağlar. Eğer 429 hatası alırsanız, session ID'yi değiştirin (örneğin -session-pin002) ve 60 saniye bekleyin.

Node.js ile HTTP Gateway Üzerinden Pinterest Arama

Aşağıdaki Node.js örneği, ProxyHat'in gate.proxyhat.com:8080 HTTP gateway'i üzerinden SearchResource uç noktasını çağırır:

const axios = require('axios');
const HttpsProxyAgent = require('https-proxy-agent');

const proxyUrl = 'http://user-country-US-session-search01:PASSWORD@gate.proxyhat.com:8080';
const agent = new HttpsProxyAgent(proxyUrl);

const 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': 'www\\[search\\].js',
  'X-APP-VERSION': '9b8c7a6',
  'X-Requested-With': 'XMLHttpRequest',
};

async function searchPins(query, maxPages = 5) {
  const client = axios.create({ httpsAgent: agent, timeout: 30000 });
  let bookmarks = [];
  const results = [];

  // İlk sayfa ziyareti ile csrftoken al
  const pageResp = await client.get('https://www.pinterest.com/search/pins/?q=' + encodeURIComponent(query), { headers });
  const csrf = (pageResp.headers['set-cookie'] || [])
    .find(c => c.startsWith('csrftoken='))
    ?.split('=')[1]?.split(';')[0] || '';
  headers['X-CSRFToken'] = csrf;

  for (let page = 0; page < maxPages; page++) {
    const options = {
      query,
      scope: 'pins',
      page_size: 25,
      bookmarks,
    };
    const dataParam = encodeURIComponent(JSON.stringify({ options, context: {} }));
    const sourceUrl = encodeURIComponent(`/search/pins/?q=${encodeURIComponent(query)}`);

    const resp = await client.get('https://www.pinterest.com/resource/SearchResource/get/', {
      params: { source_url: sourceUrl, data: dataParam },
      headers,
    });

    if (resp.status !== 200) {
      console.log(`Sayfa ${page}: HTTP ${resp.status} — duraklatılıyor`);
      break;
    }

    const data = resp.data.resource_response?.data || [];
    if (!data.length) break;

    data.forEach(pin => {
      results.push({
        id: pin.id,
        title: pin.title || pin.grid_title || '',
        image_url: pin.images?.orig?.url || '',
        link: pin.link || '',
      });
    });

    bookmarks = resp.data.resource_response?.bookmark || [];
    if (!bookmarks.length) break;

    await new Promise(r => setTimeout(r, 2000)); // 2 saniye pacing
  }

  return results;
}

searchPins('minimalist interior design', 3)
  .then(pins => console.log(JSON.stringify(pins, null, 2)))
  .catch(err => console.error('Hata:', err.message));

Sayfalama, Sticky Session ve Fingerprint Riski

Bookmark/Cursor Sayfalama

Pinterest, sayfalama için geleneksel offset yerine bookmark tabanlı cursor sayfalama kullanır. Her Resource API yanıtı, bir bookmark alanı içerir. Bir sonraki sayfa için bu bookmark'ı options.bookmarks alanına koymanız gerekir. Bookmark boş bir dizi dönerse, son sayfaya ulaşmışsınız demektir.

Bookmark'lar opak string'lerdir — içeriğini parse etmeye çalışmayın, sadece sonraki isteğe iletin.

Sticky Session ile csrftoken Sürekliliği

csrftoken, Pinterest'in ilk sayfa ziyaretinde set ettiği bir çerezdir. Resource API isteklerinde bu token'ı göndermeniz gerekir. Eğer her istekte IP değişirse, token geçersiz hâle gelebilir. Bu nedenle ProxyHat kullanıcı adında -session-abc123 bayrağını kullanın:

# Aynı IP ve session'ı koru
http://user-country-US-session-myboard01:PASSWORD@gate.proxyhat.com:8080

Session ID'yi pano başına benzersiz yapın (örneğin -session-board-kitchen-ideas). Bu, her pano için ayrı bir IP ve çerez seti kullanmanızı sağlar.

Pacing ve Rate Limit Yönetimi

Pinterest'in per-IP rate limit'ini aşmamak için her istek arasında 1.5–3 saniye bekleme öneririz. Aşağıdaki pacing stratejilerini kullanın:

  • Sabit gecikme: Her istek arasına 2 saniye koyun (basit, etkili).
  • Rastgele gecikme: 1.5–4 saniye arası rastgele bekleme (daha doğal görünüm).
  • Üstel geri çekilme: 429 aldıysanız, 30 → 60 → 120 saniye bekle ve session ID'yi değiştir.

ProxyHat ile 100 eşzamanlı oturum çalıştırabilirsiniz — her session farklı bir IP kullanır. Bu, toplam throughput'u artırırken per-IP rate limit'i aşmaz. Daha fazla bilgi için web scraping kullanım senaryosu sayfamıza bakın.

User-Agent ve Fingerprint Hygiene

Pinterest, User-Agent başlığındaki tutarsızlıkları bot sinyali olarak değerlendirir. Aşağıdaki kurallara uyun:

  • Tek bir session boyunca aynı User-Agent'ı kullanın — değiştirmeyin.
  • Gerçek bir tarayıcı UA'sı kullanın; python-requests/2.x gibi varsayılan UA'ları asla göndermeyin.
  • Accept, Accept-Language, Accept-Encoding başlıklarını gerçek tarayıcı değerleriyle eşleştirin.
  • JavaScript çalıştırmadığınız için sec-ch-ua başlıklarını göndermeyin — bu, başlık ile davranış arasında tutarsızlık yaratır ve bot skorunu artırır.

Etik Scraping ve Resmi API Kullanımı

Pinterest scrape etmeden önce şu etik soruları kendinize sorun:

  • Veri herkese açık mı? Login gerektirmeyen pinler, panolar ve arama sonuçları genellikle herkese açıktır.
  • Veri kişisel mi? Bir pinin açıklaması veya yorumları kişisel veri içerebilir. GDPR kapsamında kişisel veri toplamak yasal yükümlülükler doğurur.
  • Robots.txt'ye saygı duyuyor musunuz? Pinterest'in robots.txt dosyasını kontrol edin ve engellenen yolları scrape etmeyin.
  • Resmi API yeterli mi? Eğer sadece kendi hesabınızın verilerine veya sınırlı sayıda pin bilgisine ihtiyacınız varsa, Pinterest API v5'i kullanın. Daha güvenilir, rate limit'leri net ve ToS'a tam uyumludur.

Üretim sistemleri için tavsiyemiz: önce resmi API'yi deneyin, yetersiz kaldığında ve yalnızca herkese açık veri için scrape yapın. SERP takibi ve trend analizi için SERP tracking kullanım senaryomuzu inceleyebilirsiniz. ProxyHat kurulum detayları için dokümantasyon'a başvurun.

Key Takeaways:

  • Pinterest'in dahili Resource API'si (/resource/<Name>/get/) herkese açık pin, pano ve arama verisini JSON olarak döner.
  • csrftoken sürekliliği için ProxyHat -session- bayrağı ile sticky session kullanın.
  • Per-IP rate limit (~50–100 istek/dakika) aşmamak için 1.5–3 saniye pacing uygulayın.
  • Arama ve öneri sonuçları lokalize olduğundan -country-US gibi coğrafi hedefleme kullanın.
  • Üretim için resmi Pinterest API v5'i tercih edin; scrape yalnızca herkese açık veri için son çare olsun.

SSS

Aşağıda, Pinterest scraping ile ilgili en sık sorulan soruları yanıtlıyoruz.

Başlamaya hazır mısınız?

148+ ülkede 50M+ konut IP'sine AI destekli filtreleme ile erişin.

Fiyatlandırmayı GörüntüleKonut Proxy'leri
← Bloga Dön