Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

94 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Автоматический сбор данных с маркетплейса Ozon

Содержание

Обзор

Здесь представлен сервис по парсингу маркетплейса Ozon.
В будущем добавятся и другие маркетплейсы, и функционал будет развиваться.
Точнее, здесь представлены программы-клиенты, которые демонстрируют подключение и работу сервисом по парсингу маркетплейса Ozon моей разработки. На текущий момент сервис в тестовом режиме и бесплатен.

По вопросам и предложениям можете обращаться на почту telnov-vs@yandex.ru
Или telegram: @iss7gli7


На текущий момент сервис находится в активном развитии, и могут наблюдаться не соответствия описания, и сбои в работе.


Из сервиса мониторинга цен это перерасло скорее в сбор статистик продаж.

Сейчас из готового и интересного есть рейтинги продаж по товарам выраженные в сумме продаж по позициям. Механизмов экспорта этих данных в удаленные базы пока нет, но если кому-то нужно такое, могу предоставлять слепок базы с готовыми цифрами. Если возникнет интерес, то вам сначала нужно мне сообщить интересующую категорию, чтобы я ее поставил на накопление. Весь Озон таким образом не закачать, и такое можно делать лишь с отдельными желаемыми категориями.

Вот пример по категории Кофе:
2026-06-30_01-20
Здесь отображена статистика за ~12 дней, показаны:
Кол-во - продажи в количествах
Сумма - продажа в рублях - кол-во * цена
Сум/день - средняя сумма продаж за день
*Сум/день - средняя сумма продаж за день за вычетом квадратичной ошибки * 1.64 - можно назвать это стабильная составляющая средней продажи за день
Произв - первая производная - как средняя продажа меняется каждый день
Ош% - показывает, что средняя продажа на самом деле болтается в этих пределах - какой-то день лучше, какой-то хуже. А для каких-то позиций сам сбор данных может оказываться не совсем качественный, но это отдельная тема
Дней - сколько времени в днях наблюдался этот товар и у него при этом отображался остаток


Кому и зачем это может быть интересно. Для определения какие товары лучше продаются, если есть возможность выбирать что продавать. Или для определения что можно исправить в своих карточках, подсмотрев как это делают лучшие. Или если кому просто интересно быть в курсе где деньги крутятся.

Вот еще один пример по одной из категорий книг. Продаж здесь поменьше чем у кофе. 2026-06-30_01-19

Для определения что лучше продается лучше смотреть на самом деле колонку Сумма/день - средняя сумма продаж за день. Колонка суммы продаж считается просто как замеченные продажи исходя из отображенных остатков на страницах Озона. А там эти остатки периодически выключаются для каких-то товаров, порой на несколько дней, вероятно зависит от всяких баджиков Распродажа или еще от чего-либо. И тогда сумма продаж не может накапливаться. Но колонка Сумма/день считается исключительно по тем периодам времени, когда остаток отображается, и соответственно более точно отражает рейтинг продаж.

Конфигурация с этим типом таблиц здесь на ГитХаб не выложена, и высылается по запросу и за небольшую денежку.




Демонстрационная конфигурация 1С

Репозиторий содержит файл конфигурации Ozon_1C_Configuration.dt (или же оно же как расширение Ozon_1C_Extension.cfe для типовых конфигураций). Эта конфигурация демонстрирует интеграцию с этим сервисом сканирования маркетплейсов. Решение автоматически загружает данные о товарах и ценах на основе заданных пользователем фильтров и отборов.

Особенности и возможности:

  • Простая интеграция: Конфигурация является демонстрационной и имеет открытый код. Все объекты имеют префикс ЮМП_ и технические специалисты могут легко перенести готовые модули в рабочие базы данных (ERP, УТ, УНФ и др.).

  • Готовое рабочее место: Базу можно использовать «из коробки» для быстрого старта, и функционал будет регулярно развиваться и дополняться.

2026-05-25_14-37

Использование из других скриптов (python)

В папке python_scripts пример использования на питоне.
Доступны варианты запуска как командной утилиты и как GUI вариант.
Там же вы найдете описание и примеры использования.

Технические детали подключения

Для подключения к сервису не используется выделенный домен или статический IP. Вместо этого, есть временный домен, который записывается в файл на GitHub. И клиентские программы, сначала считывают этот динамическое имя, и затем уже по нему обращаются к сервису. (считывание с GitHub: python_clients/client_tools/get_from_github.py). Причины такой связки, отчасти, что сам сервис по сканированию МаркетПлейсов не может быть на статическом IP, иначе его маркетплейсы быстро блокируют. Позже, когда и если сервис перейдет из тестового режима в коммерческий режим, то приделаю более сложную сетевую развязку, которая позволит обращаться непосредственно по статистическому IP.

