Python Pinterest-skraping: "Pins, tavler og uendelig scrolling"

Sist oppdatert April 17, 2026
Python Pinterest-skraping: "Pins, tavler og uendelig scrolling"

For noen måneder siden viste en av utviklerne våre meg et Python-skript han hadde laget i helgen. Det skulle hente produktinspirasjonsbilder fra Pinterest til et markedsundersøkelsesprosjekt. Han kjørte det, og resultatet var … 16 pins. Fra en tavle med over 2 000. Han stirret på skjermen, så på meg, og sa: «Jeg tror Pinterest gjør narr av meg.»

Han er langt fra alene. Dette er uten tvil den vanligste frustrasjonen jeg ser hos utviklere som prøver å skrape Pinterest med Python. Du fyrer opp requests og BeautifulSoup, går til en Pinterest-URL, og får enten bare noen få elementer eller et tomt HTML-skall tilbake. Hvorfor? Pinterest er en fullverdig JavaScript-renderet single-page app — en statisk HTTP-forespørsel ser aldri det ekte innholdet. I denne guiden forklarer jeg hvorfor det skjer, hvilke metoder som faktisk fungerer (Playwright, intercept av intern API og no-code-verktøy som Thunderbit), og gir deg trinn-for-trinn-kode for å skrape pins, tavler, brukerprofiler, uendelig scrolling og bilder i full oppløsning. Enten du vil bygge en produksjonsklar scraper eller bare trenger data raskt, har denne artikkelen det du trenger.

Hva er Pinterest-skraping?

Pinterest-skraping er prosessen med å hente data fra Pinterest programmatisk — for eksempel pin-bilder, titler, beskrivelser, tavlenavn, følgertall og URL-er. I stedet for å bla manuelt og lagre én og én pin, bruker du kode (eller et verktøy) til å samle strukturert data fra søkeresultater, tavler eller brukerprofiler i stor skala.

Med over 240 milliarder Pins på plattformen og 619 millioner månedlige aktive brukere per slutten av 2025, er Pinterest en av de rikeste visuelle datakildene på nettet. For bedrifter er den typen data gull verdt — enten du følger produkttrender, sammenligner konkurrentinnhold eller bygger lister for influencer-oppfølging.

Hvorfor skrape Pinterest med Python?

Pinterest er ikke lenger bare en inspirasjonstavle for bryllupsplanleggere. Det er en seriøs plattform for forretningsinnsikt — 85% av ukentlige Pinners har kjøpt noe basert på merkevare-Pins, og 96–97% av de mest populære søkene er uten merkevare, noe som betyr at brukerne kommer med en intensjon, men uten lojalitet til et bestemt merke. Det gir en enorm mulighet til å bli oppdaget — og forklarer hvorfor så mange team ønsker strukturert Pinterest-data.

Slik ser det ut for ulike team:

TeamData som trengsForretningsverdi
E-handel / driftProduktbilder, priser, trendestetikkKonkurransedyktig prissetting, lagerstyring basert på trender
MarkedsføringTavleytelse, pin-engasjement, konkurrentinnholdInnholdsstrategi, kampanjebenchmarking
Salg / lead-genereringSkaperprofiler, følgertall, kontaktinformasjonInfluencer-arbeid, partnerutvelgelse
EiendomPins for styling av hjem, interiørtrender, romoppsettFoto til boligannonser, stylingveiledning
InnholdsskapereTrendende temaer, populære formater, sesongtemaerInnholdskalender, research på visuell stil

Og her er den store forskjellen: Pinterest sitt offisielle API er begrenset. Det krever bedriftskonto, godkjenning (inkludert en videodemonstrasjon av appen din), og gir deg kun tilgang til data fra din egen konto. Hvis du vil se offentlige tavler, søkeresultater eller konkurrentprofiler, er skraping det praktiske alternativet. Derfor velger så mange Python — eller no-code-verktøy som Thunderbit når de vil ha resultater uten oppsett.

Hvorfor BeautifulSoup alene feiler på Pinterest (og hva som faktisk fungerer)

Hvis du har prøvd å skrape Pinterest med requests + BeautifulSoup og fått 16 elementer eller en tom side, innbiller du deg ikke ting. Pinterest er bygget med React og renderer 100% av innholdet via JavaScript. Når du henter en Pinterest-URL med en vanlig HTTP-forespørsel, sender serveren bare et minimalt HTML-skall — noen få <link>- og <script>-tags, og en tom <div> der React monterer appen. Alle pin-kort, bilder, titler og rutenett legges inn først etter at JavaScript har kjørt i nettleseren.

Ingen JavaScript-kjøring = ingen pins.

Så hva fungerer? Slik sammenlignes de viktigste metodene:

TilnærmingHåndterer JS?Får med all data?KompleksitetBest for
requests + BeautifulSoupNei~0–16 elementerLavIkke egnet for Pinterest
Selenium / PlaywrightJaJa, med scroll-logikkMiddelsFull kontroll, Python-pipelines
Intercept av intern Pinterest-APIJaJa, paginert JSONHøyMaksimal datamengde, uten nettleser
Tredjeparts Scraper APIJaVariererLavSkalering uten infrastruktur
No-code-verktøy (Thunderbit)JaAI-strukturertSvært lavIkke-tekniske brukere, raske resultater

I denne guiden anbefaler jeg Playwright som Python-løsning. Den renderer JavaScript, støtter simulering av scrolling, vedlikeholdes godt (78 600+ GitHub-stjerner, med 180% vekst år over år i stillingsannonser), og er 35–45% raskere enn Selenium i benchmark-tester. Hvis du vil ha no-code-veien, tar jeg det også med.

Pinterest offisielle API vs. Python-skraping vs. no-code: hvilken vei bør du velge?

Før du begynner å skrive kode, er det verdt å spørre: trenger du egentlig det? Her er en enkel beslutningsmodell:

KriteriumPinterest APIPython-skrapingThunderbit (no-code)
Godkjenning krevesBedriftskonto + videodemonstrasjonNeiNei
Tilgang til offentlige pins/tavlerBegrenset (kun egne data)FullFull
Nedlasting av bilder i full oppløsningVariererJa, med parsing av URLJa, via bildeframskaffing
Håndterer uendelig scrollingN/AJa, med kodeAutomatisk
Vedlikehold nødvendigLavtHøyt (selektorer kan slutte å virke)Ingen (AI tilpasser seg)
Eksport til Sheets/AirtableManueltEgendefinert kodeInnebygd
OppsettstidTimer–dager30–60 min2 minutter

Hvis du er markedsfører, jobber med e-handel, eller bare vil ha Pinterest-data inn i et regneark uten å skrive eller vedlikeholde Python-skript, er Thunderbit's AI Web Scraper den raskeste veien. Du åpner en hvilken som helst Pinterest-side, klikker «AI Suggest Fields», trykker «Scrape», og eksporterer direkte til Google Sheets, Excel, Airtable eller Notion. Funksjonen for skraping av undersider kan til og med følge individuelle pin-lenker for å berike data automatisk. Jeg har sett teammedlemmer som aldri har skrevet en linje kode, hente 500+ pins inn i et Google Sheet på under tre minutter.

For lesere som vil ha full kontroll, vil integrere skraping i en Python-pipeline, eller bare liker å bygge ting selv — fortsett å lese.

Slik setter du opp Python-miljøet for Pinterest-skraping

  • Vanskelighetsgrad: Middels
  • Tidsbruk: Ca. 30–60 minutter (inkludert koding og testing)
  • Du trenger: Python 3.9+, Chrome-nettleser (for testing), tilgang til terminal/kommandolinje

Installer Playwright og avhengigheter

Først lager du en prosjektmappe og setter opp et virtuelt miljø:

mkdir pinterest-scraper
cd pinterest-scraper
python -m venv venv
source venv/bin/activate  # På Windows: venv\Scripts\activate

Installer Playwright og last ned Chromium-nettleseren:

pip install playwright
playwright install chromium

Du bruker også Python sine innebygde moduler json, os og csv for eksport av data. Ingen ekstra installasjon trengs for dem.

Struktur for prosjektmappen

Jeg anbefaler å holde det ryddig fra starten:

pinterest-scraper/
├── scraper.py
├── config.py
├── output/
│   ├── pins.json
│   └── pins.csv
└── images/
    ├── board-name-1/
    └── board-name-2/

I config.py setter du user agent-strengen din. Pinterest blokkerer standard signaturer fra headless-nettlesere, så bruk en realistisk en:

USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"

Steg 1: Bygg Pinterest-søke-URL-en

Konstruer søke-URL-en ved å sette inn søket ditt i malen:

query = "mid century modern furniture"
url = f"https://www.pinterest.com/search/pins/?q={query.replace(' ', '%20')}&rs=typed"

Du kan gjøre dette parametrisk for hvilket som helst søk. Parameteren rs=typed forteller Pinterest at spørsmålet ble skrevet inn manuelt (ikke foreslått), noe som av og til påvirker relevansen i resultatene.

Steg 2: Start en headless nettleser og last inn siden

Her er kjernen i Playwright-oppsettet. Legg merke til den tilpassede user agent-en — uten den vil Pinterest sannsynligvis blokkere deg eller vise en innloggingsmur.

import asyncio
from playwright.async_api import async_playwright
from config import USER_AGENT

async def scrape_search(query, max_pins=100):
    url = f"https://www.pinterest.com/search/pins/?q={query.replace(' ', '%20')}&rs=typed"
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page(
            user_agent=USER_AGENT,
            viewport={"width": 1920, "height": 1080}
        )
        await page.goto(url)
        await asyncio.sleep(3)  # Vent til JS har rendret de første pinnene

Etter at dette kjører, bør siden ha den første batchen med pins lastet inn — vanligvis 25–50.

Steg 3: Trekk ut pin-data fra siden

Pinterest pakker hver pin inn i en div med data-test-id='pinWrapper'. Inni finner du en lenke (<a>) med pin-URL og tittel (via aria-label), samt et <img>-element med miniatyrbildets URL.

        results = []
        pins = await page.query_selector_all("div[data-test-id='pinWrapper']")
        for pin in pins:
            link = await pin.query_selector("a")
            if not link:
                continue
            title = await link.get_attribute("aria-label") or ""
            href = await link.get_attribute("href") or ""
            img = await pin.query_selector("img")
            src = await img.get_attribute("src") if img else ""
            results.append({
                "title": title,
                "url": f"https://www.pinterest.com{href}" if href.startswith("/") else href,
                "image_url": src
            })

På dette punktet inneholder results pinnene som er synlige i første visning. For å hente flere må du scrolle — og det er her den viktigste delen kommer.

Steg 4: Lagre resultatene til JSON eller CSV

Etter uthenting skriver du dataene til filer for enkel bruk:

import json
import csv

def save_json(data, filepath="output/pins.json"):
    with open(filepath, "w", encoding="utf-8") as f:
        json.dump(data, f, ensure_ascii=False, indent=2)

def save_csv(data, filepath="output/pins.csv"):
    if not data:
        return
    with open(filepath, "w", newline="", encoding="utf-8-sig") as f:
        writer = csv.DictWriter(f, fieldnames=data[0].keys())
        writer.writeheader()
        writer.writerows(data)

Bruk utf-8-sig for CSV hvis du planlegger å åpne filen i Excel — det hindrer rare tegn i å bli ødelagt.

Slik skraper du hele Pinterest-tavler og brukerprofiler

Dette er et stort hull i mange eksisterende guider. Jeg klarte ikke å finne én eneste konkurrerende guide som går grundig gjennom skraping av tavler eller profiler — likevel er dette blant de mest etterspurte funksjonene i forumene. Brukere vil laste ned alle pins fra en tavle, organisere bilder i mapper per tavle og hente profildata som følgertall og tavlelister.

