取引所APIを超えた暗号通貨とNFT市場データのスクレイピング

取引所APIはレート制限があり、リストされているコインのみをカバーしています。DEXペア、NFTのフロア価格やミントカレンダーは、ボット検出の背後にあるJavaScriptが多用されたページに存在します。これらを確実に収集する方法をご紹介します。

暗号通貨市場データは簡単に見えるかもしれませんが、実際にはすべての取引所がAPIを持っています。しかし、それらのAPIはレート制限があり、取引所がリストしている資産のみをカバーし、アルファが多く存在する2つの場所については何も言及していません:分散型取引所(DEX)のペアとNFTマーケットプレイスです。価格トラッカー、リスティングボット、代替データフィードを構築している場合、APIの上限にすぐに達し、残りをスクレイピングする必要があります。このガイドでは、暗号通貨とNFTデータの層、APIとスクレイピングの使い分け、リアルタイムフィードを維持するプロキシ設定について説明します。これはデータ収集に関するものであり、投資アドバイスではありません。

市場データの3層

データを3つの層で考えてみましょう。中央集権型取引所とアグリゲーターデータ — 価格、市場キャップ、流通供給量、24時間取引量、1時間/24時間/7日間の変化 — はCoinMarketCapやCoinGeckoのようなサイトが提供しており、最も簡単に取得できます。DEXデータ — ライブペア価格、流動性、新規リスティング — はJavaScriptでレンダリングされたページに存在し、クリーンな無料APIはほとんどありません。NFTデータ — フロア価格、リスティング数、ミントカレンダー — はクライアントサイドでレンダリングされ、ボット検出が行われるマーケットプレイスページにあります。ほとんどのプロジェクトは少なくともこれらの層のうち2つを必要とするため、APIだけではカバーできません。

アグリゲーターAPIから始める

トップオブブックのCEXデータには、まずパブリックアグリゲーターAPIを使用してください — 無料のJSONで、迅速かつすでに正規化されています。問題はレート制限です:無料のティアは、1分あたりのコール数を控えめに制限しており、数百の資産を頻繁にポーリングする瞬間に崩壊します。できるだけ少ないコールで大量のスナップショットを取得し、APIがカバーしないロングテールをスクレイピングします。

import requests

# one call returns the top 100 by market cap, already normalised
r = requests.get(
    "https://api.coingecko.com/api/v3/coins/markets",
    params={"vs_currency": "usd", "order": "market_cap_desc",
            "per_page": 100, "page": 1},
    timeout=15,
)
for c in r.json()[:5]:
    print(c["symbol"], c["current_price"],
          c["total_volume"], c["price_change_percentage_24h"])

無料のレート制限を超えたら、リクエストを回転するIPに分散させ、IPごとのキャップが上限にならないようにします。アグリゲーターエンドポイントはAPIのようで寛容なので、高速なデータセンタープロキシがここでは経済的な選択です — 安価で迅速、ポーリングを並列化して制限を超えないようにするのに十分です。

暗号通貨データのための取引所APIとスクレイピングの比較図、レート制限とDEXペアおよびNFTフロア価格のカバー範囲を示す
アグリゲーターAPIはクリーンなCEXデータを迅速に提供しますが、制限があり、DEXペアやNFTをスキップします — スクレイピングはまさにそのギャップを埋めます。

DEXペアと取引所ページ:JavaScriptをレンダリングする

DEXペアページや多くの取引所市場ページは、攻撃的なボット検出の背後でJavaScriptを使用して価格やチャートを描画します — 生のHTTPリクエストでは空のシェルしか得られません。ライブペア価格、流動性、またはトークンの完全な取引ビューを読むには、プロキシを通じてヘッドレスブラウザでページをレンダリングします。価格要素を待つのではなく、固定のスリープを使用し、実行ごとに出口IPを回転させ、エンドポイントが繰り返し訪問者を指紋化しないようにします。

from playwright.sync_api import sync_playwright

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

def pair_price(url, selector):
    with sync_playwright() as p:
        browser = p.chromium.launch(proxy=PROXY)
        page = browser.new_page()
        page.goto(url, wait_until="networkidle", timeout=30000)
        page.wait_for_selector(selector)          # wait for the price to render
        price = page.inner_text(selector)
        browser.close()
        return price

これらを多くレンダリングする場合、ブラウザフリートの維持とプロキシの回転が重くなります。Scraper APIはJavaScriptをレンダリングし、ボット層を突破し、1回のコールでクリーンなデータを返します — JavaScriptが多用されたサイトのスクレイピングに関する私たちのノートは、いつ切り替えるかを説明しています。

Scraper APIでJavaScriptが多用された暗号通貨ページをレンダリングする

NFTフロアとミントカレンダー

NFTデータはリスティングボットやフロアスイーパーが動作する基盤です:コレクションの現在のフロア価格、リストされている数、新しいミントがライブになる時期です。マーケットプレイスページはクライアントサイドでレンダリングされるため、信頼できるアプローチはコレクションのフロアを厳密なスケジュールでスナップショットし、それを差分化することです — フロアの低下やリスティングの急増はトレーダーが行動するシグナルです。ミントカレンダーも同じパターンが適用される予定のドロップです:カレンダーをポーリングし、新しいエントリーをキャプチャし、関心のあるものにアラートを出します。

