Сбор данных о рынке криптовалют и NFT за пределами API бирж

API бирж имеют ограничения по частоте запросов и охватывают только те монеты, которые они перечисляют. Пары DEX, минимальные цены NFT и календари выпуска находятся на страницах с тяжелым JS за защитой от ботов. Вот как надежно собрать все эти данные.

Данные о рынке криптовалют кажутся простыми — наверняка у каждой биржи есть API? Они есть, но эти API имеют ограничения по частоте запросов, охватывают только активы, которые биржа перечисляет, и ничего не говорят о двух местах, где находится много альфа: парах децентрализованных бирж (DEX) и рынках NFT. Если вы создаете трекер цен, бота для листинга или канал альтернативных данных, вы быстро достигнете потолка API и придется собирать остальное. Это руководство охватывает уровни данных о криптовалютах и NFT, когда использовать API, а когда — сбор данных, и настройку прокси, которая поддерживает работу в реальном времени. Речь идет о сборе данных, а не об инвестиционных советах.

Три уровня рыночных данных

Представьте данные в трех уровнях. Данные централизованных бирж и агрегаторов — цена, рыночная капитализация, циркулирующее предложение, объем за 24 часа и изменения за 1ч/24ч/7д — это то, что показывают такие сайты, как CoinMarketCap и CoinGecko, и это самое простое для получения. Данные DEX — текущие цены пар, ликвидность, новые листинги — находятся на страницах, отрисованных с помощью JavaScript, и редко имеют чистый бесплатный API. Данные NFT — минимальные цены, количество листингов, календари выпуска — находятся на страницах маркетплейсов, которые отрисовываются на стороне клиента и запускают защиту от ботов. Большинству проектов нужны как минимум два из этих уровней, поэтому одного API никогда не хватит.

Начните с API агрегатора

Для данных CEX верхнего уровня используйте сначала публичный API агрегатора — это бесплатный JSON, быстрый и уже нормализованный. Загвоздка в ограничении по частоте запросов: бесплатные уровни ограничивают вас скромным количеством вызовов в минуту, что разваливается в момент, когда вы часто опрашиваете сотни активов. Получите массовый снимок за минимальное количество вызовов, затем соберите длинный хвост, который 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, обходит слой ботов и возвращает чистые данные за один вызов — наша заметка о сборе данных с сайтов с тяжелым JavaScript объясняет, когда переключаться.

Отрисовка страниц криптовалют с тяжелым JS с помощью Scraper API

Минимальные цены 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, и нормализуют все в одну форму — коллекция, цена, валюта, временная метка — чтобы падение было сопоставимо между маркетплейсами. Проблема сбора данных и проблема торговли — это одна и та же проблема: держите данные свежими и никогда не теряйте доступ к источнику.

Диаграмма потока конвейера данных о криптовалютах, собирающего данные с централизованных бирж, пар DEX и маркетплейсов NFT через прокси в хранилище временных рядов
Один конвейер нормализует сигналы CEX, DEX и NFT; ценность в регулярных снимках, а не в одном единственном.

Какие прокси для какого уровня

Соответствуйте прокси цели. Конечные точки агрегаторов и публичные JSON терпимы — быстрые, дешевые центры обработки данных с ротацией справляются с ними и держат ваши затраты на гигабайт низкими. Страницы DEX, виды рынка бирж и маркетплейсы NFT запускают реальную защиту от ботов, поэтому им нужны резидентные IP или Scraper API, который несет отпечаток браузера. Ошибка, которую следует избегать, — это платить за резидентную пропускную способность на конечных точках, которые с удовольствием обслужат IP центра обработки данных — это описано в нашем руководстве по использованию центров обработки данных. И поскольку эти каналы питают стратегии альтернативных данных, та же дисциплина сбора из нашего руководства по альтернативным данным для фондов применяется: фиксируйте временные метки и делайте снимки по фиксированному графику.

Часто задаваемые вопросы

Зачем собирать данные о криптовалютах, если у бирж есть API?

API бирж имеют ограничения по частоте запросов и охватывают только активы, которые биржа перечисляет. Они не показывают цены пар DEX, минимальные цены NFT или календари выпуска, а бесплатные уровни ограничивают объем ваших вызовов. Сбор данных заполняет эти пробелы — длинный хвост токенов, децентрализованные рынки и данные маркетплейсов — и позволяет вам агрегировать данные из источников, которые API никогда не соединяют.

Нужны ли мне прокси для сбора данных о криптовалютах и NFT?

Для легкого использования публичного API — нет. Для частого опроса или сбора данных с страниц DEX и NFT — да. Конечные точки агрегаторов ограничивают вас по IP, поэтому вращающиеся центры обработки данных увеличивают вашу пропускную способность. Страницы DEX и маркетплейсов запускают защиту от ботов, что требует резидентных IP или Scraper API, который отрисовывает JavaScript и несет отпечаток браузера.

Как собрать данные о минимальных ценах NFT?

Страницы коллекций маркетплейсов отрисовываются на стороне клиента, поэтому отрисуйте страницу в безголовом браузере через прокси, дождитесь элемента минимальной цены и делайте снимок по расписанию. Сравнивайте последовательные снимки, чтобы уловить падения и всплески листингов. Вращайте выходные IP на каждую операцию и регулируйте частоту опроса, чтобы маркетплейс не пометил повторяющегося посетителя.

Как часто следует делать снимки цен на криптовалюты?

Это зависит от случая использования. Для отслеживания портфеля достаточно минут; мониторинг пар DEX и минимальных цен NFT для торговых сигналов часто требует более коротких интервалов, до секунд для самых активных пар. Более быстрое опрос увеличивает объем ваших запросов и риск блокировки, поэтому распределяйте его по вращающимся IP и фиксируйте временные метки для восстановления серии.

Данные о рынке криптовалют и NFT охватывают три уровня — агрегаторы CEX, пары DEX, минимальные цены NFT и выпуски — и ни один API не охватывает их. Начните с агрегатора для чистых снимков CEX, отрисуйте страницы DEX и маркетплейсов с тяжелым JS через прокси и подберите тип прокси в зависимости от того, насколько защищена каждая цель: дешевые IP центров обработки данных для терпимых JSON, резидентные или Scraper API для защищенных страниц. Делайте снимки по расписанию, фиксируйте все временные метки, нормализуйте в одну форму, и у вас будет канал, который видит весь рынок, а не только монеты, которые одна биржа случайно перечисляет.

Начните собирать рыночные данные с QuantumProxies