Ассортимент магазина с помощью Лягушки

Техническое SEO Лягушка Скрипты

Иногда полезно получить данные о количестве каких-то сущностей на продвигаемых страницах. Например, число товаров, число тех, которые не в наличии и т.д. (в основном, речь об ассортименте интернет-магазина).

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


1. Варианты

Для получения данных Фрогом нужны экстракторы – CSS+XPath (см. п. 4) или CSS (см. п. 5).

Для подбора экстракторов нужно знание CSS селекторов и/или Xpath, подбор экстракторов с технической стороны объясняться не будет

Для примера рассмотрим подсчёт когтеточек для кошек здесь (не реклама!).


2. Селектор карточки каталога

Для подсчёта товаров требуется всего один экстрактор, указывающий на одну сущность, которую хотим сосчитать на странице. Так как считаем товары, то нужен экстрактор, указывающий на карточку товара в каталоге – например, подойдёт CSS селектор .product-item__main:

CSS селектор для карточки каталога

Проверить, что не захватываются какие-то лишние сущности DOM можно так (должно быть 4x6=24 карточки):

document.querySelectorAll('.product-item__main')
Проверка КСС селектора через консоль

3. Страницы пагинации

В данном случае посчитаем и число страниц пагинации категории – для целостного представления об ассортименте.

Однако, для поиска ассортиментом является прежде всего то, что находится на одной странице. В данном случае, это первая страница пагинации – сама категория. Если пагинация была бы открыта для поиска (здесь она закрыта), то и тогда были бы большие сомнения, что поиск понимал бы реальный ассортимент.


3.1. Селектор для пагинации

Итак, вернёмся к извлечению данных о пагинации при парсинге.

Можно выбрать селектор .pagination .page-numbers:nth-last-child(2), проверка такая (должен быть ровно один нужный элемент на странице):

Проверка ЦСС селектора для пагинации

4. Получение данных с использованием XPath

4.1. Пагинация

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


4.2. Число товаров

А для подсчёта сущностей карточек товаров в категории удобнее всего использовать функцию count XPath + конвертировать ранее подобранный CSS-селектор .product-item__main в XPath, получим: //*[@class='product-item__main']. Итого, готовый селектор XPath получится таким:

count(//*[@class='product-item__main'])

4.3. Парсинг

Парсим Лягушкой с такими экстракторами/настройками:

Настройка экстракторов CSS и XPath для Фрога

4.4. Результаты

После парсинга получаем данные по ассортименту:

Результаты парсинга ассортимента Лягушкой

5. Получение данных без использования XPath

Только при помощи подобранных ранее CSS селекторов. Это более муторный способ – предыдущий гораздо удобнее засчёт отсутствия необходимости пост-обработки данных по числу товаров.


5.1. Парсинг

Парсим Лягушкой с такими экстракторами:

Настройка экстракторов Лягушки

Как ранее упоминалось, селектор пагинации обеспечит получение нужных данных без последующей обработки.

Ниже идёт старое описание, теперь рекомендуемый способ — спарсить любой элемент, который будет указывать на карточку каталога (спаршенное значение может быть отличающимся для разных карточек), и сосчитать с помощью fcce (с включённой опцией добавления счётчиков), и далее добавить данные о пагинации

А для экстрактора карточки каталога обязательно нужно выставить атрибут – чтобы для всех карточек в экспорте было единое значение. Здесь выставлен класс, но можно и любой другой (если такой есть).

Таким образом, количество товаров в категории будет равно числу колонок, где встречается значение атрибута. Например, видно, что в категории https://www.dogeat.ru/catalog/kogtetochki/dlya-koshek/homecat/ есть только один товар:

Визуальное распознание числа товаров в интерфейсе

5.2. Подсчёт встречаний в колонках

Теперь смысл затеи должен быть понятен – посчитать число колонок со значением product-item__main на каждом урле.

Наверняка это можно сделать более просто и красиво, но рассмотрю вариант с использованием такого скрипта Автоита. Итак:

  • Скачать и установить оболочку;
  • Скачать основной код с Гитлаба (файл с расширением .au3);
  • Там же скачать файл настроек (config.ini) и положить рядом с основным файлом скрипта;
  • В интерфейсе Лягушки на вкладке “Custom Extraction” нажать “Export” и сохранить в формате CSV в папку со скриптом, не меняя название файла;
  • Отредактировать в файле config.ini текстовый фрагмент экстрактора (для примера это product-item__main).
  • Запустить скрипт, дождаться завершения – в файле results.csv будут данные.

В рассматриваемом примере это выглядит где-то так (где количество встречаний и есть количество товарных карточек страницы категории):

Содержимое файла results.csv

5.3. Добавление данных о пагинации

Если мы экспортировали все экстракторы (Filter=All на вкладке Custom Extraction), то строки в файле results.csv совпадают со строками в файле экспорта Лягушки по всем экстракторам, и можно просто скопировать нужную колонку. Если нет, то свести данные с помощью Power Query.

Итого должно получиться где-то так:

Финальная таблица по ассортименту

6. Применение

Поиск пустых категорий, с малым количеством товаров, поиск числа товаров не в наличии на первой странице пагинации, и т.д.

Использованные картинки: 1