PinterestトレンドデータをスクレイピングしてEコマース調査を行う方法

Pinterestは需要シグナルの宝庫ですが、ページにJSONを残さないため、難しいターゲットの一つです。ここでは、レンダリング、ピンの選択、トレンドのフォロー、ヘッドレスモードでブロックされない方法を紹介します。

Pinterestは需要シグナルエンジンです:今保存されているものが次のシーズンに購入されるものを予測します。これにより、ピン、ボード、検索の提案は、Eコマースやコンテンツ調査に非常に役立ちます。また、多くのマーケットプレイスとは異なり、ページに構造化データを提供しないため、扱いにくいターゲットの一つでもあります。すべてが動的にレンダリングされ、正規表現で取り出せるきれいな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サイトとPinterestの比較図。PinterestではレンダリングしてからDOMを読む必要があります。
PinterestはJavaScriptでコンテンツを挿入するため、最初にレンダリングしてからDOMを読みます—ページJSONはありません。

ピンからトレンドシグナルへ

生のピンは最初のステップに過ぎません。研究の価値は、それらを集約して、商品化やコンテンツチームが行動できるシグナルに変えることにあります:

これらのシグナルは市場を比較することで最も強力になるため、終了IPを地理的にターゲットにします:米国の買い物客に表示されるものは英国やドイツの買い物客に表示されるものとは異なり、そのギャップがしばしば機会です。各実行を国別の住宅プロキシを通じてルーティングし、市場をデータと一緒に保存します。

トレンド作業のための実用的なヒント:固定された週次のペースで同じ検索をキャプチャし、上書きせずにすべてのスナップショットを保存します。「コテージコアキッチン」のピン数は単独では意味がありませんが、8週間にわたる上昇線は真の先行指標です—Pinterestの保存は購入に先行するため、今プラットフォームで勢いを増しているテーマは次の四半期の販売シグナルです。スナップショットが一貫していれば差分は簡単です。信頼性のある収集が重要であり、クリーンなIPと安定したセレクタが役立つのはまさにそのためです。

ヘッドレスモードを維持する

Pinterestは自動化を監視しているため、データセンターIPのブラウザでロボットの指紋があるとすぐにフラグが立ちます。セッションを健康に保つための3つの習慣:一貫した実際のUser-Agent(すでにカバー済み)、セッションごとに新しい回転する住宅IPを使用して、1つのアドレスが多数の検索に結びつかないようにし、人間らしいペースで—ロード後に短い待機、穏やかなスクロール、1000リクエストのバーストはなし。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をスケールでレンダリングする