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

Собираем данные о товарах и ценах торговой марки Diesel

Собираем данные о товарах и ценах торговой марки Diesel

Собираем данные о товарах и ценах торговой марки Diesel на облачной парсинг платформе Diggernaut. Diesel — итальянская компания, занимающаяся производством и продажей одежды, расположена в Бреганце, Италия. Основатель Diesel Рензо Россо начинал свою карьеру с пошива джинс на швейной машинке в возрасте 15 лет. Эти джинсы он носил сам и продавал друзьям по цене 3500 лир за штуку. В последствии он закончил текстильный колледж в Падуа. Сейчас компания продает джинсы и другую одежды, обувь и аксессуары. Линия одежды включает два бренда: Diesel и Diesel Black Gold. Также компания имеет детскую линию одежды Diesel Kid.

Примерное количество товаров: 2000
Примерное количество запросов: 4500
Рекомендуемый план подписки: Free

ВНИМАНИЕ! Количество запросов может превышать количество товаров, потому что данные о вариациях, изображениях и др. могут парсится используя запросы к дополнительным ресурсам. Также часть данных о товаре может доставляться с помощью XHR запросов, что также увеличивает общее количество необходимых запросов.

Как пользоваться парсером информации о товарах и ценах магазина diesel.com

Для использования парсера информации с сайта магазина торговой марки Diesel вы должны иметь учетную запись в нашем сервисе Diggernaut.

  1. Пройдите по этой ссылке для регистрации в сервисе Diggernaut
  2. После регистрации и подтверждения email адреса войдите в свою учетную запись
  3. Создайте проект с любый именем и описанием, если вы не знаете как, обратитесь к нашей документации
  4. Войдите во вновь созданный проект и создайте в нем диггер с любым именем, если вы не знаете как, обратитесь к нашей документации
  5. Скопируйте в буфер обмена приведенный ниже сценарий диггера и вставьте его в созданный вами диггер, если вы не знаете как, обратитесь к нашей документации
  6. Переключите режим работы диггера с Debug на Active, если вы не знаете как, обратитесь к нашей документации
  7. Запустите ваш диггер и дождитесь окончания его работы, если вы не знаете как, обратитесь к нашей документации
  8. Скачайте собранный набор данных в нужном вам формате, если вы не знаете как, обратитесь к нашей документации

В дальнейшем вы можете установить расписание для запуска вашего парсера и забирать информацию регулярно.

Сценарий парсера

---
config:
    debug: 2
    agent: Firefox
do:
- walk:
    to: http://shop.diesel.com/
    do:
    - find:
        path: ul.level-1>li,ul.level-2>li,ul.level-3>li,ul.level-4>li
        do:
        - find:
            path: a:not(.actual-stories-link)
            slice: 0
            do:
            - parse:
                attr: href
            - space_dedupe
            - trim
            - normalize:
                routine: replace_matched
                args:
                    javascript\:: ''
                    ^\#$: ''
            - if:
                match: \s*[a-z]+
                do:
                - normalize:
                    routine: url
                - link_add:
                    pool: catalog
- walk:
    to: links
    pool: catalog
    do:
    - find:
        path: 'input#TotalProductCountOnLoad'
        do:
        - parse:
            attr: value
        - space_dedupe
        - trim
        - if:
            match: ^\d+$
            do:
            - variable_set: records
            - static_get: url
            - variable_set: url
            - eval:
                routine: js
                body: (function () {var pages = []; var i = 0; for (i=0; i <= <%records%>; i+=55) {pages.push(i)}; pages.push(i+55);  return pages.join(",");})();
            - to_block
            - split:
                context: text
                delimiter: ","
            - find: 
                path: .splitted 
                do: 
                - parse
                - variable_set: start
                - register_set: <%url%>&?sz=55&start=<%start%>&format=page-element
                - walk:
                    to: value
                    do:
                    - find:
                        path: a.name-link
                        do:
                        - parse:
                            attr: href
                            filter: ^([^\?]+)
                        - space_dedupe
                        - trim
                        - normalize:
                            routine: replace_matched
                            args:
                                javascript\:: ''
                                ^\#$: ''
                        - if:
                            match: \s*[a-z]+
                            do:
                            - normalize:
                                routine: url
                            - link_add:
                                pool: pages