Skrap alle pins fra en tavle-URL

Tavle-URL-er følger mønsteret https://www.pinterest.com/{username}/{board-name}/. DOM-strukturen ligner søkeresultatene — pins ligger i div[data-test-id='pinWrapper'] — men du må scrolle for å laste inn alt.

async def scrape_board(board_url, max_pins=500):
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page(user_agent=USER_AGENT, viewport={"width": 1920, "height": 1080})
        await page.goto(board_url)
        await asyncio.sleep(3)

        seen_ids = set()
        all_pins = []

        for scroll_round in range(100):  # Sikkerhetsgrense
            pins = await page.query_selector_all("div[data-test-id='pinWrapper']")
            new_count = 0
            for pin in pins:
                link = await pin.query_selector("a")
                if not link:
                    continue
                href = await link.get_attribute("href") or ""
                if href in seen_ids:
                    continue
                seen_ids.add(href)
                new_count += 1
                title = await link.get_attribute("aria-label") or ""
                img = await link.query_selector("img")
                src = await img.get_attribute("src") if img else ""
                all_pins.append({
                    "title": title,
                    "url": f"https://www.pinterest.com{href}" if href.startswith("/") else href,
                    "image_url": src
                })

            print(f"Scroll {scroll_round + 1}: {len(all_pins)} unike pins samlet")
            if new_count == 0 or len(all_pins) >= max_pins:
                break

            prev_height = await page.evaluate("document.body.scrollHeight")
            await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
            await asyncio.sleep(2.5)
            curr_height = await page.evaluate("document.body.scrollHeight")
            if curr_height == prev_height:
                break  # Ingen mer innhold

        await browser.close()
        return all_pins

Én ting å passe på: Tavlesider har noen ganger en «More Ideas»-fane som skiller lagrede pins fra algoritmiske anbefalinger. Hvis du bare vil ha brukerens faktiske lagrede pins, bør du stoppe scrollingen når du møter den skiljelinjen.

Skrap en brukerprofil: tavler, følgertall og pins

Profil-URL-er ser ut som https://www.pinterest.com/{username}/. Fra en profilside kan du hente ut:

  • Følger-/følgertall: Se etter div[data-test-id='follower-count']
  • Liste over tavler: Hver tavle er et kort som lenker til /{username}/{board-name}/
  • Totalt antall pins: Vises noen ganger i profilhodet
async def scrape_profile(username):
    url = f"https://www.pinterest.com/{username}/"
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page(user_agent=USER_AGENT, viewport={"width": 1920, "height": 1080})
        await page.goto(url)
        await asyncio.sleep(3)

        # Hent følgertall
        follower_el = await page.query_selector("div[data-test-id='follower-count']")
        followers = await follower_el.inner_text() if follower_el else "N/A"

        # Hent lenker til tavler
        board_links = await page.query_selector_all("a[href*='/" + username + "/']")
        boards = []
        for bl in board_links:
            href = await bl.get_attribute("href") or ""
            name = await bl.get_attribute("aria-label") or href.split("/")[-2]
            if href.count("/") >= 3 and href != f"/{username}/":
                boards.append({"name": name, "url": f"https://www.pinterest.com{href}"})

        await browser.close()
        return {"username": username, "followers": followers, "boards": boards}

For å skrape alle pins på tvers av alle tavler på en profil, går du gjennom tavlelisten og kaller scrape_board() for hver enkelt. Du kan organisere nedlastede bilder automatisk i mapper per tavle.

Bygg en robust løsning for uendelig scrolling

Dette er delen som skiller en enkel test-scraper fra en skikkelig løsning. Det største problemet — og jeg har sett det i minst et dusin forumtråder — er at skriptene bare returnerer 16–25 elementer fordi de ikke scroller langt nok, eller fordi de bruker et fast antall scrolls som for i in range(5): scroll() og håper på det beste.

