bi kullanıcının PIN lediği 403 resimden 249 tanesini çekebildim.
Arama da çıkan sonuçları, kişinin pinlediği resimleri farketmeksizin, vereceğiniz pinterest url sindeki resimleri çeker
Pinterest pano URL: [url]https://tr.pinterest.com/[/url]... Kaç resim indirilsin? (hepsi için boş bırak):python çalışıtıryıorsunuz, login olup enter a basıyorsunuz ardından orijinal boyutlarından webp bakıp jpg olarak kaydediyor.
tamamını indirememiş olsa da 403 te 249 çok iyi bir rakam.
Searcha yazdığım bi kelime için 2200 indirme yaptı.
ihtiyacı olanlar için :
import os
import re
import time
import requests
from playwright.sync_api import sync_playwright
SAVE_DIR = "downloads"
def highest_quality(url):
# webp80/originals → düz jpg'ye çevir
url = re.sub(r"https://i\.pinimg\.com/webp80/originals/", "https://i.pinimg.com/originals/", url)
url = re.sub(r"https://i\.pinimg\.com/webp80/\d+x/", "https://i.pinimg.com/originals/", url)
# Thumbnail boyutlarını originals'a çevir
url = re.sub(r"/\d+x/", "/originals/", url)
url = url.replace("/236x/", "/originals/")
url = url.replace("/474x/", "/originals/")
url = url.replace("/564x/", "/originals/")
# .webp uzantısını .jpg yap
url = re.sub(r"\.webp$", ".jpg", url)
return url
HEADERS = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"Referer": "https://www.pinterest.com/",
"Accept": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8",
"Accept-Language": "tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7",
"sec-fetch-dest": "image",
"sec-fetch-mode": "no-cors",
"sec-fetch-site": "cross-site",
}
def download(url, path):
try:
r = requests.get(url, headers=HEADERS, timeout=30)
if r.status_code == 200:
with open(path, "wb") as f:
f.write(r.content)
return True
else:
print(f" ✗ {r.status_code}: {url}")
except Exception as e:
print(f" ✗ hata: {e}")
return False
def main(board_url, limit=None):
os.makedirs(SAVE_DIR, exist_ok=True)
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page(viewport={"width": 1400, "height": 900})
print("Pinterest açılıyor...")
page.goto("https://www.pinterest.com/login/", wait_until="domcontentloaded", timeout=60000)
print("\n⏳ Giriş yap, sonra terminal'e dön ve Enter'a bas...")
input(" [Enter] = hazır, devam et: ")
print(f"Pano açılıyor: {board_url}")
page.goto(board_url, wait_until="domcontentloaded", timeout=60000)
time.sleep(3)
print("Tüm pinler yükleniyor...")
last_height = 0
same_count = 0
scroll_round = 0
seen = set()
urls = []
while True:
# Scroll sırasında mevcut resimleri topla (virtual DOM'dan kaybolmadan önce)
imgs = page.locator("img").evaluate_all(
"els => els.map(e => e.src).filter(Boolean)"
)
for url in imgs:
if "pinimg.com" not in url:
continue
url = highest_quality(url)
if url not in seen:
seen.add(url)
urls.append(url)
page.mouse.wheel(0, 20000)
time.sleep(2.5)
height = page.evaluate("document.body.scrollHeight")
scroll_round += 1
print(f" scroll #{scroll_round} — yükseklik: {height}px, toplam url: {len(urls)}")
if height == last_height:
same_count += 1
else:
same_count = 0
last_height = height
if same_count >= 8:
break
browser.close()
if limit:
urls = urls[:limit]
print(f"{len(urls)} benzersiz resim bulundu.")
count = 1
for url in urls:
ext = ".jpg"
if ".png" in url:
ext = ".png"
# webp varsa jpg olarak kaydet (zaten URL'de dönüştürüldü)
filename = os.path.join(SAVE_DIR, f"{count:04d}{ext}")
if download(url, filename):
print(f"✓ {filename}")
count += 1
print("Tamamlandı.")
if __name__ == "__main__":
board = input("Pinterest pano URL: ").strip()
limit_str = input("Kaç resim indirilsin? (hepsi için boş bırak): ").strip()
limit = int(limit_str) if limit_str.isdigit() else None
main(board, limit)