Проблема
Вы создаете B2B SaaS продукт. Ваши клиенты загружают список названий компаний. Они ожидают получить чистую запись: диапазон выручки, количество сотрудников, технический стек, раунд финансирования, ключевые контакты, последние новости. Они ожидают получить это за минуты, а не дни. И они ожидают, что данные будут верными.
Данные существуют. Они лежат на Crunchbase, на страницах About компаний, на страницах компаний в LinkedIn, на Google Maps, на Glassdoor, в региональных бизнес-реестрах, в архивах TechCrunch. Проблема в том, чтобы надежно до них добраться.
Каждый источник ломается по-своему. Crunchbase отдает тяжелое клиентское приложение, которое перерисовывается, если подозревает бота. LinkedIn агрессивно применяет rate limit и меняет свой DOM быстрее, чем вы успеваете обновлять селекторы (один популярный пост в сообществе оценивает стандартный Python-скрейпер примерно в 50 профилей до появления антибот-защиты). Сайты компаний варьируются от статического HTML до single-page apps, которым нужен полноценный браузер даже для отображения контента. Региональные каталоги меняют верстку каждый квартал и скрываются за гео-блокировками. Согласно 2026 отраслевому отчету от GroupBWT, 10-15% краулеров в некоторых вертикалях требуют еженедельных исправлений просто для того, чтобы успевать за антибот-обновлениями и изменениями DOM.
В итоге ваш пайплайн обогащения начинается как чистая архитектура из пяти источников. Через шесть месяцев это клубок наполовину сломанных скрейперов, очередей повторных попыток и Slack-канала под названием #scraper-alerts, который больше никто не открывает (ранее мы писали о скрытой стоимости поддержки собственных скрейперов). Жалобы на качество данных накапливаются в очереди техподдержки. Ваша команда начинает шутить, что компанию следовало назвать "Пять скрейперов и молитва".
Подход
Забудьте о скрейперах на минуту. Сложная часть обогащения это не извлечение. Это маршрутизация: решение о том, какому источнику нужен какой инструмент, какой proxy, какая политика повторных попыток и что считать "хорошим" response.
Платформа вроде FourA дает вам три продукта, которые напрямую соответствуют трем классам источников, с которыми вы будете работать.
Статические HTML каталоги и реестры. Большинство региональных бизнес-реестров и множество старых B2B каталогов используют серверный рендеринг. Им нужен быстрый, легкий HTTP request с чистого IP. Это Single: один URL на входе, один response на выходе. Добавьте unblocker: true, и он пройдет через блокировки на уровне рукопожатия, которые намертво останавливают стандартный HTTP-клиент. Single автоматически маршрутизирует через Proxy Finder и возвращает proxy id на верхнем уровне response (r.proxy), чтобы ваши последующие вызовы могли передать его обратно как proxy:"<id>" для привязки к той же выходной ноде, когда нужна непрерывность сессии.
SPA с тяжелым JavaScript. Crunchbase, приложения в стиле LinkedIn и даже сайты компаний среднего размера не вернут нужные вам данные из обычного HTTP response. Они рендерятся на клиенте. Это Browser: полноценный браузер выполняет страницу, запускает JS и возвращает вам отрендеренный HTML, cookie и скриншоты. Как и Single, он маршрутизирует через Proxy Finder под капотом (отдельный шаг выбора с вашей стороны не требуется).
Смешанные источники с валидацией. Каждый request к API FourA принимает блок validate. Вы можете требовать определенные статус-коды, совпадения header или подстрок в теле. Если response является мягким отказом (страница 200 с CAPTCHA, пустая оболочка данных или промежуточный экран с извинениями), валидатор отклоняет его. Затем ваш пайплайн может вместо этого направить тот же URL через Browser. Эта единственная функция устраняет самый дорогой класс ошибок в обогащении: тихий сбой, который записывает мусор в вашу базу данных.
Вот как выглядит вызов к одному источнику:
curl -X POST https://api.foura.ai/api/single \
-H "Authorization: Bearer pk_live_..." \
-d '{
"url": "https://registry.example.com/company/123",
"unblocker": true,
"followRedirects": 5,
"validate": {
"status": { "accept": [200] },
"data": { "fail": ["captcha", "blocked", "access denied"] }
}
}'
А вот эквивалент Browser для сайта компании с тяжелым JavaScript:
curl -X POST https://api.foura.ai/api/browser \
-H "Authorization: Bearer pk_live_..." \
-d '{
"url": "https://www.example-saas.com/about",
"unblocker": true
}'
Логика маршрутизации находится в вашем собственном пайплайне. Надежность в нашем. Вы решаете, какой из ваших источников получит какой инструмент. Мы следим за тем, чтобы инструмент действительно сработал.
Результаты
Мы наблюдали, как несколько команд перешли от внутренних скрейперов к пайплайну с маршрутизацией FourA во время публичной беты. Паттерн последователен (иллюстративные цифры основаны на том, что мы видели в бета-когорте):
- Задержка обогащения снижается с 3-6 секунд на компанию до медианного значения менее 1.5 секунд на маршрутах cached-residential.
- Уровень скрытых сбоев (response 200 с пустыми данными) падает примерно с 8% до менее 1%, как только блок
validateперехватывает мягкие отказы до того, как они попадут в базу данных. - Инженерное время на поддержку скрейпера сокращается с 1-2 инженеров на полный рабочий день до Slack-канала, который в основном молчит.
- Уровень успеха с первой попытки на защищенных каталогах поднимается до верхних пределов 90%, когда
unblocker: trueиспользуется вместе с чистым proxy id.
Еще одна цифра, которую стоит отметить: мы видели, как корректность с первой попытки (правильные данные, правильная компания) отстает от успеха с первой попытки примерно на четыре пункта. Урок не в том, что скрейпинг это сложно. А в том, что вам все равно нужно валидировать запись на соответствие компании, о которой вы действительно запрашивали данные (мы писали об этом паттерне в почему ваш веб-скрейпер постоянно ломается).
Цифры, которые имеют значение, это не размер пула proxy или количество request. Это частота, с которой ваш endpoint обогащения возвращает правильные данные с первой попытки, и наклон вашего графика обслуживания скрейпера за следующие шесть месяцев.
Ключевой вывод
Пайплайны обогащения ломаются в замедленном темпе. Первый написанный вами скрейпер выглядит отлично во вторник. К третьему источнику вы исправляете селекторы в 11 вечера. К десятому вы несете долг по обслуживанию, который масштабируется вместе с вашей клиентской базой. К двадцатому вы тихо перестаете подключать новые источники, потому что никто в команде не хочет брать ответственность за следующий.
Узким местом никогда не был источник. Это была маршрутизация: выбор правильного инструмента, правильного proxy, правильного правила валидации для каждого URL, каждый раз. Постройте этот слой один раз, передайте его тому, что уже это делает, и ваша команда сможет потратить вторник на продукт, а не на устранение поломок селекторов.