Det er upålitelig. Pinterest laster nytt innhold i batcher på omtrent 25 pins, trigget av scroll-hendelser. Hvis du scroller fem ganger, kan du få 125 pins — eller 75 hvis nettverket er tregt, eller 150 hvis batchene er små. Du trenger et smartere mønster.

Mønsteret «scroll til ingen nytt innhold»

Her er en robust scroll-funksjon som sporer unike pin-ID-er, bruker en konfigurerbar timeout, inkluderer retry-logikk og skriver fremdrift underveis:

import time
import random

async def scroll_and_collect(page, max_pins=1000, max_scrolls=200, scroll_pause=2.5):
    seen_ids = set()
    all_pins = []
    no_new_count = 0

    for i in range(max_scrolls):
        pins = await page.query_selector_all("div[data-test-id='pinWrapper']")
        new_this_round = 0

        for pin in pins:
            link = await pin.query_selector("a")
            if not link:
                continue
            href = await link.get_attribute("href") or ""
            if href in seen_ids:
                continue
            seen_ids.add(href)
            new_this_round += 1
            title = await link.get_attribute("aria-label") or ""
            img = await link.query_selector("img")
            src = await img.get_attribute("src") if img else ""
            all_pins.append({
                "title": title,
                "url": f"https://www.pinterest.com{href}" if href.startswith("/") else href,
                "image_url": src
            })

        print(f"  Scroll {i+1}: {new_this_round} nye pins | {len(all_pins)} totale unike pins")

        if len(all_pins) >= max_pins:
            print(f"  Nådde grensen for max_pins ({max_pins}). Stopper.")
            break

        if new_this_round == 0:
            no_new_count += 1
            if no_new_count >= 3:
                print("  Ingen nye pins etter 3 påfølgende scrolls. Slutt på innhold.")
                break
        else:
            no_new_count = 0

        prev_height = await page.evaluate("document.body.scrollHeight")
        await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
        await asyncio.sleep(scroll_pause + random.uniform(0.5, 1.5))
        curr_height = await page.evaluate("document.body.scrollHeight")

        if curr_height == prev_height and new_this_round == 0:
            print("  Siden har samme høyde og ingen nye pins. Trolig slutt på feeden.")
            break

    return all_pins

Hvorfor denne løsningen fungerer:

  • Deduplisering via href: Hver pins URL er unik, så vi bruker den som ID. Det hindrer at samme pin telles to ganger når DOM-en rendres på nytt under scrolling.
  • Trefeil-regel: Hvis tre scrolls på rad ikke gir noen nye pins, stopper vi. Dette håndterer situasjoner der siden fortsatt laster, men det ikke finnes mer innhold.
  • Tilfeldig variasjon i pausen: Å legge inn 0,5–1,5 sekunder tilfeldig forsinkelse mellom scrolls gjør oppførselen mer menneskelig og reduserer sjansen for å trigge anti-bot-mekanismer.
  • Sikkerhetsgrense for maks antall scrolls: Hindrer uendelige løkker hvis noe går galt.

Håndtering av edge cases

  • Brudd ved «More Ideas»: På tavlesider legger Pinterest noen ganger inn en «More Ideas»-seksjon. Hvis du bare vil ha tavlens faktiske pins, kan du sjekke etter dette elementet og stoppe scrollingen når det vises.
  • Rate limiting ved lange økter: Hvis du scroller gjennom en tavle med tusenvis av pins, kan Pinterest begynne å strupe responsene. Hvis du ser at scrolls av og til gir null nye pins (men ikke tre på rad), øk pausen til 5+ sekunder.

Slik får du Pinterest-bilder i full oppløsning (ikke miniatyrbilder)

Dette driver mange til vanvidd. Du skraper mange pins, laster ned bildene, og de er alle små 236px-miniatyrer. Brukere på forum beskriver det som «dårlig kvalitet, for liten størrelse». Løsningen er å forstå Pinterest sin bilde-URL-struktur.

