Wie man Pinterest im Jahr 2025 scrapen kann

Lernen Sie, wie Sie mit Python, Headless Browsern und automatisierten Scraper-APIs dynamische Pinterest-Daten extrahieren können, um schnelle, skalierbare Ergebnisse zu erzielen.
9 min lesen
How to Scrape Pinterest blog image

Das Extrahieren von Daten aus Pinterest unterscheidet sich von den meisten HTML-Scraping-Aufgaben. Pinterest generiert alle seine Inhalte dynamisch und hinterlässt keine Datenstrukturen wie JSON auf der Seite.

Wenn du dich entschließt, mitzumachen, erfährst du, wie du mit den folgenden Methoden Pinterest-Daten sammeln kannst:

  • Extrahieren von Pinterest-Daten mit Playwright
  • Extrahieren von Pinterest-Daten mit der Scraper-API von Bright Data

Was können Sie extrahieren?

Wenn Sie sich Pinterest in Ihrem Browser ansehen, sind alle Pins tief in einem div-Element mit data-test-id="pinWrapper" verschachtelt.

Stift inspizieren

Wenn wir alle diese Objekte auf der Seite finden, können wir alle ihre Daten extrahieren, z. B:

  • Der Titel der einzelnen Pins.
  • Die Url, die direkt auf die Stecknadel zeigt.
  • Das Bild der Stecknadel aus den Suchergebnissen.

Scraping Pinterest mit Playwright

Erste Schritte

Es gibt eine Menge großartiger Scraping-Bibliotheken in Python, und wir werden Playwright verwenden. Zunächst müssen Sie sicherstellen, dass Sie Playwright installiert haben. Sie können die Dokumentation hier einsehen. Playwright ist einer der besten verfügbaren Headless-Browser.

Dramatiker installieren

pip install playwright

Playwright’s Browsers installieren

playwright install

Kratzen der eigentlichen Pins

Schauen wir uns nun an, wie wir die eigentlichen Pins von Pinterest abrufen. Im folgenden Code erstellen wir zwei Funktionen, scrape_pins() und main(). scrape_pins() öffnet einen Browser und extrahiert Daten von Pinterest. main() wird als Einstiegspunkt für die asynchrone Laufzeit verwendet.

import asyncio
from playwright.async_api import async_playwright
import json

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"


async def scrape_pins(query):
    search_url = f"https://www.pinterest.com/search/pins/?q={query}&rs=typed"
    scraped_data = []

    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page(user_agent=user_agent)
        response = await page.goto(search_url)
        await asyncio.sleep(2)
        try:
            #find the pins on the page
            pins = await page.query_selector_all("div[data-test-id='pinWrapper']")

            #iterate through the pins and extract data
            for pin in pins:
                title_link = await pin.query_selector("a")
                pin_url = await title_link.get_attribute("href")
                title = await title_link.get_attribute("aria-label")
                img = await title_link.query_selector("img")
                img_src = await img.get_attribute("src")

                extracted_data = {
                    "title": title,
                    "url": pin_url,
                    "img": img_src
                }
                #add the data to our results
                scraped_data.append(extracted_data)
        except:
            print(f"Failed to scrape pins at {search_url}")
        finally:
            await browser.close()
    #everything has finished, return our scraped data
    return scraped_data

async def main():
    search_query = "office"
    office_results = await scrape_pins(search_query)

    with open(f"{search_query}-results.json", "w") as file:
        try:
            json.dump(office_results, file, indent=4)
        except Exception as e:
            print(f"Failed to save results: {e}")

if __name__ == "__main__":
    asyncio.run(main())

scrape_pins() führt bei unserem Scrape die folgenden Schritte durch:

  • Erstellen Sie unsere Url: search_url.
  • Erstellen Sie ein Array, um unsere Ergebnisse zu speichern, scraped_data.
  • Öffnen Sie eine neue Browser-Instanz.
  • Legen Sie einen benutzerdefinierten user_agent fest, um im Headless-Modus zu arbeiten. Ohne diesen wird Pinterest uns blockieren.
  • Mit asyncio.sleep(2) warten wir zwei Sekunden, bis der Inhalt geladen ist.
  • Wir finden alle sichtbaren Pins auf der Seite mit diesem Selektor: div[data-test-id='pinWrapper'].
  • Für jeden Pin werden die folgenden Daten extrahiert:
    • Titel: Der Titel der Stecknadel.
    • url: Die Url, die direkt zum Pin führt.
    • img: Das Bild des Pins, das in den Suchergebnissen angezeigt wird.

Hier sind einige Beispieldaten aus dem oben genannten Playwright-Scraper.

[
    {
        "title": "A minimalist office featuring a soothing color palette of whites, greys, and natural wood accents, creating a calm and spacious feel3",
        "url": "/pin/10203536650743650/",
        "img": "https://i.pinimg.com/236x/b3/21/e2/b321e2485da40c0dde2685c3a4fdcb56.jpg"
    },
    {
        "title": "a home office with two desks and an open door that leads to the outside",
        "url": "/pin/261912534574291013/",
        "img": "https://i.pinimg.com/236x/56/f1/29/56f129512885e1b3c9971b16f9445c9a.jpg"
    },
    {
        "title": "home office decor, blakc home office, dark home office, moody home office, small home office",
        "url": "/pin/60094976273327121/",
        "img": "https://i.pinimg.com/236x/ba/75/c9/ba75c9be7e635cce3ee80acdf70d6f9f.jpg"
    },
    {
        "title": "an office with a desk, chair and bookshelf in the middle of it",
        "url": "/pin/599682506666665720/",
        "img": "https://i.pinimg.com/236x/57/66/1d/57661dc80bebda3dfe946c070ee8ed13.jpg"
    },
    {
        "title": "a home office with green walls and plants on the shelves, along with a computer desk",
        "url": "/pin/1147080967585091410/",
        "img": "https://i.pinimg.com/236x/ce/e8/b7/cee8b74151b29605a80e0f61898c249d.jpg"
    },

Scraping von Pinterest mit der Bright Data Scraper API

Mit unserer Pinterest Scraper API können Sie diesen Prozess vollständig automatisieren und müssen sich keine Gedanken über Headless-Browser, Selektoren oder ähnliches machen!

Bright Data Pinterest Scraper

Stellen Sie sicher, dass Sie Python Requests installiert haben.

Installationsanfragen

pip install requests

Nachdem Sie Ihren API-Aufruf eingerichtet haben, können Sie ihn über Python auslösen. Im Folgenden finden Sie auch zwei Funktionen: get_pins() und poll_and_retrieve_snapshot().

  • get_pins(): Diese Funktion benötigt neben Ihrem api_key ein Schlüsselwort. Sie erstellt und sendet dann eine Anfrage an unsere Scraper-API. Diese Anfrage löst ein Scrapen von Pinterest für Ihr gewünschtes Keyword aus.
  • poll_and_retrieve_snapshot() nimmt Ihren api_key und die snapshot_id. Sie prüft dann alle 10 Sekunden, ob der Schnappschuss bereit ist. Sobald der Snapshot bereit ist, werden die Daten heruntergeladen und die Funktion wird beendet.
import requests
import json
import time

#function to trigger the scrape
def get_pins(api_key, keyword):
    url = "https://api.brightdata.com/datasets/v3/trigger"
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    }
    params = {
        "dataset_id": "gd_lk0sjs4d21kdr7cnlv",
        "include_errors": "true",
        "type": "discover_new",
        "discover_by": "keyword",
    }
    data = [
        {"keyword":keyword},
    ]
    #trigger the scrape
    response = requests.post(url, headers=headers, params=params, json=data)
    #return the snapshot_id
    return response.json()["snapshot_id"]

def poll_and_retrieve_snapshot(api_key, snapshot_id, output_file="snapshot-data.json"):
    #create the snapshot url
    snapshot_url = f"https://api.brightdata.com/datasets/v3/snapshot/{snapshot_id}?format=json"
    headers = {
        "Authorization": f"Bearer {api_key}"
    }

    print(f"Polling snapshot for ID: {snapshot_id}...")

    while True:
        response = requests.get(snapshot_url, headers=headers)

        if response.status_code == 200:
            print("Snapshot is ready. Downloading...")
            snapshot_data = response.json()
            #write the snapshot to a new json file
            with open(output_file, "w", encoding="utf-8") as file:
                json.dump(snapshot_data, file, indent=4)
            print(f"Snapshot saved to {output_file}")
            break
        elif response.status_code == 202:
            print("Snapshot is not ready yet. Retrying in 10 seconds...")
        else:
            print(f"Error: {response.status_code}")
            print(response.text)
            break

        time.sleep(10)


if __name__ == "__main__":

    API_KEY = "YOUR-BRIGHT-DATA-API-KEY"
    KEYWORD = "office"
    
    snapshot_id = get_pins(API_KEY, KEYWORD)
    poll_and_retrieve_snapshot(API_KEY, snapshot_id)

Hier sind einige Beispieldaten aus der heruntergeladenen Datei. Da unsere Trigger-Anforderung "include_errors" hatte : "true" war, enthielt die Datei auch Pins mit Fehlern. Die folgenden Beispieldaten enthalten zwei Fehlerpins sowie zwei Pins mit guten Daten.

