31.08.2026 · блог

Сбор данных с сайта без API: как это делается на практике

Нужны цены конкурента, остатки поставщика или карточки из каталога — а публичного API у сайта нет и не будет. Разбираем, что в этой ситуации реально работает, где сбор чаще всего ломается и что делать с данными после того, как они собраны.

Сначала убедитесь, что API действительно нет

«Нет API» в половине случаев означает «нет документации». Сам сайт почти всегда получает данные не из HTML, а из внутренних запросов — и их видно в браузере. Откройте инструменты разработчика, вкладку «Сеть», фильтр XHR/Fetch, и пролистайте страницу или переключите фильтр. Если в ответах приходит JSON с ценами и характеристиками — это и есть готовый источник, куда более стабильный, чем разбор вёрстки.

Что стоит проверить до того, как писать сбор с нуля:

Найденный внутренний эндпоинт — не публичный договор: его могут закрыть или изменить без предупреждения. Но пока он есть, сбор через него дешевле и быстрее в разы.

Три способа собрать данные, когда API нет

HTTP-запрос плюс разбор HTML. Самый быстрый и дешёвый вариант: страница скачивается как есть, из неё вытаскиваются нужные поля по селекторам. Подходит для простых каталогов, справочников, новостных лент. Ломается, если контент подгружается скриптами — тогда в ответе придёт пустая разметка.

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

Гибрид. Браузер используется только там, где без него никак — авторизация, получение сессии, прохождение проверки, — а дальше данные тянутся быстрыми запросами. На больших объёмах это единственный способ уложиться в разумное время.

Где сбор ломается чаще всего

Антибот. Сайт смотрит не только на IP, но и на набор признаков браузера: заголовки, шрифты, отпечаток движка, поведение курсора. Обычный скрипт с подменённым User-Agent отсеивается на первом же запросе — вместо данных приходит заглушка или капча. Настоящий браузер эту проверку проходит, потому что он и есть настоящий браузер.

Регион. Российские сайты, маркетплейсы и карты отдают разные цены, остатки и выдачу в зависимости от местоположения. Сбор с зарубежного сервера даёт формально «рабочий» результат, который не совпадает с тем, что видит ваш покупатель. Отсюда требование: собирать с российского адреса и явно фиксировать город.

Вёрстка. Селекторы живут ровно до ближайшего редизайна. Поэтому сбор без контроля бесполезен: нужны проверки на пустой результат, на резкое изменение числа позиций, на подозрительные цены — и уведомление, когда что-то из этого сработало.

Собрать — половина дела. Дальше история и выгрузки

Одна выгрузка отвечает на вопрос «сколько стоит сейчас». Бизнесу обычно нужен другой: «что происходит с ценой и наличием». Это значит, что каждый прогон надо складывать в базу, а не перезаписывать файл. У нас на своей базе истории цен накоплено около 3,8 ГБ — из неё видно, кто и когда демпингует, у кого товар пропал из наличия и как менялась средняя цена по категории.

Данные должны приходить туда, где с ними работают, а не лежать в папке на сервере:

И последнее: сбор должен работать без человека. У нас это Linux-сервер, задания по расписанию, журналы и сторожа, которые пишут в телеграм, если сбор упал или вернул подозрительный результат. Скрипт, который надо запускать руками, перестают запускать примерно на третьей неделе.

Нужно так же под вашу задачу?

Соберём под ваш случай и покажем на ваших данных.

Сбор данных →