Forstå banene i Pinterest sine bilde-URL-er

Alle Pinterest-bilder leveres fra https://i.pinimg.com/{size}/{hash}.jpg. Segmentet {size} styrer oppløsningen:

StistørrelseDimensjonerBruk
/236x/236px bredStandard rutenettvisning (det du får som standard)
/474x/474px bredMiddels oppløsning
/736x/736px bredPin-detalj / utvidet visning
/originals/Originale opplastingsdimensjonerFull oppløsning

Hjelpefunksjon: oppgrader en Pinterest-bilde-URL til full oppløsning

Her er en funksjon som omskriver en hvilken som helst Pinterest-bilde-URL til høyest tilgjengelig kvalitet, med fallback-logikk:

import requests as req

def upgrade_image_url(url, preferred_size="originals"):
    """Omskriv en Pinterest-bilde-URL til høyest tilgjengelige oppløsning."""
    sizes = ["originals", "736x", "474x", "236x"]
    if preferred_size not in sizes:
        preferred_size = "originals"

    for size in sizes[sizes.index(preferred_size):]:
        upgraded = url
        for s in sizes:
            upgraded = upgraded.replace(f"/{s}/", f"/{size}/")
        try:
            resp = req.head(upgraded, timeout=5, allow_redirects=True)
            if resp.status_code == 200:
                return upgraded
        except Exception:
            continue
    return url  # Returner originalen hvis alt feiler

Viktig merknad (per 2025): Banen /originals/ gir i økende grad HTTP 403 Forbidden-feil. En dokumentert feil i gallery-dl bekrefter denne oppførselen per midten av 2025. Den pålitelige maksverdien er /736x/. Funksjonen min prøver /originals/ først, og faller automatisk tilbake til /736x/.

Last ned bilder til organiserte mapper

import os
import time

def download_images(pins, folder="images/default", delay=1.5):
    os.makedirs(folder, exist_ok=True)
    for i, pin in enumerate(pins):
        img_url = upgrade_image_url(pin.get("image_url", ""), preferred_size="736x")
        if not img_url:
            continue
        filename = f"pin_{i+1}.jpg"
        filepath = os.path.join(folder, filename)
        try:
            resp = req.get(img_url, timeout=15)
            if resp.status_code == 200:
                with open(filepath, "wb") as f:
                    f.write(resp.content)
                print(f"  Lastet ned {filename} ({len(resp.content) // 1024} KB)")
            else:
                print(f"  Feilet {filename}: HTTP {resp.status_code}")
        except Exception as e:
            print(f"  Feil ved nedlasting av {filename}: {e}")
        time.sleep(delay + random.uniform(0.3, 0.8))

Legg inn en forsinkelse mellom nedlastinger. Jeg bruker 1,5–2,3 sekunder med litt variasjon. Uten det vil Pinterest blokkere IP-en din etter noen hundre forespørsler.

Eksporter Pinterest-dataene dine

Eksporter til CSV eller JSON

Vi dekket grunnlaget tidligere. For større datasett (10 000+ pins) bør du vurdere JSON Lines-format — ett JSON-objekt per linje — som er enklere å strømme og prosessere:

def save_jsonl(data, filepath="output/pins.jsonl"):
    with open(filepath, "w", encoding="utf-8") as f:
        for item in data:
            f.write(json.dumps(item, ensure_ascii=False) + "\n")

Eksporter til Google Sheets, Airtable eller Notion

Hvis du vil sende data direkte fra Python til Google Sheets, trenger du biblioteket gspread og en Google Cloud service-konto. For Airtable bruker du pyairtable. For Notion bruker du notion-client. Hver av disse krever oppsett av API-nøkler og gjør pipelinen din mer kompleks.

Eller — og her er jeg litt partisk, men dette er faktisk den raskeste veien — du kan bruke Thunderbit til å skrape Pinterest og eksportere til ett av disse målene med ett klikk. Ingen API-nøkler, ingen servicekontoer, ingen ekstra kode. Thunderbit Chrome-utvidelsen håndterer eksporten direkte.

