1. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

Выгрузка товаров для Я.Маркета в формате YML

Описана последовательность создания пресета для выгрузки товаров в формат YML

  1. Support Юра
    Минимальная версия A-Parser:
    1.2.187
    Вступление. Сегодня рассмотрим пример создания пресета, который продемонстрирует возможность выгрузки товаров интернет-магазина в формат yml.

    YML (Yandex Market Language) — особый стандарт, разработанный Яндексом для принятия и размещения информации в базе данных Яндекс.Маркет. При размещении файла на сайте, регулярное обновление каталога на Яндекс.Маркет будет происходить автоматически и отражать все актуальные изменения (наличие, цена, появление новых товаров).

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

    Создание парсера. В качестве примера создадим парсер, который будет парсить одну с категорий на сайте «http://www.dochkisinochki.ru» и выгружать товары с одной из категорий в формат yml. В качестве примера выгрузим товары, которые находятся в категории «Игрушки для новорожденных».

    Пресет будет выглядить следующим образом:
    [​IMG]
    Используя регулярные выражения, будем собирать данные по страницам сайта, которые мы планируем выгружать в файл. К примеру возьмем такие значения:
    • название товара (name);
    • цену товара (price);
    • «старую» цену на товар (oldprice);
    • название бренда (brand);
    • код товара (kod);
    • ссылку на товар (query);
    Для прохода по всем ссылкам с товарами, которые есть на странице, воспользуемся инструментом «tools.query.add». На первом уровне, собираем все ссылки на товары и добавляем к ним адрес домена, так как в исходном коде ссылки размещаются без него:
    Код:
     IF query.lvl == 0;
        FOREACH p1.chap;
            tools.query.add('http://dochkisinochki.ru' _ link);
        END; 
    На втором уровне, переходим на каждый товар. Через регулярные выражения, которые указанны в интерфейсе, собираем нужные нам значения и помещаем их в теги, в соответствии со стандартом yml
    Код:
    '<offer>' _ "\n";
           '<url>'_ query _'</url>' _ "\n";
           '<price>' _ p1.price.replace('"', "''").replace('^none$', '').replace('\s+', '') _ '</price>' _ "\n";
           '<oldprice>' _ p1.oldprice.replace('"', "''").replace('^none$', '').replace('\s+', '') _'</oldprice>' _ "\n";
           '<brand>' _ p1.brand.replace('"', "''").replace('^none$', '') _'</brand>' _ "\n";
           '<name>' _ p1.name.replace('"', "''").replace('^none$', '') _'</name>' _ "\n";
            '<kod>' _ p1.kod.replace('"', "''").replace('^none$', '') _'</kod>' _ "\n";
    '</offer>' _ "\n";
    Таким образом, получаем нужные нам значения в нужном виде.
    После этого, согласно стандарту, нам нужно заполнить «шапку». Делать это будем, через указание значений в полях «Начального» и «Конечного» текста».
    Начальный текст:
    Код:
    <?xml version="1.0" encoding="UTF-8"?>
    <yml_catalog date="[% USE mydate = date(format = '%Y-%b-%d %H:%M', locale = 'C'); mydate.format(); %]">
        <shop>
        <name>Дочки синочки</name>
        <company>Tne Best inc.</company>
        <url>https://www.dochkisinochki.ru</url>
        <currencies>
         <currency id="RUR" rate="1"/>
        </currencies>
        <categories>
          <category id="1">Игрушки для новорожденных</category>
        </categories>
    <offers>
    Конечный текст:
    Код:
    </offers>
    </shop>
    </yml_catalog>
    В эти поля, помещаются «статичные» значение, которые не изменяется. Заполняем их вручную, согласно стандарту.
    В интерфейсе, предусмотрим также проход по страницам пагинации, используя свойства «Next page RegEx» и «Page as query» - которые будут выбирать ссылку на следующую страницу и делать запрос соответственно.
    На этом процесс создания парсера завершен, результат сохраняет значение в файл с расширением yml с нужной нам структурой:
    <?xml version="1.0" encoding="UTF-8"?>
    <yml_catalog date="2018-May-11 14:25">
    <shop>
    <name>Дочки синочки</name>
    <company>Tne Best inc.</company>
    <url>https://www.dochkisinochki.ru</url>
    <currencies>
    <currency id="RUR" rate="1"/>
    </currencies>
    <categories>
    <category id="1">Игрушки для новорожденных</category>
    </categories>
    <offers>
    <offer>
    <url>http://dochkisinochki.ru/icatalog/products/690017/</url>
    <price>3349</price>
    <oldprice>3684</oldprice>
    <brand>Fisher-Price</brand>
    <name>Развивающая игрушка Fisher-Price Ученый щенок с технологией Smart stages 27 см</name>
    <kod>GL000154413</kod>
    </offer>
    <offer>
    <url>http://dochkisinochki.ru/icatalog/products/3828553/</url>
    <price>2502</price>
    <oldprice></oldprice>
    <brand>Жирафики</brand>
    <name>Развивающий коврик Жирафики Веселое сафари 84 см</name>
    <kod>GL000400757</kod>
    </offer>
    <offer>
    <url>http://dochkisinochki.ru/icatalog/products/751178/</url>
    <price>379</price>
    <oldprice></oldprice>
    <brand>Happy Baby</brand>
    <name>Игрушка на палец Happy Baby Джунгли/сафари, 5 см</name>
    <kod>GL000191121</kod>
    </offer>
    .......
    </offers>
    </shop>
    </yml_catalog>
    eJytV21P4zgQ/iuRtVVAQF8WuEMlFLEcFXuC0oXyYUW4yiRum6tjZ+2kpVfx329s
    x0lauh946YfUM555ZjyeGdtLlGI5lX1BJEklaj8sUaLHqI1+Xl8NyTOOE7SLEiwk
    EUrgAfVI2m5fDgZ94IdkhDOaot0lShcJAS0+I0JEIYHJKAR6zHl4zjU9wzQDkYev
    zebjS6kRZDLl8S2RGggJM2ijEKdY02PyDKQnE8ycgGIpT3w0ORgqepjQSKY+6vi+
    3PGw+k4EGYHAVn3ndBsmLMLAGBsXFnIGFgIvgKn/ezjWHk1wUsipRSMasSl6h9NR
    SuJE8AQcehKYheCQdszz/QY2TsNIrWTd0XU/RxSna26uuqjxV3zkSRpxJu1OBBMS
    THvkOe3jcWU70GrAwCcbYwayQ0bmvrKEwzBScJii9nIV6yqKI7X2Jnr5vfUEBM9k
    j8x/ZEQsSvOpyMg6+pSQRItdkRkBTvPlHekyaTlRqFYBweoLHmYB5El9xy6uuhOT
    1oejr6y8K0GUi7l71zhifREFJM/nwr9PyY9EIX/UReve57rGafhu70xbqNSZnGbV
    +H1qjU15+C4f0yilpAyaIT/qTMBjWNMCHHp8LCa6XMRYufBQc753nV+qiup0Rp2T
    E6d57DM/7d7cXpydXzpJq676nOb5aco5lXUjDsW45U7SNGk3GiEPJtNIRkz/10Xm
    OkNHdcNtrXjR+wv+L67uLuDP9fhoRERHiahGwnwEXMf8XC8TtOMOjUvO0PUamrFZ
    VqeDngQ3NVEXJKE4IFuuj9xd0HFhsF1y/2GckS8w47oVrtp9wwMoMFnibjBq09Da
    tfTHTYPlFfANxnX7tpY18Raz2kQJsQFfNSgLr8ZvRi8AVsH91PWgLCw0DN+MbNVL
    YBWvDakE2ebUHssquMMzMuCqViJKSnYXqLxivkAlEjVbH+nC2NquL2K6cpyZilEV
    VVbRPYt+6bORcZBVGRsR2RU8BlYKp17OXNhqe0BfNI0AItO6P4yOPd8keNrF4EdY
    TIwwlTADnUvglIub/LiE44+zM0r10VeKafhvWURDuIadjUDpe664WeTmFcZLsbqq
    KbitzQX4UAqF/IqP7dLVSVwEo6c4MRekADCLy2HhEpkQps56n3mnzzF1AFyCIDTl
    Vr3pI4ewgIcRGwPjftDdO/LRaQdkYUeGAXRMyseO2i+Yhu51f3fhxAtFOyeavWW2
    ECi39nOv9rRXC53aZbt2DalEeYCpEnTP3e3jXK/Y82PIGnUm6IT15IQndqyT2s+a
    B60D9d0n6nvwpx5j/T1yNKtlCP0NfyeaF0mOnffnzoAR5xuRqROxoO41LDuXUk1Q
    9VoJzXY+n9dfNVzTJy1mJgREERKoY2vb8hbmunN7fwuRFiaMLR81rGrjla4HQSdj
    LlbRDC9Ha6mwqfCYle/rNTf114yPXoVq30TySU+PnPWI7X+tRK9Z4f9RUT6saOnv
    gYE7hFXk/pXLWl+EOYUsVbaFsyRPz7y5KAmvkWeD16hkYQetVdNKc1hlBpyNovFN
    /uqxkhkbwLvqhp3DZlOiyotllEJzkOS2bFJnMu8Giijq+JXyuTahrhX2tYX0cf33
    nbkTwLkCTfBQORhDQVetVlqDbjooP9Y3ZlojytdfiWkjGotMwvxeSBd4j/EZF/y/
    SUgYW0wnDbBuN0Q/HnVzhLu/0AHaReQZcj0kobrDwz2leEgWD85l5TnZXsI9H/0r
    +0ZGBUVJAC9vJKjdevkfRffEIg==
    Пресет в каталоге можно найти здесь

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