DNB API перестав віддавати JSON — довелося перейти на Selenium + AI
Робив парсер для Dun & Bradstreet. Спочатку все було стандартно — requests, API, JSON, швидко і стабільно.
А потім воно просто перестало працювати.
Що зламалося
- API відповідає, але JSON пустий або кривий;
- іноді 200 OK, але даних нема;
- при цьому в браузері той самий запит працює нормально.
Тобто класика: API не впав — він просто перестав пускати бота.
Чому так
Скоріш за все:
- антибот-фільтри;
- перевірка headers / fingerprint;
- перевірка поведінки (cookies, JS і т.д.)
І requests тут вже не прокатує.
Що пробував
- крутити headers;
- додавати retry + delay;
- використовувати session.
Не допомогло.
Як вирішив
Повністю переписав під Selenium.
Тепер логіка така:
- відкриваємо DNB Business Directory;
- вводимо пошук;
- ходимо по сторінках;
- збираємо лінки;
- відкриваємо кожну компанію;
- дістаємо дані зі сторінки.
Тобто замість API — просто емулюємо користувача.
Чому це працює
Бо Selenium:
- виконує JS;
- працює з cookies;
- виглядає як реальний юзер.
І антибот його пропускає.
Додав ще AI
Після збору компаній виникла інша задача — зрозуміти, чим вони займаються.
Зробив окремий модуль 👉
Що він робить:
- бере сайт компанії;
- тягне кілька сторінок;
- чистить HTML;
- відправляє текст у Groq;
- отримує короткий опис + список послуг.
Бонус: перевірка на «поганий» контент
Перед AI є фільтр:
- gambling;
- adult;
- medical;
- affiliate і т.д.
Якщо щось знаходить — помічає сайт як ризиковий.
Фінальний пайплайн
- Selenium → збір компаній;
- парсинг профілів;
- отримання сайтів;
- скрапінг сайтів;
- AI-сумаризація;
- Excel.
Висновок
- якщо API «ламається» — це часто антибот;
- якщо в браузері працює — Selenium майже завжди врятує;
- AI добре доповнює парсинг, але треба обробляти ліміти.
Якщо коротко: перестав працювати API → зробив браузер → додав AI → стало навіть краще, ніж було 😄
8 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівЯкщо api фільтрує прямі запити без танців з емуляцією браузера, то це вже не api а якась, пробачте, маячня.
Згоден, виглядає дивно 🙂
Але на практиці це досить типова історія: API є, але працює лише в контексті браузера — з cookies, JS і нормальним fingerprint.
Тому requests уже не проходить, а Selenium — проходить, бо емулює поведінку користувача.
Є публічне API для користувачів (платне або ні), а є внутрішнє, яке захищають тим чи іншим способом. Так що все ок.
Ймовірно це і є внутрішній API.
Мені його просто передали, сам я його не реверсив. У DevTools він не світиться (навіть у fetch/XHR), тому підозрюю, що це або сторонній інструмент, або виклики йдуть не напряму з фронта.
Спочатку все працювало через requests, але потім почали приходити 200 OK без даних — класичний soft-block.
У підсумку перейшов на Selenium і закрив питання
То я в курсі. Користування внутрішнім api це фактично скрапінг, і там вже ніхто не гарантує ніякої стабільності...може вони взагалі проти використання.
Але ж тема саме про парсер, який тягне дані...
Groq чи Grok?
Groq
Це API для роботи з LLM (швидкі inference-моделі).
Grok — це модель від xAI, інша історія.