Tips for å unngå blokkering når du skraper Pinterest

Pinterest sitt anti-bot-system har fått 6/10 i vanskelighetsgrad for omgåelse av ScrapeOps — ikke trivielt, men heller ikke det vanskeligste målet. Det bruker nettleser-fingeravtrykk, atferdsanalyse og IP-basert rate limiting. Dette fungerer:

  • Roter user agents: Bruk en pool med ekte Chrome user agent-strenger og velg en tilfeldig per sesjon.
  • Legg inn tilfeldige pauser: 2–5 sekunder mellom scrolls og forespørsler, med litt variasjon. Uten proxyer bør du øke til 10–15 sekunder.
  • Bruk realistisk skjermstørrelse: Sett viewport={"width": 1920, "height": 1080} — ikke bruk små eller rare dimensjoner.
  • Vurder proxyer for skala: Hvis du skraper tusenvis av pins, roter boligproxyer. Uten dem må du regne med IP-blokkering etter noen hundre forespørsler.
  • Respekter robots.txt: Pinterest sitt robots.txt blokkerer de fleste automatiserte crawlere og har omtrent 180 disallow-regler. Ha dette i bakhodet for etterlevelse.
  • Unngå innlogget skraping: Hold deg til offentlig synlig innhold mens du er utlogget. Skraping bak innlogging øker både juridisk og teknisk risiko.

Thunderbit håndterer anti-bot og CAPTCHA-utfordringer automatisk via AI-motoren sin — én ting mindre å vedlikeholde hvis du velger no-code.

Juridiske og etiske hensyn ved Pinterest-skraping

Jeg holder dette kort, siden det ikke er hovedfokuset i artikkelen, men det er viktig.

Pinterest sine bruksvilkår (seksjon 2a) sier at du ikke skal «scrape, collect, search, copy or otherwise access data or content from Pinterest in unauthorized ways, such as by using automated means (without our express prior permission).» Samtidig har domstoler generelt slått fast at skraping av offentlig tilgjengelige data ikke bryter Computer Fraud and Abuse Act — se hiQ v. LinkedIn og Meta v. Bright Data (jan. 2024), der retten slo fast at skraping av offentlig synlig data mens man er utlogget er lovlig.

Noen grunnregler:

  • Skrap bare offentlig synlig innhold mens du er utlogget
  • Ikke bruk skrapte data til spam eller til å utgi deg for å være andre
  • Respekter opphavsretten til bilder — hent metadata der det er mulig, og unngå å videredistribuere opphavsrettsbeskyttede bilder kommersielt uten tillatelse
  • Hvis du planlegger å bruke skrapte data kommersielt, snakk med en advokat

For en grundigere gjennomgang av det juridiske landskapet, se vår guide til juridiske konsekvenser av webskraping.

Oppsummering: hva du har lært og hva du kan gjøre videre

Nå vet du hvorfor statisk skraping feiler på Pinterest (det er en React SPA — ingen JavaScript, ingen data), hvordan du bruker Playwright til å skrape søkeresultater, tavler og brukerprofiler, hvordan du bygger en produksjonsklar løsning for uendelig scrolling som ikke gir opp etter 16 pins, og hvordan du får bilder i full oppløsning i stedet for små miniatyrer.

Kort oppsummert, dette er det viktigste:

  • requests + BeautifulSoup fungerer ikke på Pinterest. Ikke kast bort tiden din.
  • Playwright er det beste Python-verktøyet for jobben — raskt, godt støttet og håndterer JavaScript-rendering naturlig.
  • Uendelig scrolling krever en dedupliseringsbasert scroll-løkke, ikke et fast antall.
  • Bilder i full oppløsning krever omskriving av URL-stien — bruk /736x/ (siden /originals/ ofte gir 403).
  • Skraping av tavler og profiler er dårlig dekket i eksisterende guider, men ganske rett frem med riktige selektorer.
  • For ikke-utviklere eller team som vil ha fart, lar Thunderbit deg skrape Pinterest på 2 klikk og eksportere til Google Sheets, Excel, Airtable eller Notion — uten Python. Prøv gratis via Chrome-utvidelsen.

Hvis du bygger en Python-pipeline, gir koden i denne guiden deg et solid utgangspunkt. Hvis du bare trenger dataene, er Thunderbit snarveien. Uansett sitter du ikke lenger fast med 16 pins og et tomt blikk.

For mer om skraping og datauthenting, se guidene våre om hvordan webskrape med Python, beste automatiserte webskrapingsverktøy og skraping av data fra nettside til Excel. Du kan også utforske Thunderbit-priser eller se veiledninger på Thunderbit YouTube-kanal.

Vanlige spørsmål

1. Kan du skrape Pinterest med BeautifulSoup?

Ikke effektivt alene. Pinterest renderer alt innhold via JavaScript, så requests + BeautifulSoup ser bare et tomt HTML-skall. Du trenger en headless nettleser som Playwright eller Selenium for å rendre siden først, eller du kan bruke et no-code-verktøy som Thunderbit som håndterer JavaScript-rendering automatisk.

2. Hvor mange pins kan du skrape fra Pinterest i én økt?

Det avhenger av scroll-logikken din og hvordan du håndterer anti-bot. Med den produksjonsklare scroll-løsningen i denne guiden (deduplisering, timeout, retry-logikk) kan du pålitelig skrape hundrevis til tusenvis av pins per tavle eller søk. For svært store tavler må du regne med flere minutter med scrolling og uthenting.

3. Hvorfor blir de skrapede Pinterest-bildene mine så små?

Som standard serverer Pinterest /236x/-miniatyrer i rutenettvisningen. For høyere oppløsning må du omskrive bilde-URL-en til /736x/ eller /originals/. Merk at /originals/ i økende grad returnerer 403-feil fra og med 2025, så /736x/ er den pålitelige maksverdien.

4. Er det lovlig å skrape Pinterest?

Skraping av offentlig tilgjengelige data er generelt akseptert under nyere rettsavgjørelser (for eksempel hiQ v. LinkedIn, Meta v. Bright Data), men Pinterest sine bruksvilkår forbyr uautorisert automatisert tilgang. Hold deg til offentlig innhold, ikke bruk skrapte data til spam, respekter opphavsrett og snakk med juridisk rådgiver ved kommersiell bruk.

5. Hva er det beste no-code-alternativet for å skrape Pinterest?

Thunderbit's AI Web Scraper kan hente ut Pinterest-data — titler, bilder, URL-er, beskrivelser — med 2 klikk, og har innebygd eksport til Google Sheets, Excel, Airtable eller Notion. Den håndterer JavaScript-rendering, uendelig scrolling og anti-bot-utfordringer automatisk, så du slipper å skrive eller vedlikeholde kode.

Les mer

Shuai Guan
Shuai Guan
CEO i Thunderbit | Ekspert på AI-drevet dataautomatisering Shuai Guan er CEO i Thunderbit og utdannet ingeniør fra University of Michigan. Med nærmere ti års erfaring innen teknologi og SaaS-arkitektur, spesialiserer han seg på å gjøre avanserte AI-modeller om til praktiske verktøy for datauttrekk uten koding. På denne bloggen deler han ærlige, velprøvde innsikter om webskraping og automatiseringsstrategier som hjelper deg å bygge smartere, datadrevne arbeidsflyter. Når han ikke optimaliserer dataflyt, bruker han det samme skarpe blikket for detaljer i sin lidenskap for fotografi.
Innholdsfortegnelse

Hent en nettside bare ved å spørre

Si hva du trenger på vanlig norsk. Eller enda bedre, si ingenting i det hele tatt.

Prøv Thunderbit gratis
Hent data med AI
Overfør enkelt data til Google Sheets, Airtable eller Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week