- walk:
    to: links
    pool: pages
    do:
    - sleep: 2
    - find:
        path: 'div#pdpMain'
        do:
        - variable_clear: desc
        - variable_clear: pid
        - variable_clear: cid
        - variable_clear: key
        - object_new: product
        - eval:
            routine: js
            body: '(function (){var d = new Date(); return d.toISOString()})();'
        - object_field_set:
            object: product
            field: date
        - static_get: url
        - object_field_set:
            object: product
            field: url
        - find:
            path: h2.product-name
            do:
            - parse
            - space_dedupe
            - trim
            - object_field_set:
                object: product
                field: name
        - register_set: Diesel
        - object_field_set:
            object: product
            field: brand
        - find:
            path: div.product-content-header>h6
            do:
            - parse:
                filter: ^ID\:(.+)
            - space_dedupe
            - trim
            - if:
                match: \w+
                do:
                - variable_set: pid
                - object_field_set:
                    object: product
                    field: sku
        - find:
            in: doc
            path: meta[name="description"]
            do:
            - parse:
                attr: content
            - space_dedupe
            - trim
            - variable_set: desc
        - find:
            path: ul.discription-list-inner
            slice: 0
            do:
            - find:
                path: li.bullet-list-none
                do:
                - parse
                - space_dedupe
                - trim
                - variable_set: desc
        - variable_get: desc
        - object_field_set:
            object: product
            field: description
        - find:
            path: ul.Color>li>a
            do:
            - parse:
                attr: title
            - space_dedupe
            - trim
            - if:
                match: \w+
                do:
                - object_field_set:
                    object: product
                    joinby: "|"
                    field: variations
            - parse:
                attr: href
            - space_dedupe
            - trim
            - if:
                match: \w+
                do:
                - walk:
                    to: value
                    do:
                    - find:
                        path: ul.product-slides-list1>li>a
                        do:
                        - parse:
                            attr: data-href
                        - space_dedupe
                        - trim
                        - if:
                            match: \w+
                            do:
                            - object_field_set:
                                object: product
                                joinby: "|"
                                field: images
        - find:
            path: div.product-content-header>div.product-price>span.price-sales:contains('$'),div.product-content-header>div.product-price>span.price-final-value:contains('$')
            do:
            - parse:
                filter:
                - \$([0-9\.\,]+)\s*-
                - \$([0-9\.\,]+)
            - normalize:
                routine: replace_substring
                args:
                    \,: ''
            - space_dedupe
            - trim
            - object_field_set:
                object: product
                type: float
                field: price
            - parse
            - normalize:
                routine: replace_matched
                args:
                    \$: USD
            - object_field_set:
                object: product
                field: currency
        - find:
            path: ol.breadcrumb>li>h4>a
            slice: 1:-1
            do:
            - parse
            - space_dedupe
            - trim
            - if:
                match: \w+
                do:
                - object_field_set:
                    object: product
                    joinby: "|"
                    field: categories
        - find:
            path: div.product-content-header>h5
            do:
            - parse
            - space_dedupe
            - trim
            - if:
                match: \w+
                do:
                - object_field_set:
                    object: product
                    joinby: "|"
                    field: categories
        - find:
            path: ul.product-slides-list1>li>a
            do:
            - parse:
                attr: data-href
            - space_dedupe
            - trim
            - if:
                match: \w+
                do:
                - object_field_set:
                    object: product
                    unique: yes
                    field: images
        - object_save:
            name: product

Пример данных, собранных парсером с сайта

Ниже приведен пример датасета с несколькими товарами в формате JSON (для наглядности). Датасет может быть скачан и как CSV, XLSX, XML, и любой другой текстовый формат используя темплейтный подход.

[{
    "product": {
        "brand": "Diesel",
        "categories": "SALE|MEN|Denim|STRAIGHT|Straight",
        "currency": "USD",
        "date": "2018-02-11T12:07:58.436Z",
        "description": "Straight; Regular waist; Light blue; Destroyed; Non-Stretch",
        "images": "http://demandware.edgesuite.net/sits_pod26/dw/image/v2/AAPK_PRD/on/demandware.static/-/Sites-diesel-master-catalog/default/dwad4015e3/images/large/00SD5V_084PK_01_C.jpg?sw=2000",
        "name": "DAGH 084PK",
        "price": 228,
        "sku": "00SD5V084PK",
        "url": "http://shop.diesel.com/straight/dagh-084pk/00SD5V084PK.html",
        "variations": "Light Blue"
    }
}
,{
    "product": {
        "brand": "Diesel",
        "categories": "SALE|MEN|Denim|TAPERED|Tapered",
        "currency": "USD",
        "date": "2018-02-11T12:08:02.206Z",
        "description": "Tapered; Regular waist; Dark blue; Treated; Stretch",
        "images": "http://demandware.edgesuite.net/sits_pod26/dw/image/v2/AAPK_PRD/on/demandware.static/-/Sites-diesel-master-catalog/default/dwc5639d0c/images/large/00SS6R_084SW_01_C.jpg?sw=2000",
        "name": "JIFER 084SW",
        "price": 298,
        "sku": "00SS6R084SW",
        "url": "http://shop.diesel.com/tapered/jifer-084sw/00SS6R084SW.html",
        "variations": "Dark Blue"
    }
}
,{
    "product": {
        "brand": "Diesel",
        "categories": "SALE|MEN|Denim|STRAIGHT|Straight",
        "currency": "USD",
        "date": "2018-02-11T12:08:05.621Z",
        "description": "Straight; Regular waist; Light blue; Clean; Non-Stretch",
        "images": "http://demandware.edgesuite.net/sits_pod26/dw/image/v2/AAPK_PRD/on/demandware.static/-/Sites-diesel-master-catalog/default/dw4e759043/images/large/00SD5V_084SX_01_C.jpg?sw=2000",
        "name": "DAGH 084SX",
        "price": 228,
        "sku": "00SD5V084SX",
        "url": "http://shop.diesel.com/straight/dagh-084sx/00SD5V084SX.html",
        "variations": "Light Blue"
    }
}]
Михаил Сисин Со-основатель облачного сервиса по сбору информации и парсингу сайтов Diggernaut. Работает в области сбора и анализа данных, а также разработки систем искусственного интеллекта и машинного обучения  более десяти лет.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт защищен reCAPTCHA и применяются Политика конфиденциальности и Условия обслуживания применять.

Срок проверки reCAPTCHA истек. Перезагрузите страницу.