Отсылаемый запрос и получаемый ответ должны быть запакован - zlib,gzip,zipfile.
Если без упаковки, то тогда ограничения по количеству запрашиваемых позиций,
для страниц со списками - 50 позиций, для карточек товаров - 8 штук.
Если упакован - 1000 для списков и 50 для карточек.
Сервер отвечает в том же варианте упаковки, в каком упакован запрос.
Используются POST запросы, для подключения используются заголовки:
(реализацию можно увидеть в python_clients/client_tools/api.py)
(в том числе для не упакованных запросов)
(варианты GET и REST-API позже будут)

    "Content-Type": "application/octet-stream",
    "Content-Length": str(len(packed_request))

При запросах большого количества в одном запросе Ozon иногда включает проверку антибота,
и тогда парсер останавлиается и возвращает что уже нашел. Но это нужно действительно большое количество запрашивать. Я это наблюдал редко-редко при запросах от 300 строк для страниц поиска, или иногда при запросах от тысяч строк.
Вероятность сбоя выше, если запрос идет на карточки артикулов, а не на поисковые страницы.
В итоге, если запрос не вернул ожидаемые данные, то просто попробуйте еще раз.
У меня есть задумки, что можно реализовать безсбойные варианты получения данных, путем их планирования и выполнения заранее, и возврата закэшированных. Но пока это только в планах.

Форматы данных

Разные вспомогательные параметры

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

Поле запроса Описание
asynchronously True (или просто 1)

Если это так, то сервер вместо ответа, вернет JSON с полем poll_token, и сделает это сразу же не дожидаясь окончания выполнения запроса. После этого, клиент должен периодически опрашивать сервер о готовности ответа, скажем раз в 10 секунд. Адрес сервера при этом с гитхаб перезапрашивать не нужно. Пока ответ не готов, то сервер снова будет возвращать этот же poll_token, а как ответ будет готов - вернет ответ согласно запросу.
Зачем это сделано?
В некоторых случаях (в случаях большого времени выполнения запроса, скажем больше минуты), клиент-серверное подключение разрывается и клиент не получает ответ. А в случае использования такого poll_token ожидания бездействующего подключения не происходит.

Поле запроса Описание
secret_no_limits_78963214 True (или просто 1)

Внеменная мера, при указании этого параметра не применяются ограничения на количество строк или артикулов. Но это не значит, что если указать к запросу 1млн строк, то сервер их вернет - просто Озон в какой-то из моментов выдаст капчу бот-проверки и сканер дальше не пойдет. Так же, может оказаться, что собранных данных будет много по объему, и подключение клиент-сервер где-нибудь сломается. В общем, это типа временная не документированная фича.

Запрос страниц со списками товаров

Запрос формируется в виде JSON текста с указанием соответствующих полей.
Могут быть запрошены главная страница, страницы категорий и страницы продавцов, и по всем этим вариантам можно указать поисковое слово.

Поля доступные к указанию в запросе:

Поле запроса Описание
search_string Строка поиска. Если не указано, парсятся все товары из категории
url_category Ссылка на категорию или на страницу продавца. Если не указано, поиск идет с главной страницы
expected_count_items Количество возвращаемых товаров (ограничено 1000)
min_price Минимальная цена для фильтрации (опционально)
max_price Максимальная цена для фильтрации (опционально)
sorting Тип сортировки:
Популярные (score)
Новинки (new)
Дешевле (price)
Дороже (price_desc)
С высоким рейтингом (rating)
С большими скидками (discount)
format_as_csv Формат результата.
Если false или 0 или параметр не указан - json.
Если true или 1 - csv.
Если символ - тогда csv с указанным символом в качестве разделителя
should_use_special_item Если Истина, для CSV формата, первым элементом будет специальный элемент со вспомогательной инфой, а не карточка товара.

Доступные данные в ответном JSON/CSV:

