Чому парсинг лістингів криптобірж зривається на потоці даних
Більшість збоїв у зборі даних із криптобірж трапляється не на етапі розбору сторінки, а на етапах доставки й нормалізації подій.
Майданчики на кшталт Binance віддають анонси про лістинги окремою стрічкою, а делістинги — правкою картки пари або банером в інтерфейсі, тому перевірка «з’явився новий пост» не бачить половини подій. Пропущений лістинг випливає за сплеском ціни — тобто вже після того, як вікно входу закрилося.
Друге вузьке місце парсингу лістингів криптобірж — дисципліна опитування. Обмеження за частотою запитів, різні вікна публікації в різних майданчиків і розриви потокового з’єднання дають затримку оповіщення про лістинг у десятки секунд навіть за живого каналу.
За цей час котировка встигає перебудуватися, і рішення ухвалюється за ціною, що відрізняється від першої.
Третє — зіставлення тикерів. Одна й та сама монета торгується під різними позначеннями, переживає зміну мережі й перейменування, і без реєстру відповідностей потік дублів і «нових» пар, яких насправді немає, зростає швидше за корисні сигнали.
Моніторинг делістингів у такій схемі спрацьовує пізніше за регламент виведення, а позиція залишається в парі, переведеній у режим лише закриття.
Ціна всіх трьох збоїв одна: подія або губиться, або надходить із запізненням, а ручне звіряння з’їдає години аналітика. Далі розбираємо, як це закривається — від вибору джерел і правил відсіювання дублів до контролю затримок на кожній ділянці.
Вимірюваний ефект: швидкість реакції, повнота даних, відмови
Реакція на лістинг: хвилини замість годин
Подія потрапляє до реєстру у момент публікації торгових правил, а не коли новина розійшлася стрічками. Правило маршрутизації одразу віддає сигнал у потрібний канал, і напрям дізнається про лістинг у тому самому вікні, що й маркет-мейкери.
Різниця між «за хвилину» і «до вечора» — це різниця між входом за ціною відкриття та входом на відкаті.
Повнота реєстру: частка пропущених подій
Реєстр збирається не з одного потоку, а з кількох незалежних джерел: оповіщення біржі, торгові правила, довідник інструментів. Кожна подія зберігається з посиланням на джерело, відміткою часу й ознакою підтвердження — дублікати склеюються, розбіжності видно одразу.
Частка пропущених подій виходить у межі похибки, а за кожним лістингом і делістингом залишається слід, за яким можна перевірити походження даних.
Відмови, які більше не доходять до торгівлі
Раніше збій збору означав тиху діру в історії: обрив підписки, зміна формату відповіді, перейменування тикера.
Тепер за кожним джерелом стежить перевірка живучості — якщо дані не надходять довше за очікуваний інтервал, реєстр позначає прогалину й переграє ділянку з останньої підтвердженої точки.
Час відновлення після збою збору вимірюється хвилинами, частина відмов закривається повтором, частина — перемиканням на резервне джерело.
Способи збору: потокові канали, опитування за розкладом, веб-шар
Біржа публікує події про появу нових торгових пар і зняття їх з торгів через кілька незалежних поверхонь, і кожна дає свій компроміс між затримкою, повнотою та вартістю підтримки.
Від вибору способу залежить, дізнається система про лістинг за секунди чи за хвилини й чи переживе вона сплеск звернень у момент анонсу, коли до сторінки одночасно приходять десятки тисяч учасників — достатньо згадати анонси на Binance та інших великих майданчиках.
На практиці збір будують комбіновано: основний канал забирає оперативні події, резервний підтверджує повноту й закриває пропуски, веб-шар добирає те, що не віддається програмно.
Стійкість збору до навантаження дає не одне джерело, а зв’язка з накопиченням у черзі та повторною обробкою.
| Спосіб збору | Коли підходить | Обмеження |
|---|---|---|
| Потоковий канал даних — постійне з’єднання, майданчик сам віддає події | Потрібна реакція за секунди: торгові алгоритми, ризик-контроль, оповіщення про лістинги й делістинги | З’єднання рветься під час перевантаження біржі; потрібні перепідписка, буфер і довантаження пропущеного вікна за історією |
| Опитування за розкладом — періодичні запити до довідкового інтерфейсу | Звіряння повноти: перелік пар, статуси торгів, обсяги, перезаливання історії після збою | Затримка дорівнює кроку опитування; часті запити впираються в ліміти й призводять до тимчасового блокування ключа |
| Збір через веб-інтерфейс — розбір сторінок і внутрішніх викликів | Анонси в блозі та списках, пари, яких немає у відкритому програмному доступі | Розмітка змінюється без попередження; потрібен контроль структури й захист від блокувань за адресою |
Схема з одним джерелом майже завжди дає діри в історії — тому в робочій конфігурації поруч із потоком живе звіряльне опитування, а веб-шар вмикається точково під конкретні майданчики.
Порядок робіт: від розвідки джерел до передачі регламентів
Починаємо з розвідки: які інтерфейси біржа віддає назовні — запитові, потокові, сторінки анонсів, статусні канали. Завдання етапу — зрозуміти, яке джерело повідомляє про подію першим і з якою затримкою надходять решта, щоб не будувати збір на єдиній точці.
- Аудит джерел даних біржі. За кожним фіксуємо обмеження за частотою звернень, затримку публікації та формат відповіді. На виході — карта джерел із пріоритетом: основний і підтверджувальні.
- Схема зіставлення торгових пар. Приводимо тикери до єдиного вигляду й розводимо колізії, коли одне позначення мають різні активи. Довідник синонімів і правила нормалізації живуть у конфігу, а не в коді.
- Збір і дедуплікація. Модулі збору пишемо з повторами при збоях і відсіканням дублів за ідентифікатором події. Сиру відповідь зберігаємо поруч із розібраною — під час розбору розбіжностей буде що підняти.
- Перевірка повноти даних. Звіряємо потік із незалежним джерелом і рахуємо частку пропущених подій. Розбіжність вище порога піднімає оповіщення, а не тихо осідає в логах.
- Налаштування оповіщень. Розкладаємо за каналами й відповідальними, ставимо захист від повторів, робимо окремі шаблони на лістинг, делістинг і зміну умов торгів.
- Передача регламентів супроводу. Документуємо кожне джерело: як замінити адресу під час переїзду біржі, як перевірити свіжість даних, кому і в якому порядку ескалювати збій.
Що передаємо на руки: реєстр лістингів, схеми й регламенти
Здаємо не працюючий скрипт, а комплект, за яким збір переживе зміну виконавця, додавання нових майданчиків і зміну їхніх форматів. Нижче — що фізично лежить у репозиторії та передається разом із доступами й правами.
- Реєстр подій біржі — нормалізована таблиця зі складеним ключем «майданчик + інструмент + тип + час»: лістинг, делістинг, перейменування, зміна тикера, переведення в режим спостереження. Той самий факт із різних джерел схлопується, тому повторні проходи збирача не роздувають базу й не створюють дублів.
- Схема потоків даних — від точки знімання до сховища: який канал використовується для кожного майданчика, з якою частотою опитується, де стоїть буфер, як відокремлюються сирі відповіді від нормалізованого шару і що відбувається при розриві з’єднання.
- Документація зі збору даних — опис полів і форматів, перелік відомих обмежень майданчиків, правила зіставлення тикерів і пар, порядок додавання нової біржі без правки ядра.
- Конфігурації збирачів — окремі файли на кожен майданчик: список відстежуваних інструментів, ліміти запитів, кількість повторів, зіставлення статусів інструмента. Усе в системі контролю версій, з історією змін.
- Політики доступу до даних — ролі та області видимості для сирого й очищеного шару, ключі лише на читання, спосіб зберігання секретів, журнал звернень до чутливих вибірок.
- Регламент реакції на делістинг — пороги спрацювання, час реакції на подію, схема оповіщення чергового, порядок ескалації та вікно ручного звіряння, якщо джерело дало суперечливі сигнали.
- Комплект приймання — панель моніторингу із лагом збору та часткою розбіжностей, тестовий набір подій, інструкція з розгортання й порядок дій при збої.
Реєстр ведеться зі збереженням історії: подія не перезаписується, а закривається новим записом, тому звітність відтворюється на будь-яку минулу дату.
Кейс: реакція на делістинг скоротилася з годин до хвилин
Як було
Замовник — команда, що торгує спотовими парами на кількох біржах, — дізнавався про делістинг вручну: аналітик обходив сторінки оголошень, і між публікацією та рішенням минало від трьох до п’яти годин.
За цей час пара встигала перейти в режим обмежених торгів, а позицію закривали за ціною, далекою від ринкової.
Що зробили
Ми поставили регулярний збір подій лістингу й делістингу: опитування публічних інтерфейсів і потокових каналів бірж, приведення записів до єдиної схеми за біржею, парою, типом і часом публікації.
Дедуплікація відсікає повторні оголошення про одну подію, окрема гілка ловить скасовані — інакше команда реагувала б на делістинг, якого не станеться. CoinMarketCap працює контрольним джерелом: розбіжність за статусом пари піднімає прапорець на перевірку.
- Затримка від публікації оголошення до оповіщення: з 3–5 годин до 40–90 секунд.
- Точність визначення делістингу: частка хибних спрацювань знизилася з 12% до менш ніж 1%.
- Пропущені події: за період спостереження жодної при ручному обході — 2–3 на місяць.
- Скасовані оголошення: фіксуються до відкриття торгів, а не постфактум.
Журнал подій зберігає всю історію статусів пари, тому будь-яке оповіщення можна відтворити й зрозуміти, на якій публікації воно побудоване.
Це ж дає матеріал для розбору: якщо реакція виявилася запізнілою, видно, на якому кроці — опитування, нормалізація чи доставка — втратився час.
Чим відрізняється подієвий збір від завантаження котировок?
Обидві задачі звертаються до одного інтерфейсу біржі, але збирають різне. Завантаження котировок веде неперервний ряд цін за вже відомим списком інструментів: тут важливі частота оновлення даних і повнота значень.
Подієвий збір даних стежить за зміною самого переліку — з’явився новий тикер, змінилися торгові пари, інструмент іде з торгів.
Різниця в природі даних задає вимоги до частоти оновлення даних. Ціновий ряд можна знімати інтервалами: пропущений такт знижує деталізацію, але не руйнує картину.
Подія лістингу або делістингу одноразова й незворотна — якщо момент публікації пропущено, відновити його з подальших знімків каталогу вже не можна.
| Критерій | Подієвий збір даних | Завантаження котировок |
|---|---|---|
| Що фіксуємо | Появу, перейменування й ухід інструмента | Ціну та обсяг за відомими інструментами |
| Частота оновлення | Опитування каталогів і підписка на анонси, реакція в хвилинах | Неперервний потік із кроком у секунди |
| Глибина історії | Повний архів анонсів, включно зі скасованими | Ряд за потрібний період, старі такти агрегуються |
| Ціна пропуску | Подія губиться назавжди | Провал у ряді, заповнюваний сусідніми точками |
| Перевірка | Звіряння кількох джерел і дедуплікація | Контроль розривів і викидів |
Для подій глибина історії критична: анонс, час фактичного старту торгів і навіть скасована публікація потрібні цілком — інакше реакцію ринку не оцінити. Запис ведемо ідемпотентно, щоб повторний прохід не плодив дублі.
Часті технічні сумніви при зборі даних із бірж
Збір анонсів про лістинги й делістинги — це потік, який змінюється разом із біржею: у кожного майданчика своя розмітка сторінок, свої вікна публікації та свій спосіб віддавати історію.
Формально це парсинг лістингів криптобірж, але надійність збору даних тримається не на одному скрипті, а на схемі з перевірками, повторами й контролем повноти. Нижче — заперечення, які найчастіше звучать на технічних обговореннях, і те, як ми їх закриваємо.
Що робити, якщо біржа змінила розмітку сторінки?
Селектори й правила розбору живуть окремо від логіки збору — у конфігурації для кожного майданчика. При зміні розмітки правиться один файл, решта схеми не переписується.
Контрольний прогін за еталонними сторінками йде за розкладом, тому розбіжність видно раніше, ніж зіпсовані дані потраплять у вітрину. Якщо частка розпізнаних полів падає нижче порога, збирач продовжує складати сирі відповіді — анонс можна відновити з архіву.
Як відрізнити справжній анонс від чутки й підробки?
Перевірка справжності йде за першоджерелом: офіційний канал оголошень плюс поява торгової пари в списку або зміна її статусу. Усе, що прийшло з передруків і зведень, позначається окремим статусом і не йде в основну вітрину до підтвердження. Дублікати склеюються за ідентифікатором анонсу, тому одна й та сама новина не задвоюється.
Наскільки стійкий збір при збоях на боці біржі?
Запити йдуть з обмеженням швидкості, при відмові — повторні спроби зі зростаючим інтервалом, тож збирач не йде в блокування. Повнота перевіряється звірянням добової кількості анонсів із контрольними значеннями за майданчиком.
Завантаження ідемпотентне: повторний запуск не створює дублів, а пропущена ділянка перезбирається за потрібний період.
Що входить у супровід збирача даних?
Моніторинг доступності майданчиків, оповіщення про падіння повноти збору, розбір збоїв і регламент підключення нової біржі. Окремо ведемо журнал змін: коли і що правила майданчик, як це відображено в конфігурації. На регулярній основі віддаємо звіт про повноту й якість зібраних даних.
Обговоримо задачу: зберемо схему збору під ваші джерела
Перш ніж називати терміни, нам потрібно зрозуміти контур: які біржі та типи подій покриваємо, звідки беремо дані, з якою затримкою вони мають доходити до вашої системи і що вважається пропуском.
Парсинг лістингів криптобірж майже завжди впирається не в сам збір, а в нормалізацію тикерів, дедуплікацію та стійкість до зміни розмітки на боці джерела.
Щоб обговорити задачу збору даних предметно й повернутися з оцінкою проєкту збору, достатньо надіслати:
- список бірж і подій: лістинг, делістинг, зміна тикера, переведення між ринками;
- канали, які вже використовуєте: програмний інтерфейс біржі, потокові підписки, сторінки анонсів, розсилки;
- вимоги щодо затримки — скільки часу допустимо між публікацією та вашим повідомленням;
- допустиму частку пропусків і те, як ви її вимірюєте;
- приймач даних: база, черга, виклик вашого сервісу, файл;
- горизонт історії та чи потрібне довантаження архіву;
- правила нормалізації: зв’язка «монета — біржа», дублі й перейменування;
- обмеження за доступами й квотами на боці джерел.
За цим набором зберемо план робіт зі збору подій і підготовку до впровадження: схему джерел, етапи, порядок підключення й точки контролю. Опишіть задачу — повернемося з оцінкою та планом.







