Skip to content

victorprogrammist/scrape_marketplaces

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

82 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Содержание

Обзор

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

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

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

Демонстрационная конфигурация 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 штук для страниц поиска.

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

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

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

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

Поле запроса Описание
search_string Строка поиска. Если не указано, парсятся все товары из категории
url_category Ссылка на категорию или на страницу продавца. Если не указано, поиск идет с главной страницы
expected_count_items Количество возвращаемых товаров (ограничено 1000)
min_price Минимальная цена для фильтрации (опционально)
max_price Максимальная цена для фильтрации (опционально)
sorting Тип сортировки (значение точно как на сайте, например: "Популярное")
format_as_csv Формат результата.
Если false или 0 или параметр не указан - json.
Если true или 1 - csv.
Если символ - тогда 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 Доставка одной строкой через запятые

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

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

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

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

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

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

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

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

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

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

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

{
"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
                    },
                    ...

Packages

 
 
 

Contributors