Поле Описание
position_number Позиция в которой товар был на сайте
page_number Страница на которой товар был на сайте (условные страницы)
Технический нюанс, при запросе без поискового слова (главная страница), page 3 отсутствует.
sku Артикул товара
title Название товара
url Ссылка на карточку товара
badge_list Бейджики списком
badges Бейджики одной строкой через запятые
src_card_price Цена c картой Озон-Банка, как она отображена на сайте
card_price Цена с картой Озон-Банка, отформатированная в число
src_fake_price Цена "до скидки", как она отображена на сайте
fake_price Цена "до скидки", отформатированная в число
src_rating Рейтинг, как он отображен на сайте
rating Рейтинг, отформатированный в число
src_review_count Количество отзывов, как оно отображено на сайте
review_count Количество отзывов, отформатированное в число
brand Бренд товара
src_stock Остаток товара, как он отображен на сайте
stock Остаток товара, отформатированный в число
delivery_list Доставка списком
delivery Доставка одной строкой через запятые
premium_seller_icon Истина для товаров с иконкой премиум-продавца - коронка на кнопке доставки

Элемент вспомогательной информации при указании параметра should_use_special_item

Поле Описание
is_special_item Истина
buyer_location Город который указан как покупатель. Преимущественно Москва, но иногда сбивается на Воронеж. Причины известны, позже может исправлю.
seller_url Если поиск среди каталога продавца, и урл продавца был озоном распознан.
category_url Если поиск среди категории, и урл категории был озоном распознан.
page_url Адрес страницы, которую озон определил как страницу поиска (куда озон заредиректил поиск).
is_stock_unknown Если истина, значит колонка stock будет пустой - сейчас такое замечено только для выдачи с главной страницы без поискового слова.
is_start_page Истина, если выборка из главной страницы без поискового слова. Это если такой запрос был задуман, или если была ошибка при формировании адреса запроса.

Запрос карточек товаров

Запросы карточек существенно медленнее чем запрос поисковых страниц.
В среднем по 5 секунд на карточку, поэтому если запрашиваете от 20 позиций, значит и результат ждать долго. А так же, как писал выше, у этого типа запроса выше вероятность сбоя по причите бот-проверок у озона.

Запрос формируется в виде JSON текста с указанием соответствующих полей.

Поля доступные к указанию в запросе:

Поле запроса Описание
sku_list Список артикулов к получению

Артикулы могут быть указаны как один артикул, так и список артикулов.
Может быть артикул как номер, и можно просто указать ссылки на карточки товаров.
При указании ссылок они могут быть просто копи-пастены из адресной строки,
включая параметры которые Озон использует для своих целей отслеживания,
и так же могут быть без начального домена, как в некоторых местах эти ссылки поставляются с ихнего сервера.
И в любой комбинации этих условий.
Запрос сразу списка артикулов выполняется суммарно быстрее, чем запрос поштучно. Но скрапинг останавливается на первом же артикуле который не удалось загрузить и возвращается то, что уже загрузилось.

Доступные данные в ответном JSON:

Поле Описание
buyer_location Город который указан как покупатель. Преимущественно Москва, но иногда сбивается на Воронеж. Причины известны, позже может исправлю.
sku Артикул
title Название товара
url Ссылка на карточку товара
src_stock Остаток товара, как он отображен на сайте
stock Остаток товара, отформатированный в число
seller_url Ссылка на страницу продавца
seller_name Название продавца
about_seller Список юридических параметров продавца
seller_rating Рейтинг продавца
rating Рейтинг карточки товара
review_count Количество отзывов
src_card_price Цена c картой Озон-Банка, как она отображена на сайте
card_price Цена с картой Озон-Банка, отформатированная в число
src_regular_price Цена без карты Озон-Банка, как она отображена на сайте
regular_price Цена без карты Озон-Банка, отформатированная в число
characteristics Краткий список характеристик (полный список пока в разработке)
aspects_variants Варианты характеристик доступных для выбора для заказа
categories Категории которые перечислены в заголовке карточки

Если запрошенная карточка более не доступна к продаже, тогда несколько иной набор полей.
Это может быть потому что закончился товар, или может быть, потому что товара не доступен к заказу в текущем городе, или может быть какие-либо другие причины.

Поле Описание
out_of_stock Истина
buyer_location Город который указан как покупатель. Преимущественно Москва, но иногда сбивается на Воронеж. Причины известны, позже может исправлю.
sku Артикул
title Название товара
seller_url Ссылка на страницу продавца
src_card_price Цена c картой Озон-Банка, как она отображена на сайте
card_price Цена с картой Озон-Банка, отформатированная в число

Примеры запросов и ответов

Запрос страниц со списками товаров

Пример структуры запроса:

{
"search_string": "вкусняшка",
"expected_count_items": 100,
"min_price": 10,
"max_price": 1000,
"sorting": "Популярные"
}

Пример ответа сервера:

