전자상거래 연구를 위한 Pinterest 트렌드 데이터 스크래핑 방법

Pinterest는 수요 신호의 금광이며, 페이지에 JSON을 남기지 않기 때문에 더 어려운 대상 중 하나입니다. 여기서는 렌더링, 핀 선택, 트렌드 추적 및 헤드리스 모드에서 차단되지 않도록 하는 방법을 설명합니다.

Pinterest는 수요 신호 엔진입니다: 사람들이 지금 저장하는 것이 다음 시즌에 구매할 것을 예측하므로, 핀, 보드 및 검색 제안이 전자상거래 및 콘텐츠 연구에 진정으로 유용합니다. 또한 대부분의 마켓플레이스와 달리 페이지에 구조화된 데이터를 제공하지 않기 때문에 더 다루기 어려운 대상 중 하나입니다. 모든 것이 동적으로 렌더링되며, 정리된 JSON 블롭이 없습니다. 즉, 먼저 렌더링한 다음 DOM을 읽어야 합니다. 이 가이드는 렌더링 및 선택 방법, 트렌드 및 키워드 신호를 채굴하는 방법, 그리고 헤드리스 모드에서 차단되지 않도록 하는 프록시 및 헤더 선택을 다룹니다. Pinterest의 약관을 준수하고 공개 데이터를 사용하세요.

여기서 숨겨진 JSON 트릭이 작동하지 않는 이유

많은 사이트에서 데이터가 소스의 JavaScript 변수에 있으므로 단일 평문 요청과 정규 표현식으로 충분합니다. Pinterest는 모든 콘텐츠를 클라이언트 측에서 생성하고 페이지에 이러한 구조를 남기지 않습니다. 원시 HTML을 다운로드하면 핀이 포함되어 있지 않으며, JavaScript가 실행된 후에 주입됩니다. 따라서 신뢰할 수 있는 접근 방식은 페이지를 로드하고 콘텐츠를 기다린 다음 라이브 DOM에서 추출하는 헤드리스 브라우저(Playwright가 잘 작동함)입니다. 핀은 깊이 중첩되어 있지만 일관되게 표시됩니다: 각각은 data-test-id="pinWrapper"가 있는 div 안에 있으며, 이는 해시된 클래스 이름보다 훨씬 안정적인 훅입니다.

렌더링 및 핀 선택

가장 중요한 세부 사항: 실제 데스크톱 User-Agent를 설정하세요. 헤드리스 모드에서 Pinterest는 기본 자동화 UA를 즉시 차단하며, 일반 Chrome 문자열을 사용하는 것이 빈 목록과 전체 페이지의 차이를 만드는 경우가 많습니다. 검색 URL을 로드하고 콘텐츠가 렌더링될 시간을 준 다음 모든 핀 래퍼를 쿼리하고 각 핀의 제목, URL 및 썸네일을 가져오세요.

import asyncio, json
from playwright.async_api import async_playwright

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

PROXY = {"server": "http://gate.quantumproxies.io:8000",
         "username": "USER", "password": "PASS"}

async def scrape_pins(query):
    url = f"https://www.pinterest.com/search/pins/?q={query}&rs=typed"
    results = []
    async with async_playwright() as p:
        browser = await p.chromium.launch(proxy=PROXY)
        page = await browser.new_page(user_agent=UA)   # real UA is mandatory
        await page.goto(url, timeout=30000)
        await page.wait_for_timeout(2500)              # let pins render
        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
            img = await link.query_selector("img")
            results.append({
                "title": await link.get_attribute("aria-label"),
                "url": await link.get_attribute("href"),
                "img": await img.get_attribute("src") if img else None,
            })
        await browser.close()
    return results

pins = asyncio.run(scrape_pins("minimalist home office"))
print(len(pins), "pins")

이는 트렌드 작업에 필요한 기본 요소를 제공합니다: 핀 제목(핀너가 직접 작성한 풍부하고 설명적인 텍스트), 대상 URL 및 썸네일입니다. 첫 번째 뷰포트보다 더 많은 것을 원한다면 선택하기 전에 페이지를 루프에서 스크롤하세요 — Pinterest는 진행하면서 지연 로드합니다.

숨겨진 JSON 사이트와 DOM을 읽기 전에 렌더링이 필요한 Pinterest를 비교하는 다이어그램
Pinterest는 JavaScript로 콘텐츠를 주입하므로 먼저 렌더링하고 DOM을 읽습니다 — 페이지 JSON이 없어 이를 단축할 수 없습니다.

핀에서 트렌드 신호로

원시 핀은 첫 번째 단계에 불과합니다. 연구 가치는 이를 집계하여 상품화 또는 콘텐츠 팀이 실행할 수 있는 신호로 만드는 데 있습니다:

이러한 신호는 시장을 비교할 때 가장 강력하므로, 종료 IP를 지리적으로 타겟팅하세요: 미국 쇼핑객에게 나타나는 것이 영국이나 독일 쇼핑객과 다르며, 그 차이가 종종 기회입니다. 각 실행을 국가별 주거용 프록시를 통해 라우팅하고 데이터를 시장과 함께 저장하세요.

트렌드 작업을 위한 실용적인 팁 하나: 고정된 주간 주기로 동일한 검색을 캡처하고 덮어쓰지 않고 모든 스냅샷을 저장하세요. "cottagecore kitchen"에 대한 핀 수는 고립된 상태에서는 아무 의미가 없지만, 8주 동안 상승하는 선은 진정한 선행 지표입니다 — Pinterest 저장은 구매에 앞서므로, 지금 플랫폼에서 모멘텀을 얻고 있는 테마는 다음 분기의 상품화 신호입니다. 일관된 스냅샷을 가지고 있으면 차이점을 찾는 것은 사소한 일입니다; 신뢰할 수 있게 수집하는 것이 중요하며, 이는 바로 깨끗한 IP와 안정적인 선택기가 도움이 되는 부분입니다.

헤드리스 모드를 유지하는 방법

Pinterest는 자동화를 감시하므로, 데이터센터 IP와 로봇 지문을 가진 브라우저는 빠르게 플래그됩니다. 세 가지 습관이 세션을 건강하게 유지합니다: 일관된 실제 User-Agent(이미 다룸), 세션당 신선한 회전 주거용 IP를 사용하여 하나의 주소가 수십 개의 검색에 연결되지 않도록 하고, 인간적인 속도 — 로드 후 짧은 대기, 부드러운 스크롤링, 수천 개의 요청 폭발 없음. JavaScript가 많은 사이트 스크래핑에 대한 가이드가 렌더링 및 프록시 조합을 깊이 다루며, 동일한 차단 방지 위생은 다른 소셜 플랫폼에도 적용됩니다 — 공개 Instagram 데이터 스크래핑을 참조하세요.

소셜 스크래핑에 적합한 주거용 IP 확보

브라우저 플릿이 더 이상 가치가 없을 때

모든 페이지를 렌더링하는 것은 느리고 비용이 많이 듭니다 — 헤드리스 브라우저는 시간과 대역폭 모두에서 평문 요청보다 페이지당 비용이 훨씬 더 많이 듭니다. 연구 규모에서는 그 비용이 누적됩니다. Scraper API는 필요에 따라 렌더링하고 구조화된 데이터를 반환하여 브라우저 플릿, 프록시 회전 및 차단 처리 없이 분석에 시간을 투자할 수 있게 해줍니다. 또한 빠른 DOM 스크래핑으로 놓칠 수 있는 팔로워 수, 저장 및 댓글 수, 카테고리 및 해시태그와 같은 더 풍부한 필드를 가져옵니다.

Pinterest 스크래핑을 위한 해야 할 일과 피해야 할 일 체크리스트, 실제 User-Agent 및 주거용 IP 회전 포함
실제 User-Agent와 회전 주거용 IP는 필수입니다 — 기본 헤드리스 UA는 즉시 차단됩니다.

자주 묻는 질문

Python으로 Pinterest를 어떻게 스크래핑하나요?

Pinterest는 JavaScript로 콘텐츠를 렌더링하고 원시 HTML에 데이터를 남기지 않기 때문에 평문 요청보다는 Playwright와 같은 헤드리스 브라우저를 사용하세요. 실제 데스크톱 User-Agent를 설정하고, 검색 또는 보드 URL을 로드하고, 핀이 렌더링될 때까지 기다린 다음, 각 div[data-test-id="pinWrapper"]를 선택하고 제목, URL 및 이미지를 읽으세요.

Pinterest에 공개 API가 있나요?

Pinterest는 비즈니스 및 개발자 계정을 위한 공식 API를 제공하지만, 이는 범위가 제한되고, 속도 제한이 있으며, 네트워크 전반에 걸친 광범위한 트렌드 연구보다는 자신의 콘텐츠 및 광고 관리를 중심으로 합니다. 틈새 시장 및 시장 전반의 공개 핀, 보드 및 검색 트렌드 데이터를 위해 대부분의 연구원은 공개 페이지를 렌더링합니다.

Pinterest가 내 스크래퍼를 차단하는 이유는 무엇인가요?

가장 일반적인 두 가지 원인은 Pinterest가 즉시 차단하는 기본 헤드리스 User-Agent와 많은 빠른 요청에 연결된 데이터센터 IP입니다. 둘 다 수정하세요: 일반 Chrome UA를 보내고, 세션당 주거용 IP를 회전시키고, 요청을 대기 및 스크롤링으로 속도를 조절하여 폭발적으로 발사하지 마세요.

Pinterest 스크래핑은 합법적인가요?

공개적으로 보이는 데이터를 수집하는 것은 법적 회색 영역에 있으며 관할권, 목적 및 Pinterest의 서비스 약관에 따라 다릅니다. 공개 핀 및 보드에만 집중하고, 개인 데이터 및 로그인 뒤에 있는 것은 피하고, 상업적 사용을 위해 법률 자문을 구하세요. 이는 일반 정보이며, 법률 자문이 아닙니다.

Pinterest는 인내를 보상합니다: 페이지를 렌더링하고, 안정적인 핀 래퍼를 타겟팅하고, 설명 제목 및 검색 제안을 트렌드 신호로 집계하고, 지문 및 IP를 깨끗하게 유지하세요. 시장별로 그렇게 하면 대부분의 경쟁자가 주목하지 않는 수요의 선행 지표를 얻을 수 있습니다.

Scraper API로 Pinterest를 대규모로 렌더링하세요