import time

def watch_floor(collection_url, selector, interval=60):
    last = None
    while True:
        floor = float(pair_price(collection_url, selector).strip(" ETH"))
        if last is not None and floor < last:
            print(f"floor dropped {last} -> {floor}")   # act on the dip
        last = floor
        time.sleep(interval)                              # snapshot cadence

ここでリスティングボットはデータに生死をかけています。フロアの低下や新しいリスティングに反応するスナイピングボットは、そのフィードの速さに依存しています。レート制限されているかブロックされているフィードは無価値です。勝つボットはターゲットコレクションを積極的にポーリングし、クリーンな回転IPからすべてを1つの形に正規化します — コレクション、価格、通貨、タイムスタンプ — これにより、ドロップがマーケットプレイス間で比較可能になります。スクレイピングの問題とトレーディングの問題は同じ問題です:データを新鮮に保ち、ソースから締め出されないようにします。

プロキシを通じて中央集権型取引所、DEXペア、NFTマーケットプレイスからタイムシリーズストアに引き込む暗号通貨データパイプラインのフローダイアグラム
1つのパイプラインがCEX、DEX、NFTのシグナルを正規化します;価値は単一のプルではなく、一定のリズムでスナップショットを取得することにあります。

どの層にどのプロキシを使うか

ターゲットにプロキシを合わせます。アグリゲーターとパブリックJSONエンドポイントは寛容です — 高速で安価なデータセンタープロキシがそれらを処理し、GBあたりのコストを低く保ちます。DEXページ、取引所市場ビュー、NFTマーケットプレイスは実際のボット検出を実行するため、これらは住宅IPまたはブラウザのフィンガープリントを持つScraper APIが必要です。避けるべき間違いは、データセンターIPを喜んで提供するエンドポイントに住宅帯域幅を支払うことです — これはデータセンタープロキシをいつ使うかのガイドでカバーされています。そして、これらのフィードが代替データ戦略を駆動するため、ファンドのための代替データガイドからの同じコレクションディシプリンが適用されます:すべてにタイムスタンプを付け、一定のリズムでスナップショットを取得します。

よくある質問

取引所にAPIがあるのに、なぜ暗号通貨データをスクレイピングするのですか?

取引所APIはレート制限があり、取引所がリストしている資産のみをカバーします。DEXペア価格、NFTフロア価格、ミントカレンダーを公開しておらず、無料のティアはコールボリュームを制限します。スクレイピングはこれらのギャップを埋めます — トークンのロングテール、分散市場、マーケットプレイスデータ — そして、APIが決して接続しないソースを集約することができます。

暗号通貨とNFTデータをスクレイピングするためにプロキシが必要ですか?

パブリックAPIの軽い使用には必要ありません。頻繁なポーリングやDEXおよびNFTページのスクレイピングには必要です。アグリゲーターエンドポイントはIPごとに制限されるため、回転するデータセンタープロキシがスループットを向上させます。DEXおよびマーケットプレイスページはボット検出を実行しており、これは住宅IPまたはJavaScriptをレンダリングし、ブラウザフィンガープリントを持つScraper APIが必要です。

NFTフロア価格をどのようにスクレイピングしますか?

マーケットプレイスのコレクションページはクライアントサイドでレンダリングされるため、プロキシを通じてヘッドレスブラウザでページをレンダリングし、フロア価格要素を待ち、スケジュールに従ってスナップショットを取得します。連続したスナップショットを差分化して、低下やリスティングの急増をキャッチします。実行ごとに出口IPを回転させ、ポーリングのペースを調整して、マーケットプレイスが繰り返し訪問者をフラグしないようにします。

暗号通貨の価格をどのくらいの頻度でスナップショットすべきですか?

使用ケースによります。ポートフォリオ追跡は数分で問題ありません;トレーディングシグナルのためのDEXおよびNFTフロアの監視は、最もアクティブなペアでは秒単位のより短い間隔を望むことがあります。より高速なポーリングはリクエストボリュームとブロックリスクを増加させるため、回転するIPに分散させ、タイムスタンプを保存してシリーズを再構築します。

暗号通貨とNFT市場データは3つの層にまたがります — CEXアグリゲーター、DEXペア、NFTフロアとミント — そして単一のAPIではそれらをカバーできません。クリーンなCEXスナップショットのためにアグリゲーターから始め、プロキシを通じてJavaScriptが多用されたDEXおよびマーケットプレイスページをレンダリングし、各ターゲットがどれだけ守られているかにプロキシタイプを合わせます:寛容なJSONには安価なデータセンターIP、守られたページには住宅またはScraper API。一定のリズムでスナップショットを取得し、すべてにタイムスタンプを付け、1つの形に正規化すれば、市場全体を見渡すフィードが得られます。

QuantumProxiesで市場データの収集を始めましょう