[
    {
        "src_sku": "2759136519",
        "badge_list": [
            "Цена что надо",
            "Стало дешевле"
        ],
        "src_price": "51 ₽",
        "src_fake_price": "55 ₽",
        "title": "Кислые конфеты драже. Вкус фруктовый",
        "src_rating": "4.9",
        "src_review_count": "9 671",
        "brand": null,
        "src_stock": null,
        "delivery_list": [
            "Завтра"
        ],
        "page_number": 1,
        "row_number": 1,
        "position_number": 1,
        "sku": 2759136519,
        "url": "https://www.ozon.ru/product/kislye-konfety-drazhe-vkus-fruktovyy-2759136519/?at=Rltyp3rojIEyJqjKh6kNvz4FxlDmm1tOWqLQRSjvmNlw",
        "badges": "Цена что надо,Стало дешевле",
        "delivery": "Завтра",
        "review_count": 9671,
        "rating": 4.9,
        "price": 51,
        "fake_price": 55,
        "stock": 0
    },
    {
        "src_sku": "2759016743",
        "badge_list": [
            "Цена что надо",
            "Стало дешевле"
        ],
        "src_price": "54 ₽",
        "src_fake_price": null,
        "title": "Мармеладные жевательные конфеты в хрустящей оболочке. Вкус виноград",
        "src_rating": "4.9",
        "src_review_count": "12 609",
        "brand": null,
        "src_stock": null,
        "delivery_list": [
            "Завтра"
        ],
        "page_number": 1,
        "row_number": 2,
        "position_number": 2,
        "sku": 2759016743,
        "url": "https://www.ozon.ru/product/marmeladnye-zhevatelnye-konfety-v-hrustyashchey-obolochke-vkus-vinograd-2759016743/?at=DqtDW8BwNHRZo8nT5rrQLLtAAoMG4f8Y9Y4Zf7nm3YQ",
        "badges": "Цена что надо,Стало дешевле",
        "delivery": "Завтра",
        "review_count": 12609,
        "rating": 4.9,
        "price": 54,
        "fake_price": 0,
        "stock": 0
    },
    ...

Запрос карточки товара

Пример структуры запроса:

{
"sku_list": [
3172923788,
2641218448,
2940926841
]
}

Пример ответа сервера:

[
    {
        "src_sku": "3172923788",
        "sku": 3172923788,
        "url": "https://www.ozon.ru/product/nakleyki-3172923788/",
        "title": " Наклейки",
        "src_stock": null,
        "stock": 0,
        "seller_url": "https://www.ozon.ru/seller/vybor-huayunya/",
        "seller_name": "Выбор Хуаюня",
        "about_seller": [
            "Nanchang Kejun Cross-Border E-Commerce Co., Ltd.",
            "Xinjian District, Nanchang City, Jiangxi Province",
            "CN, Nanchang",
            "Режим работы — согласно режиму работы Ozon"
        ],
        "src_rating": "4.9",
        "rating": 4.9,
        "src_card_price": "222 ₽",
        "card_price": 222,
        "src_regular_price": "223 ₽",
        "regular_price": 223,
        "characteristics": [
            {
                "id": "Type_0",
                "title": "Тип",
                "values": [
                    {
                        "title": "Наклейки",
                        "url_category": null
                    }
                ]
            },
            {
                "id": "Color_1",
                "title": "Цвет",
                "values": [
                    {
                        "title": "Прозрачный",
                        "url_category": null
                    }
                ]
            }
        ],
        "aspects_variants": [
            {
                "title": "Цвет",
                "key": "Color",
                "variants": [
                    {
                        "sku": 3172903597,
                        "url": "https://www.ozon.ru/product/nakleyki-3172903597/",
                        "availability": "inStock",
                        "searchableText": "бежевый",
                        "content": "бежевый",
                        "title": " Наклейки",
                        "src_card_price": "222 ₽",
                        "card_price": 222,
                        "src_fake_price": "553 ₽",
                        "fake_price": 553
                    },
                    {
                        "sku": 3172905397,
                        "url": "https://www.ozon.ru/product/nakleyki-3172905397/",
                        "availability": "inStock",
                        "searchableText": "бежевый, серый, сиреневый",
                        "content": "бежевый, серый, сиреневый",
                        "title": " Наклейки",
                        "src_card_price": "222 ₽",
                        "card_price": 222,
                        "src_fake_price": "638 ₽",
                        "fake_price": 638
                    },
                    ...

About

Автоматизация загрузки и анализа товаров и цен маркетплейсов.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages