Парсинг Ozon: как выгрузить данные о товарах и продавцах
Ozon не отдаёт каталог наружу: официальный API есть только у продавца и только по его собственным товарам. Всё остальное — цены конкурентов, ассортимент категории, витрины чужих магазинов — собирается с публичных страниц, и ниже разбор, как это устроено на практике.
Какие данные реально лежат на страницах Ozon
Независимо от способа сбора доступно примерно одно и то же — то, что видит покупатель. По товару это название, артикул (SKU) Ozon, ссылка на карточку, бренд, категория, цена в нескольких вариантах (обычная, со скидкой, с Ozon Картой), признак наличия, рейтинг и количество отзывов, характеристики из таблицы, изображения и продавец.
По продавцу собирается его витрина: название магазина, рейтинг, количество отзывов о работе, полный список товаров с ценами, а также юридические реквизиты в том объёме, в каком площадка публикует их на карточке.
Чего на страницах нет и что нельзя выгрузить честно:
- выручку и число продаж — Ozon их не публикует, сервисы аналитики дают расчётную оценку по косвенным признакам, а не факт;
- точные остатки на складах — иногда видно только предупреждение вида «осталось мало»;
- себестоимость, юнит-экономику и комиссии по чужому кабинету.
Если подрядчик обещает «точные продажи конкурента», это модельная оценка, и о её погрешности стоит спросить отдельно.
Три способа выгрузки и когда какой нужен
Ozon Seller API — официальный путь для продавца по собственным товарам: заказы, остатки, цены, отчёты. Бесплатно, стабильно, документировано. Ограничение одно, но принципиальное: чужой ассортимент через него не получить.
Ручная выгрузка — скачать таблицу из кабинета или собрать выдачу руками. Работает ровно один раз и на небольшом объёме. Для еженедельного мониторинга категории из тысяч карточек не годится.
Парсинг публичных страниц — единственный способ получить данные по чужим товарам, категориям и продавцам. Собирается только то, что открыто показано неавторизованному посетителю: без обхода авторизации, без персональных данных покупателей, с ограничением нагрузки на площадку.
На практике связка обычно такая: свои товары и остатки идут через Seller API, конкуренты и категория — парсингом, и оба потока сводятся в одну таблицу по SKU.
Почему скрипт «на коленке» ломается на Ozon
Ozon отдаёт страницы через JavaScript и защищён антиботом, поэтому простой запрос из Python чаще получает не карточку, а проверку. Дальше добавляются три вещи, о которых обычно забывают:
- Регион. Цена, срок доставки и само наличие зависят от выбранного адреса. Сбор с зарубежного сервера даёт не «неправильные» данные, а данные другого региона — они не сойдутся с тем, что видит ваш покупатель.
- Пагинация. Поисковая выдача и категория отдают ограниченное число страниц. Чтобы выгрузить категорию целиком, её режут фильтрами — по брендам, ценовым диапазонам, подкатегориям — и потом склеивают по SKU, убирая дубли.
- Изменчивость вёрстки. Разметка карточек меняется, и парсер без проверок однажды начинает молча собирать пустые цены.
Наш вариант — сбор настоящим браузером с российского адреса, с явно зафиксированным регионом доставки, паузами вместо максимальной скорости, повторными проходами по неудачным карточкам и контролем качества: если доля пустых полей в срезе выше нормы, запуск помечается как сбойный и не уходит в отчёт.
Разовая выгрузка или регулярный мониторинг
Один срез отвечает на вопрос «что происходит сейчас». Ценность появляется, когда срезы повторяются: видно, кто и когда снижает цену, сколько держится акция, когда конкурент уходит в «нет в наличии», как меняется состав продавцов на карточке. Под это у нас своя база истории цен — около 3,8 ГБ накопленных срезов.
Частота выбирается по задаче: для обзора категории обычно хватает суточного среза, для узкого списка ключевых позиций — часового. Куда уходят данные:
- таблицы — Google Sheets, Excel, CSV, отдельная база данных;
- интеграции — 1С, CRM, витрина собственного сайта;
- телеграм-бот или монитор: уведомление о падении цены ниже порога, о новом товаре в категории, о смене продавца на карточке.
Всё это работает по расписанию на своём сервере: запуск, повтор при ошибке, выгрузка — без ручного присмотра. Разовый сбор помогает решить «заходить в категорию или нет», регулярный нужен для ежедневного ценообразования.
Соберём под ваш случай и покажем на ваших данных.
Сбор данных →