[
    {
        "post_type": null,
        "timestamp": "2025-02-17T15:26:17.248Z",
        "input": {
            "url": "https://www.pinterest.com/pin/jh46IGe2",
            "discovery_input": {
                "keyword": "office"
            }
        },
        "warning": "Bad input. Wrong id!",
        "warning_code": "dead_page",
        "discovery_input": {
            "keyword": "office"
        }
    },
    {
        "post_type": null,
        "timestamp": "2025-02-17T15:26:18.757Z",
        "input": {
            "url": "https://www.pinterest.com/pin/4471026676503806548",
            "discovery_input": {
                "keyword": "office"
            }
        },
        "warning": "Bad input. Page does not exist.",
        "warning_code": "dead_page",
        "discovery_input": {
            "keyword": "office"
        }
    },
    {
        "url": "https://www.pinterest.com/pin/929782285570058239",
        "post_id": "929782285570058239",
        "title": "Essential Tips for Designing a Functional Small Office Space: Maximize Efficiency",
        "content": "17 Smart Tips for Designing a Productive Small Office Space",
        "date_posted": "2025-02-06T15:00:47.000Z",
        "user_name": "wellnesswink",
        "user_url": "https://www.pinterest.com/wellnesswink",
        "user_id": "929782422978147260",
        "followers": 232,
        "likes": 0,
        "categories": [
            "Explore",
            "Home Decor"
        ],
        "attached_files": [
            "https://i.pinimg.com/originals/c8/c0/d5/c8c0d5fb45352e40535db4510049a142.jpg"
        ],
        "image_video_url": "https://i.pinimg.com/originals/c8/c0/d5/c8c0d5fb45352e40535db4510049a142.jpg",
        "video_length": 0,
        "post_type": "image",
        "comments_num": 0,
        "discovery_input": {
            "keyword": "office"
        },
        "timestamp": "2025-02-17T15:26:19.502Z",
        "input": {
            "url": "https://www.pinterest.com/pin/929782285570058239",
            "discovery_input": {
                "keyword": "office"
            }
        }
    },
    {
        "url": "https://www.pinterest.com/pin/889812838892568569",
        "post_id": "889812838892568569",
        "title": "20 Modern Masculine Home Office Design Ideas for Men",
        "content": "Explore 25 chic home office decor ideas that blend style and functionality. Create a workspace you love and boost your productivity effortlessly!",
        "date_posted": "2025-01-27T07:11:38.000Z",
        "user_name": "artfullhouses",
        "user_url": "https://www.pinterest.com/artfullhouses",
        "user_id": "889812976285233957",
        "followers": 10,
        "likes": 0,
        "categories": [
            "Explore",
            "Home Decor"
        ],
        "attached_files": [
            "https://i.pinimg.com/originals/f1/cb/f7/f1cbf7b127db2bef2306ba19ffcc0646.png"
        ],
        "image_video_url": "https://i.pinimg.com/originals/f1/cb/f7/f1cbf7b127db2bef2306ba19ffcc0646.png",
        "video_length": 0,
        "hashtags": [
            "Mens Desk Decor",
            "Chic Home Office Decor",
            "Mens Desk",
            "Home Office Ideas For Men",
            "Office Ideas For Men",
            "Masculine Home Office Ideas",
            "Masculine Home Office",
            "Masculine Home",
            "Chic Home Office"
        ],
        "post_type": "image",
        "comments_num": 0,
        "discovery_input": {
            "keyword": "office"
        },
        "timestamp": "2025-02-17T15:26:20.069Z",
        "input": {
            "url": "https://www.pinterest.com/pin/889812838892568569",
            "discovery_input": {
                "keyword": "office"
            }
        }
    },

Wie Sie sehen können, sammelt die Scraper-API viel mehr Daten als der ursprüngliche Scraper, den wir mit Playwright entwickelt haben. Unsere API durchsucht Pinterest nach Ihrem Schlüsselwort und sammelt dann alle einzelnen Pins, die sie dabei findet.

Bequemlichkeit ist nicht der einzige Vorteil, den wir aus diesem Ansatz ziehen. Unsere Pinterest Scraper API extrahiert Ihre Daten zu extrem niedrigen Kosten. Unsere gesamte Ergebnisdatei war fast 45.000 Zeilen lang und kostete nur 0,97 $.

Pinterest Scrape Kosten

Jemanden zu beauftragen, einen Scraper von gleicher Qualität zu erstellen, würde wahrscheinlich mehrere hundert Dollar kosten und Sie müssten tagelang auf Ihre Daten warten. Mit unserer Scraper-API erhalten Sie Ihre Daten innerhalb von Minuten zu einem Bruchteil der Kosten.

Schlussfolgerung

Das Extrahieren von Daten aus Pinterest muss nicht schwierig sein. Ob Sie Ihren eigenen Scraper mit Playwright erstellen oder sich für eine vollautomatische Lösung wie unseren Pinterest Scraper entscheiden, hängt von Ihren Bedürfnissen ab.

Für eine schnelle, zuverlässige und skalierbare Pinterest-Datenextraktion macht die Scraper-API von Bright Data den Umgang mit Headless Browsern, Proxies und CAPTCHAs überflüssig und liefert mühelos strukturierte Daten.

✅ S chnellere Ergebnisse – Sie erhalten Daten in Minuten, nicht in Stunden
Kosteneffizient – Sie zahlen nur für das, was Sie extrahieren
Keine Wartung – Sie müssen sich nicht mit blockierten Anfragen herumschlagen

Starten Sie noch heute Ihre kostenlose Testversion und optimieren Sie Ihr Pinterest-Scraping mit der Web Scraper API von Bright Data!