Quad.Wiki
Разбор карточки товара: Пример 1
Пример карточки
Нужно собрать фото, характеристики и описание.
Настройка полей делается во вкладке “Обработка” настроек парсера. В этой вкладке по умолчанию уже создан какой-то минимальный набор полей. Можно удалить какие-то поля, которые не нужны
В этой таблице вводятся теги HTML со страницы сайта, с помощью которых можно определить точное положение нужного текста в коде страницы сайта. Вводятся теги, ограничивающие нужный текст, а так же теги, которые ограничивают какой-то блок информации, из которого уже можно получить теги, ограничивающие нужный текст из этого блока. В таблице вводятся так же какие-то дополнительные настройки для каждого поля. Подробнее здесь: Парсер информации из карточек товаров
Код товара
Первое поле code - сюда записывается код товара с сайта, откуда парсится. Именно код, т.е. какой-то буквенно-цифровой идентификатор, который уникальный только для этого сайта и больше нигде не используется. Это не артикул производителя, который может быть одинаковый на разных сайтах и прайсах. Артикул записывается в поле article.
Если вы ссылки загружаете из какого-то прайса и в этом прайсе есть Код и загрузка происходит по коду, то не нужно парсером сохранять информацию в это поле, чтобы избежать проблем с дублированием товара
В примере код товара присутствует.
Нужно в браузере Chrome нажать на него правой кнопкой мыши и в появившемся меню выбрать “Просмотреть код”
Справа или снизу страницы откроется панель, в которой будет виден исходный код сайта в том месте, где мы кликнули при открытии меню.
Нужный нам код товара находится между выделенными тегами
т.е. в настройку поля можно скопировать то, что слева текста и то что справа. Для копирования в нужном месте нужно нажать правой кнопкой мыши и в открывшемся меню нажать на “Edit as HTML”
получим:
В настройках поля будет выглядеть так:
Такая настройка говорит парсеру, что нужно в качестве Кода вырезать со страницы текст, который находится между текстом <span class="value"> и </span>
Но нужно понимать, что текст <span class="value"> может встречаться на странице в разных местах, поэтому нужно проверить, чтобы он был уникальным. Для этого копируем этот текст и открываем код страницы целиком. Для этого в любом месте страницы нажимаем правой кнопкой мыши и в меню выбираем “Просмотр кода страницы”
Если такого пункта нет, то кликните чтобы открыть меню в другом месте страницы, свободном от картинок и других элементов.
Откроется вкладка с полным кодом страницы
Нажимаем Ctrl-F и вставляем текст для поиска
Бывает, не находит вообще текст, это значит, что в исходном коде страницы есть какие-то ошибки или неточности, лишние пробелы и т.п., которые браузер исправляет автоматически и в коде элемента вы видите исправленный текст, а в коде страницы - исходный, который отличается. В этом случае нужно скопировать значение товара, в примере это код и найти его в полном тексте страницы, и уже здесь смотреть, какие теги находятся рядом со значением. При этом важно убедиться, что это именно то место, по окружающему его тексту, так как тот же Код может выводиться в нескольких местах на странице, в том числе и “невидимых” для человека.
Если нашло только 1 вхождение текста, значит все ок, его можно использовать в настройке. Если нашло 2 или больше значений, как на скриншете выше, значит в настройке поля нужно еще ограничить блок, из которого будет вырезан нужный текст.
Для этого возвращаемся к коду элемента страницы и смотрим, можно ли выделить блок, содержащий поле Код.
В примере видно, что перед самим кодом есть несколько тегов, которые скорее всего относятся только к полю код, например, <div class="product-code"> или <span class="title">Код товара:</span>
Т.е. парсеру, чтобы правильно получить код товара, нужно сначала перейти к тегу <div class="product-code">, а уже потом вырезать текст между тегами <span class="value"> и </span>
Тег, куда нужно перейти, вводится в колонке “Ограничить блок слева”
Нажимайте кнопку “Сохранить” после ввода настроек
Чтобы Код товара сохранился не только в товаре в прайсе, а еще был виден и в результатах парсера, можно поставить 1 в колонке “Сохранить”.
В этом случае код, если он спарсится правильно, будет виден в результатах в колонке Значение 1:
Всего таким способом можно сохранить 5 каких-то значений разных полей, в зависимости от указанной в колонке “Сохранить” цифры.
Можно теперь перейти во вкладку “Выполнение / Результаты” и запустить тест для какой-нибудь ссылки, чтобы проверить, будет ли получена информация.
При первом выполнении появится такое сообщение, нужно нажать Ок.
Дождитесь пока парсер завершит работу
Если в карточке товара не много фото, то обычно эта операция занимает 30-60 секунд. Если время выполнения длится больше 2х минут, то значит, что что-то не так, нужно нажать Отмена и смотреть логи парсинга или запускать тест через Fiddler.
Нажмите кнопку Обновить после завершения теста - если какую-то информацию сохраняли в Значение, то оно должно появиться.
Так же результат по парсингу товара можно посмотреть в карточке товара
Карточка открывается отмеченной кнопкой или двойным щелчком по строке с товаром.
Если значение не появилось, значит есть какие-то проблемы с настройкой поля. Посмотреть лог выполнения парсинга можно в папке Quad Solutions\SyncLog\qs_logs
В этой папке будут подпапки, в названии которого содержится ID парсера. В папке файлы логов - отсортируйте по дате и смотрите самые свежие. Информация о значениях, полученных парсером, находится в конце файла. Если значение найдено, вы увидите примерно такой текст
Если нет, то будет написано Not Found.
В этом же файле есть текст страницы, полученной парсером. Можно в нем поискать те теги, которые вы указали в настройках. Если теги не найдены, то как и в браузере, можно в тексте найти нужное значение и посмотреть, какие теги рядом с ним. Если нужное значение вообще не находит в тексте, то может быть 2 варианта:
1. Внутри значения присутствуют какие-то невидимые символы, например неразрывный пробел, либо какие-то теги, которые отделяют рубли от копеек, можно попробовать поискать только по части значения.
2. Информация на страницу подгружается каким-то дополнительным запросом, в этом случае вы не сможете настроить парсер.
Артикул
Поле article - сюда сохраняется артикул производителя. Если он есть на странице, то действия такие же как и с Кодом, если нет, то поле можно просто удалить.
Производитель
Поле manuf - сюда записывается производитель (бренд) товара.
В своем примере я не нашел на странице в явном виде выделенный Бренд, но если открыть исходный код страницы и поискать бренд, то можно увидеть, что он выводится в специальной разметке, которую делают на сайте в целях продвижения в поисковиках или для формирования каких-то других фидов.
Если какой-то нужный вам атрибут товара не виден на странице, то это не значит, что его нет. Попробуйте поискать его в исходном коде страницы. Как посмотреть исходный код - в описании поля Код.
Настройки получения бренда из примера:
Название товара
Поле title - в это поле загружается название товара.
Если вы ссылки загружаете из какого-то прайса и этот прайс загружается по Названию, то нужно перенастроить прайс на загрузку по Коду, если название товара в прайсе не совпадает с названием на сайте. Если в прайсе есть только название, то его нужно сохранять еще в какое-то дополнительное поле и загружать по этому дополнительному полю, так как если парсер поменяет название товара, то товар задублируется при загрузке прайса.
Так же в случае, если название товара нужно заменить на то, которое на сайте, то в настройках загрузки прайса нужно установить птичку “Записывать только не заполненные поля”
Поле Название загружается так же, как и другие поля.
В моем примере Название товара между такими тегами.
Тег get-product-title"> встречается на странице только 1 раз, поэтому не нужно ограничивать блок текста.
Цена и РРЦ товара
Поле price - в это поле записывается цена товара. Разделитель целой и дробной части программа понимает и точку и запятую. Важно, чтобы при парсинге внутри числа не было никакого текста. Текст можно убрать птичкой “Только цифры” - в этом случае программа оставляет в тексте только числа, точку и запятую.
Иногда дробная часть (копейки) отделяются от рублей какими-нибудь html-тегами - в этом случае их нужно заменить.
Например, цена после парсинга: 120<sup>99
Если программа отработает просто с птичкой “Только числа”, то у вас получится цена 12099, хотя 99 это копейки. Чтобы такого не произошло, нужно заменить <sup>на “точку”. Для этого поставьте курсор в ячейку “Замены” у нужного поля и нажмите появившуюся кнопку.
В замены добавьте такие значения:
В колонке N вводится номер по порядку, в котором происходит замена. Чем меньше число, тем первее работает замена. Число вводить обязательно.
Поле валюты price_curr_id добавляется по умолчанию. В него записывается ИД валюты. По умолчанию устанавливается ИД основной валюты программы.
Если на сайте цены в другой валюте, то ИД можно посмотреть во вкладке Конфигурация.
Если с сайта кроме цены вам нужно получить еще РРЦ (рекомендованную цену) или использовать цену с сайта в качестве РРЦ, то загружать такую цену нужно в поле fixed_price и для него есть собственное поле валюты. Добавить поля можно этой кнопкой:
Бывают ситуации, когда при определенных условиях цена, которую нужно парсить, выводится на сайте в разных карточках по-разному. Например, цена со скидкой может быть в других тегах, но вам нужна цена продажи товара, не зависимо от того, со скидкой она или нет. Поэтому в карточке товара, где нет скидки, должна сохраняться обычная цена, а где есть скидка - цена со скидкой.
В этом случае поле price можно добавить несколько раз с разными условиями парсинга. Для второго и последующих полей price нужно в колонке Объединить указать настройку NOCAT, которая означает, что информация в этих полях не будет объединяться, а каждое последующее значение, если оно найдено, заменит предыдущее.
Для полей нужно указывать такой порядок, чтобы для вас информация из каждого последующего поля была важнее, чем из предыдущего, так как сохраняться будет именно она.
Наличие товара
Наличие товара определяется по какому-то тексту, присутствующему в карточке товара. Например, это может быть тест “В наличии” или “Под заказ”, или вам важно только отделить товары, которых “Нет в наличии”.
В моем примере понять, что товар В наличии, можно по кнопке добавления в корзину.
Если товара нет в наличии, то и кнопки такой в карточке нет, а так же присутствует метка “Нет в наличии”
Описание настроек наличия можно посмотреть здесь Парсер информации из карточек товаров
Я указываю ид наличия 1 и текст кода кнопки “В корзину”
Моя настройка:
Настройка означает, что в наличие будет установлено наличие с ИД = 1, если на странице присутствует такой текст (после вертикальной черты). Если такого текста нет, то товар будет установлен как “Нет в наличии”.
Можно было бы наоборот, указать теги для типа Нет в наличии (ИД = 2), в этом случае при наличии в тексте страницы текста, товар устанавливался бы как Нет в наличии, при отсутствии текста - В наличии. Можно задать несколько разных типов наличия, каждый с новой строки.
Описание товара
В программе по умолчанию есть 2 поля для описания: info - полное описание, shortinfo - краткое описание.
Добавляем новое поле для записи полного описания.
Добавляем теги
В результате получаем такое описание, в котором содержатся ссылки на картинки, которые идут на сайт, откуда парсили.
Чтобы посмотреть нужно перейти в карточку товара и в ней внизу вкладка Описание. Можно так же 2 раза кликнуть по описанию и откроется форма просмотра текста как в браузере.
Картинки в описании подгружаются с другого сайта.
Чтобы убрать ссылки нужно в настройках поля в колонке “Дополнительно” указать параметр REMURL - в этом случае парсер удалит все ссылки из текста. Не забывайте нажимать кнопку Сохранить после внесения изменений в настройки.
После такой настройки описание будет выглядеть так:
В данном примере в карточке товара есть несколько блоков с описанием, расположенных в разных местах страницы. Нужно добавить к общему описанию еще 1 блок.
Для этого добавляется еще одно поле info.
Я не вырезаю весь блок, вместе с заголовком, а только текст внутри блока, так как не хочу, чтобы в названии блока дублировалось название товара.
В колонке Объединить указывается текст, который будет добавлен между первым блоком и следующим. <br/> - это HTML-код перевода строки.
Описания будут объединены в порядке, который указан в этой колонке, чем меньше порядок, тем первее будет идти текст.
После парсинга получается такой текст описания:
Добавим еще заголовок к блоку в котором описаны преимущества, для этого можно задать шаблон, по которому формируется текст полученного поля. Шаблон указывается в колонке “Шаблон”. Здесь для описания нужно вводить HTML-текст.
<b>Преимущества:</b><br/>[[value]]
Текст, который получен парсером, вставляется в шаблон на место [[value]]
В моем примере перед текстом добавляется текст, выделенный жирным, Преимущества:
и после него перенос строки. Результат:
Так же в описание я хочу добавить еще страну производства
Из текста кода страницы видно, что нет никакой возможности задать тег Слева такой, чтобы он был на странице только один. Даже если ограничить блок слева, то получится, что теги совпадают с тегами “родины бренда”, а мне нужна именно страна производства.
При указании тегов Слева и Справа парсер сначала ищет первый попавшийся тег Слева, затем от него первый тег Справа и вырезает то что между ними. В примере выше нужна “обратная” работа, т.е. сначала найти тег Справа, в который можно ввести например “— страна производства” и уже от него искать тег Слева. Чтобы так сделать, задаются такие настройки (теги как обычно, слева и справа):
А в колонку “Дополнительно” указывается настройка FROMRIGHT, при наличии которой парсер будет искать не слева направо, а справа налево.
Так же добавляю шаблон для значения, чтобы перед текстом добавилась фраза “Страна производства:” и разделитель при объединении полей.
Страна производства: [[value]]
Получаем такой результат:
Выделить жирным “Страна производства” можно используя теги <b> и </b> по краям выделяемого текста.
<b>Страна производства:</b> [[value]]
Группа товара
Группу можно сохранять только одного уровня, т.е. нельзя сохранить дерево групп целиком. Группа товара видна обычна в “хлебных крошках” (целиком вместе с вышестоящими группами) или присутствует в карточке товара где-то отдельно.
Либо можно поискать в исходном тексте страницы, бывает, что присутствуют невидимые теги, содержащие название группы.
Для сохранения группы используется поле category
В моем случае можно использовать такие настройки:
После тестового запуска создалась группа и товар добавился в нее
Если бы в коде страницы не было нужного текста группы, и он был бы только в “хлебных крошках”, то парсинг можно было бы настроить с помощью “регулярного выражения”. С помощью регулярных выражений задаются специальные шаблоны в определенном формате, которые помогают выделить нужные слова или фразы в случаях, когда это нельзя сделать просто вырезав текст между какими-то тегами.
Например, чтобы получить категорию товара, нужно из хлебных крошек извлечь вот эту часть:
Внешне это просто строка с разделителем, но в коде страницы это большой блок html-кода, из которого нужно вырезать только текст названий категорий и объединить его в общую строку с разделителем.
Сначала нужно вырезать блок, который содержит целиком этот текст
Название группы в этом тексте выглядит так:
<span itemprop="name">Инструмент</span>
Регулярное выражение, которое из этого текста получит слово Инструмент выгляди так
<span itemprop="name">(.+?)</span>
т.е. в уникальном тексте, относящемся к названию группы, заменяем текст, который нужно вырезать, на выражение (.+?)
Вводим этот текст в колонку “Регулярное выражение”, а так же вводим количество слов, которое нужно получить таким способом. Если в “Кол-во” ввести 0, то будут получены все слова. Если, например, 3, то будут получены только первые 3 слова, которые соответствуют выражению. В этом отличие от вырезания просто текста тегами, что можно вырезать сразу несколько или все соответствующие значения.
Конструкция .+? в выражении означает, что в этом месте может быть любой текст. Если ее взять в скобки (.+?), то это значит что нужно вырезать этот любой текст.
Использовать это можно и для других полей, когда рядом с нужным текстом есть какое-то постоянно меняющееся значение. Например получить группы можно и таким выражением
<span itemprop=".+?">(.+?)</span>
в отличие от исходного здесь слово name заменено на .+? , что значит, что в этом месте может быть любое слово или несколько. В первом же варианте в этом месте обязательно должно было бы быть name.
После выполнения создалась такая группа и в нее добавился товар.
Как видно, все слова из хлебных крошек добавились без разделителя. Разделитель можно задать в настройках в колонке Объединить (можно вводить любой текст).
Получим такой результат
В группе нам не нужно слово Главная - его можно убрать с помощью замены.
Я заменяю Главная на пусто. Номер в колонке N вводить обязательно, это порядок, в котором будут идти замены. Результат:
Если мне не нужно последняя группа, в моем примере это Бренд, то нужно задать такое выражение, которое бы в конце ожидало присутствие еще одной группы. Например так:
<span itemprop="name">(.+?)</span>.+?<span itemprop="itemListElement"
В этом выражении указано, что в конце нужного блока должен быть текст <span itemprop="itemListElement" который является началом очередного блока в хлебных крошках - соответственно за последним элементом не следует больше блоков и он не попадет в результаты.
Итого получили такую группу
Дополнительные поля
Помимо основных полей, информацию можно сохранять в любое пользовательское поле. Поле можно создать сразу из окна настроек парсера, если оно не добавлено раньше. Код поля можно посмотреть здесь же.
В карточке товара примера есть блок текста “Комплектация”. Я хочу его сохранить отдельным полем, чтобы потом выгружать отдельным свойством на сайт.
Для этого добавляю пользовательское поле с типом Текст.
Обратите внимание, что Текст - это неограниченное количество символов. Если добавить тип поля “Строка”, то в нем максимум сохранится 255 символов.
Ввожу название поля, сохраняю и копирую код поля
Добавляю новое поле для парсинга и ввожу в него код, скопированный выше.
Дальше ввожу настройки для получения информации в это поле такие же, как и для стандартных полей.
Изображения
Для парсинга изображений нужно создать дополнительное поле с типом Текст, назвать его можно, например “Фото BIG”. Перед добавлением обязательно проверьте список уже существующих полей, скорей всего это поле у вас уже есть.
Добавить поле можно этой кнопкой:
В этом случае у поля заполнятся значения по умолчанию, нужные для парсинга фото. При этом будет сразу выбран и код поля, если у вас в базе есть поле с названием “Фото BIG”.
Чтобы скачать картинки, нужно сохранить ссылки на них. Ссылки нужно искать в исходном коде страницы, в области, где отображаются фото товаров.
Обычно ссылки есть в коде маленьких изображений.
В большинстве случаев там ссылки на маленькие фото
Чтобы найти ссылку на большое фото, можно попробовать скопировать только название картинки и поискать его по всему тексту страницы
Чаще всего большое фото называется так же, как маленькое, только находится в другой папке, и ссылки на большие фото можно найти в тексте страницы.
Нужно определить блок, в котором находятся ссылки на большие фото
И из этого блока с помощью регулярного выражения извлечь все фото. Как использовать регулярные выражения описано для поля “Группа товара” и в этой инструкции Парсер информации из карточек товаров
Если на странице вы нашли ссылки только на маленькие фото, то выберите какое-то маленькое фото - подгрузится и большое фото.
Скопируйте в блокнот ссылку на большое и на маленькое фото и сравните, чем они отличаются. В моем примере они отличаются папкой, поэтому я могу спарсить ссылки на маленькие фото и заменить в них папку на большую.
Настраиваем вырезание блока с картинками.
Регулярное выражение для картинок:
src="https://cdn.site.ru/images/goods/(.+?)"
обратите внимание, я вырезаю часть, которая содержит не только название фото, но и папки, так как папки в разных группах товаров будут разные
На сайте из примера есть еще картинки, которые добавлены пользователями. Эти картинки не нужны и здесь есть возможность их не парсить, так как у них ссылка начинается не так, как ссылка на картинки, добавленные сайтом.
Пользовательские в папке responses, а основные в папке goods, поэтому эта папка присутствует в регулярном выражении и будут выбраны только фото, путь которых содержит goods.
Добавляю замену, чтобы из ссылки на маленькое фото сформировалась ссылка на большое фото.
Так же добавляю шаблон, который сформирует из части ссылки полную ссылку
https://cdn.site.ru/images/goods/[[value]]
В настройке в колонке “Папка для файлов” указывается путь, в который будут сохраняться фото.
Если вы хотите, чтобы сохранялись только ссылки на фото, а сами фото не скачивались, то этот путь нужно удалить, т.е. очистить колонку.
Если вы не будете скачивать фото сразу, то нужно поменять приоритет скачивания фото для этого прайса. Перейдите во вкладку Прайсы / внизу 2. Загрузка прайсов, нажмите кнопку Обновить. Найдите в списке ваш прайс и измените приоритет в колонке “Из. пр.” на любой другой, у которого на конце не будет цифры 9. Цифра 9 на конце означает, что фотки для этого прайса не будут скачиваться при заполнении контента, так как они уже скачались парсером. Любой другой приоритет, без 9 на конце, например “100”, значит, что фото будут скачаны по ссылкам при обновлении контента (как обновлять контент будет написано ниже).
Приоритет нужен для того, чтобы расставить сайты, с которых парсятся фото, в порядке приоритета. Чем больше приоритет, тем первее парсятся картинки. Если картинки спарсились с одного сайта, то с других сайтов они больше не будут парситься.
После выполнения теста в папке, указанной в настройке поля, должны появиться фотки (они будут еще разбиты на дополнительные подпапки, в названии которых первые цифры ИД товара из прайса, за исключением последних трех цифр).
Если фото не появились, значит что-то не так и нужно смотреть логи.
Характеристики
Для парсинга характеристик нужно создать дополнительное поле с типом Текст, назвать его можно, например “Характеристики Парсер” (если назовете так, то оно будет автоматически подставляться). Перед добавлением обязательно проверьте список уже существующих полей, скорей всего это поле у вас уже есть.
Добавить поле с настройками по-умолчанию можно этой кнопкой:
В настройках нужно указать теги для получение полного текста блока с характеристиками
Дальше нужно задать параметры парсинга характеристик. Описание здесь Парсер информации из карточек товаров в разделе “Получение характеристик”
В шаблоне по умолчанию в колонке Дополнительно уже есть подсказки
В моем примере для названия характеристики есть уникальные теги, поэтому можно использовать их, без блоков.
Очищаю первые 2 строки, в которых задаются настройки блока и добавляю настройки для парсинга названия характеристики.
Для значений характеристик перед выводом значения есть какой-то не уникальный текст. В нем выводится дубль значения характеристики, но не факт, что он будет соответствовать значению всегда.
Поэтому сначала добавляем переход к блоку itemprop="value" , а затем парсинг между > и </span>
и удаляю последние 2 строки, так как характеристики выводятся всегда в одинаковом виде и не нужен второй способ получения названия характеристики.
Обратите внимание, что конец блока можно не указывать, в этом случае парсер не вырезает блок, а просто переходит к его началу.
В результате после тестового парсинга должна получиться такая таблица с характеристиками
Для формирования отдельных характеристик вам нужно:
1. Добавить товар, полученный парсером, в собственный прайс или же связать товар с вашим товаром, если он у вас уже есть. Инструкции:
Ручное добавление товара из прайса поставщика
Ручное сопоставление из вкладки Прайсы
есть так же вариант автоматического добавления и сопоставления - ищите соответствующие пункты слева в меню.
Чтобы сформировались характеристики, у группы, в которую входит товар, должен быть установлен тип товара.
Подробнее про типы товаров: Типы товаров
2. Создайте набор характеристик и задание по их формированию.
Для этого перейти во вкладку Автоматизация / внизу Sync.X
Добавить действие (если оно не было добавлено раньше) Парсер / Характеристики
Указать название действие, например “формирование характеристик site.ru”. Сохранить и перейти во вкладку Настройки.
Нажмите кнопку с тремя точками.
В открывшемся окне добавьте новый набор характеристик, введите его название.
В поле “Прайс для которого будут сформированы характеристики” выберите Основной прайс.
В поле “Прайс” выберите прайс, в который сохраняет результаты парсер.
В поле “Поле” выберите поле, в которое сохраняются характеристики.
Нажмите Сохранить и закройте окно.
3. Выполните формирование характеристик
Выберите созданный набор характеристик, сохраните настройки и принудительно запустите задание
Поменяйте так же тип запуска на “Вручную” и уберите птичку “Акт.”
Перейдите во вкладку Статус и дождитесь завершения формирования характеристик. Статус не обновляется автоматически, нужно нажимать кнопку Обновить.
После завершения у товара должны появиться характеристики. Найдите товар в Продукции и откройте окно “Характеристики Quad.Site”
Если все ок, то характеристики в окне будут: