Розмова з підтримкою — замість читати: навіщо це потрібно, що налаштувати і що ви отримаєте.
Парсер уже стоїть на сторінці товару: обхід налаштований, сторінки приїжджають. Далі питання одне — які дані збирає парсер із цієї сторінки й куди вони лягають. Відповідь точна: 64 рядки правил, з них 33 поля картки товару, окремі списки під фото, відео й файли та ще один набір — під характеристики. Кожне поле вмикається одним селектором, і порожній селектор означає «не збирати»: жодних значень за замовчуванням у поле не підставиться.
Стаття відповідає на три питання. Що взагалі можна забрати. Що програма робить зі знайденим значенням, перш ніж записати його в прайс. І чому те, що видно на сайті, іноді виглядає в прайсі інакше — з зайвим словом, нулем замість ціни або назвою розділу замість товару.
- Вікно
- «Налаштування завантаження даних із сайту», вкладка «Налаштування завантаження»; для характеристик — ще «Зіставлення атрибутів»
- Право доступу
- доступ до вікна, яке в правах записане як «Прайс-листи» (у меню — «Список прайс-листів»): обидва вікна відкриваються лише з картки джерела
- Підготувати
- заведене джерело-парсер і адресу однієї картки товару на сайті — на ній перевіряється кожне поле
Як завести джерело-парсер, налаштувати обхід сайту (розділи → посилання на товари → картка), написати , перевірити його кнопкою тесту й прочитати журнали — в статті Парсинг сайтів. Тут про це не буде: ця стаття починається там, де парсер уже стоїть на потрібній сторінці.
Де це у програмі
Поля налаштовуються в сітці правил — це вкладка «Налаштування завантаження» вікна «Налаштування завантаження даних із сайту». Вкладка є тільки в універсального парсера: у готового модуля (Rozetka, PROM, Hotline, eBay, Amazon та інші) правила розбору написані нами, і змінювати там нічого.
Жодне вікно парсера в меню не виведене. Дістатися до них можна лише через список прайс-листів.
- Меню
- Довідники → Обробка прайс-листів → Список прайс-листів
- Сітка правил
- виберіть рядок джерела типу «Парсер сайту» → кнопка «Налаштування» в шапці правої панелі → вкладка «Налаштування завантаження»
- Зіставлення атрибутів
- там же, в шапці правої панелі: стрілка біля кнопки «Зіставлення товарів» → пункт «Зіставлення атрибутів»
- Із картки джерела
- вкладка «Товари» → бургер додаткових операцій → «Зіставлення атрибутів»
1
Заголовок групи «Картка товару»2
Колонка «Назва поля»3
Колонка «Селектор №1»4
Рядок «Селектор операції» у групі «Атрибути»- Заголовок групи «Картка товару» — поля, які беруться з відкритої сторінки товару.
- Колонка «Назва поля» — перелік усіх полів, які вміє заповнювати парсер.
- Колонка «Селектор №1» — CSS-селектор, за яким береться значення поля.
- Рядок «Селектор операції» в групі «Атрибути» — селектор одного блоку характеристики на сторінці.
Кнопки «Зберегти» в цих вікнах немає: правка в комірці сітки йде на сервер одразу.
Шлях значення: що відбувається зі знайденим
Між тим, що ви бачите на сторінці сайту, і тим, що опиняється в прайсі, стоїть черга перетворень. Порядок у неї фіксований, і плутанина саме з цим порядком дає більшість «дивних» результатів.
- Що взяти. За замовчуванням береться текст елемента. Галочка «Отримувати HTML» лишає розмітку — вона потрібна опису, щоб зберігся поділ на абзаци й списки.
- Адреси добудовуються. Для полів-посилань і для фото відносна адреса перетворюється на повну;
#,javascript:,tel:,callto:іmailto:відкидаються цілком;//site.comстаєhttps://site.com; хвіст?click_track_data=зрізається; кириличний домен переводиться в punycode. - Автоматична чистка. З результату прибираються HTML-коментарі, атрибути тегів
class,rel,style,id,name,title,data, емодзі, нерозривні пробіли й переноси рядків; кілька пробілів поспіль схлопуються в один. - «Текст для очищення» вирізає з результату вказаний текст. Кілька значень пишуть через
|||. - «Знайти» / «Замінити» — три різні дії залежно від того, що заповнено. Обидва поля — звичайна заміна. Тільки «Замінити» — текст дописується в кінець значення. Тільки «Знайти» — текст вирізається.
- «Видаляти посилання» прибирає з результату теги посилань. Що саме видаляти — свій домен, чужі чи всі — задають два прапорці в акордеоні «Додатково» внизу вкладки. Якщо не відмічено жодного, видаляються всі посилання, а самі адреси вирізаються й з тексту.
- «Дозволені HTML теги» лишає з розмітки тільки перелічені, наприклад
<p><br><ul><li>. - Ціна зводиться до числа — про це нижче, окремим розділом.
- «Регулярний вираз» застосовується після всього попереднього — ним витягають зі вже очищеного значення потрібний шматок.
- «Розділювач значення» склеює знахідки, якщо селектор знайшов кілька елементів. За замовчуванням це кома з пробілом; для категорії — завжди
/, для фото —|||.
«Дозволені HTML теги» без галочки «Отримувати HTML» не роблять нічого. Без неї в значення приходить чистий текст елемента, тегів у ньому вже немає, і зберігати нема чого. Ці дві колонки працюють тільки в парі.
1
Колонка «Отримувати HTML»2
Колонка «Дозволені HTML теги»3
Колонка «Текст для очищення»4
Пара колонок «Знайти» / «Замінити»- «Отримувати HTML» — прапорець: чи брати значення разом із HTML-розміткою.
- «Дозволені HTML теги» — які теги лишити, якщо HTML брали цілком.
- «Текст для очищення» — фрагмент, який треба прибрати зі значення.
- «Знайти» / «Замінити» — пара для точкової заміни тексту в значенні.
Чотири колонки селектора — це запасні варіанти
У рядку кожного поля є «Селектор №1» … «Селектор №4». Програма пробує їх по черзі й зупиняється на першому, який дав значення. Зручно, коли акційні товари розмічені інакше за звичайні: у №1 кладете основний варіант, у №2 — акційний.
Виняток один — фото. У рядку image виконуються всі чотири колонки, а знайдене складається в один список фотографій.
Фіксоване значення замість пошуку
Якщо замість селектора написати текст у фігурних дужках, він стане значенням поля, і на сторінці нічого шукатися не буде. {Нова колекція} в полі «Виробник» проставить це слово всім товарам джерела.
Повний перелік полів
Універсальному парсеру при створенні заводять рівно 64 рядки правил, згрупованих за операціями обходу. Це і є повний список того, що взагалі можна забрати: більше рядків у сітці не з'явиться, дописати своє поле не можна.
| Операція | Рядків | Що це |
|---|---|---|
| Список посилань на категорії товарів | 1 | тільки «Селектор операції», полів немає |
| Список посилань на товари | 22 | «Селектор операції» та 21 поле — працюють у режимі «без відкриття картки» |
| Картка товару | 34 | «Селектор операції» та 33 поля |
| Атрибути | 7 | «Селектор операції» та 6 полів характеристики |
Заповнений з коробки селектор у всій сітці рівно один — h1 для поля «Найменування» в «Картці товару». Решта 63 рядки порожні.
Картка товару: 33 поля
Це основний набір. Поля йдуть у сітці окремими рядками, підписи — дослівно як в інтерфейсі. Один рядок підпису не має: фото стоїть у сітці під власним кодом image.
| Група | Поля |
|---|---|
| Назва й опис | Найменування, Модель, Опис короткий, Опис повний, Інструкція, Назва родини (варіації) |
| Ціни | Ціна, Ціна РРЦ, Ціна стара, Валюта, Вартість доставки |
| Наявність | Статус наявності (з прайсу), Кількість, Стан товару |
| Ідентифікатори | Артикул контрагента, Артикул виробника, Виробник, Штрихкод EAN, GTIN, Штрихкод ISBN |
| Розміри й вага | Висота, Ширина, Глибина, Вага, Габарит, Одиниця виміру, Колір, Гарантія |
| Категорія | Категорія з прайсу, Посилання на категорію |
| Медіа | image, Посилання на відео, Посилання на файл |
1
«Найменування» із селектором h1.pdp-main-title2
Поле «Гарантія» з порожнім селектором3
Поле «image» — селектор зображення товару- «Найменування» — заповнений селектор `h1.pdp-main-title`, значення береться з заголовка сторінки товару.
- «Гарантія» — приклад поля з порожнім селектором: цю характеристику власник джерела не налаштував.
- «image» — селектор зображення товару, значення заповнене.
Лістинг: 21 поле
Якщо в рядку «Селектор операції» групи «Список посилань на товари» стоїть галочка «Товари в цій операції», картки взагалі не відкриваються: назви й ціни беруться прямо зі сторінки розділу — з у. Набір полів там свій, коротший.
Це ті самі 20 полів картки, без розмірів, ваги, кольору, гарантії, стану товару, родини, інструкції, вартості доставки, посилання на категорію, відео й файлів, — і плюс одне, якого в картці немає: «Посилання на товар (URL)». У картці адреса відома й так, а в лістингу її треба забрати селектором.
У режимі лістингу товар без назви або без адреси не зберігається взагалі. Тому поле «Посилання на товар (URL)» тут обов'язкове нарівні з «Найменуванням»: без нього прогін пройде чисто, а в прайсі не буде жодного рядка.
У режимі «Картка товару» такої перевірки немає — товар без назви збережеться порожнім рядком.
Атрибути: 6 полів
«Назва атрибута», «Значення атрибута», «Назва блоку атрибута», «Опис атрибуту», «Посилання на картинку атрибута», «Посилання на картинку блока атрибута». Про них — окремий розділ нижче.
У переліку типів операцій є ще п'ята — «Фото», — але правил цієї операції не заводять. Фото збирає поле image у «Картці товару» й у лістингу.
Ціна: три поля й дві пастки
Цінових полів у картці три: «Ціна», «Ціна РРЦ» і «Ціна стара». Плюс «Валюта» — окремим рядком, текстом із сторінки.
Значення поля типу «ціна» зводиться до числа: з нього викидається все, крім цифр, коми й крапки; далі програма дивиться на роздільники, задані самому прайсу (за замовчуванням десятковий — крапка, тисячний — кома), і округлює результат до двох знаків. Тому 1 499,50 грн перетвориться на 1499.50 без жодного регулярного виразу.
Записана ціна одразу лягає в три колонки прайсу: власне ціну, початкову ціну й собівартість. Далі з нею працюють звичайні операції прайс-листа — націнка, округлення, перерахунок валюти.
Дві пастки, і обидві стосуються тільки режиму лістингу, а в «Картці товару» не працюють.
Дві ціни в одному елементі. Коли сайт малює стару й нову ціну поруч, у значення потрапляють обидві. У лістингу програма це впізнає: якщо позначка валюти (грн, ₴, $, USD, €, EUR, PLN та інші) трапилася в рядку двічі, беруться обидва числа й зберігається менше. У картці товару такого відбору немає — там доведеться уточнити селектор.
Копійки окремим елементом. Деякі сайти виводять гривні й копійки різними тегами. У лістингу для цього є прийом: селектор гривень пишуть у «Селектор №1», селектор копійок — у «Селектор №4», і програма складе їх у одне число, поділивши друге на сто. У картці товару такого складання немає: там «Селектор №4» у рядку поля — просто ще один запасний варіант.
Фото
Фото збирає одне поле; у сітці правил воно підписане кодом image. Виконуються всі чотири колонки селектора, знайдене складається в один список у порядку знаходження: перше фото стане головним у каталозі.
Що програма робить із кожною знайденою адресою — однаково в обох режимах:
- Відкидає заглушки. Якщо в адресі трапилося
placeholder,no-photo,empty,no_image,no-imageабо/brand/, знімок не зберігається зовсім. - Відправляє ютуб у відео. Посилання з
youtube.com/watch, яке потрапило вimage, зберігається як відео, а не як фото. - Пропускає вбудовані картинки
data:image; у «Картці товару» — ще й файли.swg. - Відкидає повтори — одна й та сама адреса в межах товару зберігається один раз.
- Екранує роздільники в адресі. Кома, крапка з комою й вертикальна риска перетворюються на
%2C,%3B,%7C: список фотографій зберігається одним рядком, і адреса виду…/image/width=1063,height=1063/…інакше поплуталася б із роздільником списку.
Дві речі є тільки в «Картці товару»:
- Найбільший розмір із
srcset. Якщо в тексті селектора є словоsrcset— наприклад,img.photo::attr(srcset), — із набору варіантів вибирається адреса з найбільшою шириною; запис2xпри цьому вважається більшим за1x. - Спроба підняти прев'ю до повного розміру. З адреси знімаються параметри
w,h,width,height,resize,size,thumb,thumbnail, а з імені файла — суфікси розміру виду_100x100,-150x150і слова-thumb,-thumbnail,_small,_mini,_tiny,-previewперед розширенням. Якщо після цього адреса перестала бути схожою на адресу, повертається початкова: краще робоче прев'ю, ніж битий «великий» файл.
У лістингу натомість програма вміє дістати адресу з CSS-фону — background-image: url(...).
Прийом із srcset у лістингу не працює. Селектор img.photo::attr(srcset) дасть там перший варіант набору — зазвичай найдрібніший, — а підняття прев'ю до повного розміру в лістингу теж немає. Якщо збираєте без відкриття картки, беріть повний розмір іншим атрибутом: ::attr(data-src), ::attr(data-large) або те, у чому сайт тримає велике фото.
Обмеження на кількість фотографій із однієї картки немає. Колонка «Макс. кількість результатів» читається лише з рядка «Селектор операції» й обмежує списки посилань, а не поля. На платформі в середньому виходить близько п'яти знімків на товар.
Парсер не завантажує самі файли — він зберігає адреси. Знімок стає вашою копією в хмарі вже під час оновлення базового каталогу; що при цьому відбувається з порядком, головним фото й тим, чия це копія, — у статті Фотографії товару. Водяний знак на цьому шляху не накладається взагалі: він є тільки у вивантаженнях.
Відео і файли
«Посилання на відео» й «Посилання на файл» є тільки в «Картці товару». Значення відео ріжеться по комі, повтори відкидаються.
У файлів є особливість, яку варто знати: програма бере адресу з атрибута href, а текст самого посилання зберігає як назву файла. Тобто селектор a.instruction дасть і адресу, і підпис «Інструкція з експлуатації», а селектор a[href*=pdf]::attr(href) — тільки адресу, з порожньою назвою.
Характеристики
Таблиця параметрів товару збирається окремою операцією — «Атрибути». Вона розбирає таблицю рядок за рядком і зберігає пари «назва — значення».
Задається чотирма селекторами:
- «Селектор операції», Селектор №1 — блок характеристик, наприклад
table.specs. Порожньо — шукати по всій сторінці. - «Селектор операції», Селектор №2 — селектор одного рядка характеристики, зазвичай
tr. - «Назва атрибута» і «Значення атрибута» — селектори комірок усередині рядка, наприклад
td.nameіtd.value.
Ще два рядки, «Назва блоку атрибута» й «Опис атрибуту», потрібні сайтам, де характеристики поділені на розділи.
Порожній «Селектор №2» зупиняє операцію повністю: без селектора рядка вона виходить, нічого не зібравши, скільки б не було заповнено нижче. Це найчастіша причина «характеристики не збираються, хоча все налаштовано».
Винятків два. Розмітка тегами <dl>: якщо Селектор №1 дорівнює dl або починається з dl., а Селектор №2 порожній, програма сама переписує список на таблицю й підставляє селектори рядка й комірок. І джерело, налаштоване на формат JSON, а не на HTML, — там порожній «Селектор №2» операцію не зупиняє (JSON — окрема тема, у цій статті все написане стосується розбору HTML).
1
«Селектор №2» рядка «Селектор операції»2
Рядок «Назва атрибута»3
Рядок «Значення атрибута»- «Селектор №2» рядка «Селектор операції» — селектор одного блоку характеристики (`.pdp-main-properties-row`), кожен такий блок дає одну пару «назва — значення».
- «Назва атрибута» — селектор `.pdp-main-properties-name`, звідки береться назва характеристики.
- «Значення атрибута» — селектор `.pdp-main-properties`, звідки береться значення характеристики.
Що програма розбирає сама
- «Назва: значення» в одній комірці. Якщо назва й значення злиплися в один рядок («Колір: жовтий»), впишіть двокрапку в колонку «Розділювач значення» рядка «Значення атрибута» — програма розріже рядок по ній.
- Значення без селектора. Якщо селектор значення не заданий зовсім, береться текст останнього вкладеного елемента рядка. На простих таблицях цього вистачає.
- Список усередині значення. Коли в комірці значення кілька пунктів
<li>, а розділювачів у тексті немає, пункти склеюються через «Розділювач значення»; за замовчуванням це похила риска з пробілами. - Знаки питання й двокрапки з назви атрибута видаляються.
Що програма викидає
Не зберігаються пари, де порожня назва або порожнє значення; пари, де назва дорівнює значенню (це майже завжди означає, що обидва селектори вказують на той самий елемент); повтор попереднього рядка; і повні дублі — по трійці «блок + назва + значення».
Приклад із живого налаштування: селектор блоку #pdpPropertiesContent, селектор рядка .pdp-main-properties-row, селектор назви .pdp-main-properties-name, селектор значення .pdp-main-properties. З однієї картки телевізора зібралося 42 характеристики — «Діагональ / 65"», «Частота розгортки / 165 Гц», «Рік випуску / 2026» — у тому порядку, у якому вони стоять на сайті; тією ж карткою приїхали 18 фотографій і один файл.
Що програма робить сама, без селектора
Кілька речей заповнюються без вашої участі, і на них не треба витрачати рядки правил.
Категорія. Якщо поле «Категорія з прайсу» порожнє, програма читає «хлібні крихти» з розмітки сторінки для пошукових систем і склеює їх через / . Далі з початку рядка зрізаються службові ланки — «Головна / », «Каталог / », «Магазин / », «Всі товари / » й ще з десяток варіантів, — а сама назва товару з рядка вирізається: остання крихта зазвичай і є назвою картки.
Артикул чиститься сам. З обох артикульних полів — «Артикул контрагента» й «Артикул виробника» — програма вирізає слова «Артикул товара», «Артикул», «Арт.», «Код товара», «Код товару», «Код», «SKU» і всі двокрапки. Це відбувається в обох режимах, і селектор .pdp-menu-code на сторінці з написом «Код: 7265989» покладе в прайс 7265989.
Наявність, артикул, виробник і одиниця виміру в лістингу. Коли ввімкнено «Авто пошук селекторів», а селектор не спрацював, програма шукає значення по тексту сторінки: наявність — за списком слів («В наявності», «Немає на складі», «Під замовлення», «Очікується» й ще два десятки українських, російських і англійських варіантів), артикул — за написами «Код товара:», «Код товару:», «Код:», «SKU:», «Артикул товара:», «Арт.:», виробника — за «Бренд:» і «Производитель:», одиницю виміру — за словами «ящик» і «/ящ». Якщо наявність так і не знайшлася, у лістингу підставляється +. Той самий увімкнений автопошук дописує «Бренд:» і «Производитель:» у чистку поля «Виробник» — це вже в обох режимах.
Автоочистка артикула дозволу не питає. Артикул Код-114 приїде як -114, SKU12 — як 12, а A:B — як AB. Якщо номери постачальника містять ці слова або двокрапку, забирайте їх не в артикульне поле, а, наприклад, у «Модель» — там нічого не вирізається.
Валюта й статус наявності доводяться після обходу. Коли останнє завдання закрито, до зібраних товарів застосовуються звичайні операції прайс-листа. Саме вони перетворюють текст «В наличии» з поля «Статус наявності (з прайсу)» на статус «В наявності» за правилами розпізнавання наявності, підставляють валюту й рахують націнку.
Мета-теги й текстова копія сторінки
Два прапорці на вкладці «Додатково», група «Які дані збирати». Обидва вимкнені за замовчуванням.
«Зберігати meta теги» — програма читає <title> і мета-теги сторінки й кладе їх у мета-поля товару: заголовок, опис і ключові слова. У режимі лістингу до кожного з трьох значень спереду дописується назва товару, у «Картці товару» вони пишуться як є.
«Зберігати текстову копію сторінок сайту» зберігає очищений від розмітки текст сторінки в поле «Текстова копія сторінки сайту» рядка прайсу. Працює це тільки в режимі «Картка товару»: у лістингу текст сторінки не зберігається, скільки б прапорець не стояв.
Чому товар може не зберегтися зовсім
Буває так: тест правила показує повний набір полів, а в прайсі товару немає. Причин рівно чотири, і всі вони спрацьовують уже після розбору сторінки, у момент запису.
- У режимі лістингу немає назви або адреси. Такий рядок мовчки пропускається.
- Спрацювало правило завантаження товарів. Якщо для джерела заведені умови відбору позицій, кожен знайдений товар проганяється через них, і той, що не підійшов, не зберігається.
- Ціна поза діапазоном. Поля «Завантажувати товари з ціною — починаючи від / до» в картці джерела, секція «Ціни». Товар із ціною поза межами не записується.
- Наявність у стоп-списку. У довіднику «Статуси наявності» в кожного статусу є перемикач «Не імпортувати товари з цим статусом (парсер сайту)». Увімкнули його для «Немає на складі» — і товари з таким текстом у полі «Статус наявності (з прайсу)» в прайс не потраплять. Окреме правило
{EMPTY}(або{ПУСТО}— приймаються обидва написання) відсікає товари з порожньою наявністю. За замовчуванням цей перемикач знятий у всіх статусів.
Як парсер відрізняє новий товар від уже завантаженого
Ознака одна — адреса сторінки. Ні назва, ні артикул, ні штрихкод у цьому не беруть участі.
Кожне завдання черги отримує ключ — контрольну суму адреси в нижньому регістрі. Перед тим як завести нове завдання, програма перевіряє, чи немає в черзі рядка з таким самим ключем; є — завдання не створюється. Тому той самий товар не качається двічі, навіть якщо лежить у трьох розділах сайту.
На цьому ж механізмі тримається прапорець «Видаляти товари перед завантаженням» (вкладка «Додатково», група «Обробка даних», за замовчуванням увімкнений):
- увімкнений — перед стартом товари джерела видаляються, і обхід збирає все заново;
- знятий — адреси всіх наявних товарів прайсу заносяться в чергу з позначкою «ігнорувати», і будь-яке завдання на таку адресу відкидається. Їхні сторінки в цей прогін просто не відкриваються. Ось так і працює обіцянка «завантажуватимуться тільки нові товари».
У знятого прапорця є наслідок, про який згадують не одразу: ціни й наявність наявних товарів не оновляться. Їхні сторінки не відкривали, отже нових даних немає. Режим годиться, щоб добирати новинки, і не годиться, щоб стежити за цінами.
Другий наслідок: якщо сайт змінив адресу товару, для парсера це новий товар. Старий залишиться в прайсі поруч із новим.
Що вміє знайти «Авто пошук селекторів»
Прапорець «Авто пошук селекторів» на вкладці «Додатково» вмикає підбір: там, де колонка селектора порожня, програма перебирає власний набір типових селекторів і записує знайдене прямо в сітку правил — до чотирьох колонок на поле.
Набори заведені не на всі поля. Ось повний перелік того, що автопошук уміє шукати:
| Поле | У картці товару | У лістингу |
|---|---|---|
image | так | так |
| Ціна | так | так |
| Ціна стара | так | так |
| Статус наявності (з прайсу) | так | так |
| Опис короткий | так | так |
| Артикул контрагента | так | так |
| Артикул виробника | так | так |
| Виробник | так | так |
| Категорія з прайсу | так | так |
| Посилання на категорію | так | поля немає |
| Посилання на відео | так | поля немає |
| Посилання на файл | так | поля немає |
| Найменування | — | так |
| Посилання на товар (URL) | поля немає | так |
Решту — «Опис повний», «Гарантію», «Вагу», «Колір», розміри, штрихкоди, «Модель», «Валюту», «Ціну РРЦ», «Кількість», «Стан товару», «Назву родини (варіації)», «Інструкцію», «Вартість доставки» й «Габарит» — автопошук не шукає ніколи. Ці селектори доведеться вписати руками. Окремо стоїть «Одиниця виміру»: селектора для неї автопошук не підбирає, але значення в лістингу підставити вміє — за словами «ящик» і «/ящ».
Заводський селектор назви — h1, і на сторінці, яка товаром не є, він теж щось знайде: заголовок розділу. Автопошук при цьому підставляє опис — перший блок із класом на кшталт description.
Так і сталося на живому налаштуванні: обхід зачепив сторінки міст, і в прайс приїхало 223 «товари» з назвами виду «Посуд в Ізмаїлі», «Посуд в Білій Церкві», «Посуд в Чернігові» й однаковим описом «з 8:00 до 21:00 (пн-нд) Безкоштовно по Україні…» — це банер доставки. У 38 із 223 рядків ціна нульова, а фотографій до них набралося 727 — банерні картинки розділів. Прогін при цьому завершився без жодної помилки.
Після першого прогону відкрийте сітку товарів прайсу й подивіться на назви й ціни. Нулі в ціні й назви, схожі на заголовки розділів, означають, що обхід зачепив не ті сторінки.
1
Назва — не товар, а місто2
Ціна отримана помилково- «GPS-навигаторы в Белой Церкви» та подібні рядки — це назви міст доставки, а не товари: автопідбір селекторів сплутав їх зі списком товарів на сторінці.
- Ціна поруч — беззмістовне число замість реальної вартості: джерело зібрало не той елемент сторінки.
Що буде з даними далі: перенесення в каталог
Зібране лежить у прайсі джерела: сам парсер у ваш каталог нічого не переносить. Переносить його оновлення базового каталогу — окремий прогін зі своїми налаштуваннями, і в більшості акаунтів він стартує сам одразу після завантаження всіх прайсів за розкладом. Тут — тільки те, що стосується саме даних парсера.
Характеристики стають атрибутами каталогу
Кожна зібрана назва характеристики шукає собі у вашому довіднику атрибутів. Порядок такий:
- назви зі словника зіставлень, позначені «Ігнорувати», видаляються;
- назви, для яких у словнику є пара, отримують ваш атрибут — і саму назву характеристики замінюють на назву атрибута каталогу;
- далі — збіг за назвою атрибута, спершу з пріоритетом головного синоніма;
- далі — збіг за контрольною сумою назви;
- усе, що не зіставилося, заводиться в довідник новим атрибутом. Якщо в характеристики було зібране поле «Назва блоку атрибута», блок із такою назвою теж заведеться в довіднику й атрибут ляже в нього; коли ім'я блока порожнє — у блок за замовчуванням.
Останній пункт і є причиною, чому довідник атрибутів у тих, хто парсить, розростається сам собою: сайти називають ту саму характеристику по-різному, і кожен варіант стає окремим атрибутом.
Вікно «Зіставлення атрибутів»
Це і є той словник. Дві вкладки — «Список нових атрибутів» і «Список зіставлених атрибутів». Підказка над сіткою каже, що робити: «Для порівняння атрибутів сайту з атрибутами базового каталогу виконайте подвійний клік мишкою на полі "Найменування атрибута базового каталогу" і виберіть потрібний атрибут зі списку.»
1
Колонка «Ігнорувати»2
Колонка «Найменування атрибута з сайту (джерело)»3
Колонка «Найменування атрибута базового каталогу»4
Кнопка «AI-зіставити» (не натискати)- «Ігнорувати» — прапорець, щоб виключити атрибут із зіставлення.
- «Найменування атрибута з сайту (джерело)» — назва характеристики, як вона прийшла з сайту постачальника.
- «Найменування атрибута базового каталогу» — з чим зіставити цю характеристику у власному каталозі.
- «AI-зіставити» — автоматичне зіставлення через ШІ; у цьому кадрі кнопку не натискали, вона лишається доступною для власника.
Колонки:
- «Ігнорувати» — характеристика не поїде в каталог узагалі. Сюди складають те, що характеристикою насправді не є, — рядки на кшталт «Товар на сайті бренду» чи «Офіційний сайт», які сайти теж кладуть у таблицю параметрів.
- «Найменування атрибута з сайту (джерело)» — як воно називається на чужому сайті.
- «Найменування атрибута базового каталогу» — на що замінюється у вас.
- «Категорія» — правило тільки для цієї категорії каталогу.
- «Найменування поля базового каталогу» — колонка стосується іншої підсистеми, пошуку контенту для вже наявних товарів. На перенесення прайсу в каталог вона не впливає.
Словник спільний на всі джерела: правило, заведене на одному парсері, спрацює на всіх. Це задумано так — постачальники пишуть «Діагональ», «діагональ дисплея» й «display diagonal», а атрибут у вас один.
Кнопка «AI-зіставити»
Розбирати кількасот нових назв руками довго, тому в тулбарі є ШІ-зіставлення. Спершу програма будує покажчик довідника атрибутів (поки його немає, у вікні висить «Індексація довідника атрибутів…»), потім на кожну назву підбирає кандидатів і питає модель, чи це та сама характеристика.
Відповідь оцінюється числом упевненості:
- 92 і вище — зіставлення застосовується само, у сітці воно позначене як «Зіставлено авто»;
- від 75 до 91 — це пропозиція: у рядку з'являються дві кнопки, «Підтвердити зіставлення» й «Відхилити (новий атрибут)». Підтвердити всі пропозиції одразу можна кнопкою «Підтвердити всі»;
- нижче 75 — характеристика вважається новою.
Ручне зіставлення ШІ не перетирає ніколи. Протилежні грані одного параметра модель зводити не має права: «Ширина», «Висота» й «Глибина», «Вага нетто» й «Вага брутто», «Мін. температура» й «Макс. температура», «Внутрішній діаметр» і «Зовнішній діаметр» — це різні атрибути. Над сіткою показані п'ять лічильників: «Зіставлено авто», «Пропозицій», «Нових», «Ручних», «Незіставлено».
Перенесення фото й характеристик від джерела-парсера в каталог коштує грошей — 0,05 € за товар, один раз на товар. Це не стосується звичайних файлових прайсів. Саме про це попереджає підказка біля прапорця «Завантажувати атрибути»: «При оновленні БК буде стягуватися дод. оплата». Як побачити суму до запуску й що буде, якщо балансу не вистачить, — у статті Оновлення базового каталогу.
Що збирають насправді
Полів у сітці багато, але на практиці налаштовують сім-вісім — решта стоїть про запас. Ось вони, у порядку від найпотрібнішого:
- Найменування, категорія з прайсу і ціна — без них рядок прайсу марний;
- виробник, артикул контрагента й артикул виробника — за ними працює зіставлення з вашим каталогом;
- статус наявності і кількість;
- опис повний і короткий, РРЦ, ціна стара — коли з сайту постачальника тягнуть ще й контент.
Порожнє поле — не «не підтримується»: кожне вмикається одним селектором рівно так само, як ціна чи назва.
Чого парсер не забирає
- Не бере полів поза переліком. 64 рядки правил заводяться при створенні джерела, і додати свій рядок не можна. Якщо потрібного поля немає, а на сайті воно є в таблиці характеристик, заберіть його як характеристику.
- Не завантажує файли фотографій. Зберігаються тільки адреси; копія в хмарі з'являється під час оновлення каталогу.
- Не накладає водяних знаків. Водяний знак є лише в налаштуваннях вивантажень і до збору даних відношення не має.
- Не збирає відгуків. Прапорець «Завантажувати відгуки» в налаштуваннях є, але універсальний парсер його не читає: по всій платформі зібраних відгуків нуль.
- Не бере того, чого немає в розмітці. Дані, які сторінка підвантажує вже після натискання кнопки, у розмітку не потрапляють, і селектор їх не знайде.
- Не звіряє товари за артикулом чи назвою. Новий товар від старого парсер відрізняє тільки за адресою сторінки.
- Сам у каталог нічого не переносить. Зібране лежить у прайсі джерела, доки його не забере оновлення базового каталогу — окремий прогін зі своїми налаштуваннями. Але запускати його руками потрібно не завжди: настройка системи «Виконувати оновлення базового каталогу після завантаження всіх прайсів за розкладом» за замовчуванням увімкнена, і тоді оновлення стартує саме в хвості завантаження прайсів, а якщо парсинг ще йде — дочікує його й запускається за хвилину після нього. Тому позначки видалення, лишені у вікні оновлення «щоб один раз перевірити», спрацюють уночі без вас: п'ять шляхів запуску.
- Не робить характеристику варіацією товару. Ознаки «це варіант розміру чи кольору» парсер характеристикам не проставляє — варіанти будуються з поля «Назва родини (варіації)» і з окремих сторінок товарів-опцій.
Що перевірити після першого прогону
Перший прогін завершився
Розбір частих проблем
| Що ви бачите | Чому так | Що зробити |
|---|---|---|
| У прайсі назви на кшталт «Посуд в Ізмаїлі», ціна нульова | Обхід зачепив сторінки, які товарами не є, а заводський селектор h1 узяв із них заголовок за назву |
Уточнити селектор посилань на товари або додати адреси розділів у «Список посилань» (про автопошук) |
| Артикул у прайсі коротший, ніж на сайті: замість «Код-114» лежить «-114» | Автоочистка артикула вирізає з обох артикульних полів слова «Артикул», «Арт.», «Код», «SKU» і всі двокрапки — незалежно від режиму | Забирати такий номер не в артикульне поле, а, наприклад, у «Модель», де чистки немає (що програма робить сама) |
| Характеристики не збираються, хоча селектори назви й значення заповнені | Порожній «Селектор №2» у рядку «Селектор операції» групи «Атрибути»: без селектора рядка операція виходить, нічого не зробивши | Вписати в «Селектор №2» селектор одного рядка характеристики, зазвичай tr (про характеристики) |
| Характеристик зібралося менше, ніж на сайті | Пари, де назва дорівнює значенню, і повні дублі програма відкидає сама. Однакові назва й значення означають, що обидва селектори вказують на той самий елемент | Уточнити селектори комірок «Назва атрибута» і «Значення атрибута» (що програма викидає) |
| У ціні опинилося число зі старої ціни або два числа поспіль | Селектор захопив блок, у якому намальовані обидві ціни. Відбір меншої з двох працює тільки в режимі лістингу | Уточнити селектор до елемента з поточною ціною або скористатися «Регулярним виразом» (про ціну) |
| Головним фото стала картинка-заглушка | Програма відкидає заглушки за іменами placeholder, no-photo, empty, no_image, no-image і за /brand/; заглушка з іншим іменем у цей список не потрапляє |
Уточнити селектор зображення; як запасний варіант — вписати всю адресу заглушки в «Текст для очищення» рядка image: значення стане порожнім і знімок не збережеться (про фото) |
| Фотографії приїхали маленькими, як мініатюри в галереї | Селектор узяв атрибут прев'ю. Автоматичне підняття до повного розміру знімає лише типові позначки на кшталт _100x100 або ?width= |
У «Картці товару» — узяти адресу з srcset: img.photo::attr(srcset), програма вибере найширший варіант. У лістингу srcset не допоможе: там треба інший атрибут із повним розміром (про фото) |
| У режимі «без відкриття картки» прогін пройшов, а в прайсі порожньо | Товар без назви або без адреси не зберігається | Заповнити в групі «Список посилань на товари» обидва поля — «Найменування» і «Посилання на товар (URL)» (про лістинг) |
| Прогін завершився, а ціни в наявних товарів колишні | Знятий прапорець «Видаляти товари перед завантаженням»: сторінки наявних товарів у цей прогін не відкривалися | Увімкнути прапорець, якщо потрібні свіжі ціни (про новий і старий товар) |
| У прайсі два однакових товари | Сайт змінив адресу товару. Для парсера це новий товар: він відрізняє позиції тільки за адресою | Видалити стару позицію або запустити прогін з увімкненим «Видаляти товари перед завантаженням» (про новий і старий товар) |
| У «Категорії з прайсу» опинилася назва товару або «Головна» | Категорія зібрана з хлібних крихт, а ваш варіант написання службової ланки не входить у список, який програма зрізає | Дописати зайвий текст у колонку «Текст для очищення» рядка «Категорія з прайсу» (що програма робить сама) |
| Після оновлення каталогу в довіднику атрибутів з'явилися десятки нових рядків | Назва характеристики, для якої не знайшлося пари, заводиться новим атрибутом | Розібрати «Список нових атрибутів» до наступного оновлення: зіставити потрібні, зайві позначити «Ігнорувати» (про зіставлення атрибутів) |
Хто має доступ
Обидва вікна теми — сітка правил і «Зіставлення атрибутів» — власної перевірки прав у коді не мають. Відкриваються вони тільки з картки джерела, тому фактичною межею працює доступ до вікна, яке в правах записане як «Прайс-листи» (у меню — «Список прайс-листів»): не бачите списку джерел — не потрапите й сюди.
Окремих блоків усередині цих вікон немає, тож дати доступ «тільки до зіставлення атрибутів, але не до правил розбору» не вийде.
Часті запитання
Чи скачує парсер самі фотографії?
Ні. Парсер зберігає тільки адреси знімків на сайті постачальника. Файл стає вашою копією в хмарі під час оновлення базового каталогу. Поки копії немає, постачальник може прибрати картинку — і вона зникне й у вас.
Скільки фотографій забере парсер з однієї картки?
Скільки знайде селектор — обмеження на кількість фото немає. Колонка «Макс. кількість результатів» обмежує списки посилань, а не поля. На платформі виходить у середньому близько п'яти знімків на товар. Повтори однієї адреси в межах товару відкидаються, порядок зберігається: перше знайдене стане головним фото.
Чому артикул у прайсі коротший, ніж на сайті?
Тому що артикул чиститься автоматично: з обох артикульних полів вирізаються слова «Артикул товара», «Артикул», «Арт.», «Код товара», «Код товару», «Код», «SKU» і всі двокрапки. Працює це в обох режимах, і «Код: 7265989» лягає в прайс як «7265989». Але й «Код-114» стане «-114». Якщо номери постачальника містять ці слова, забирайте їх у поле, де чистки немає, — наприклад, у «Модель».
Характеристики зібралися, а в каталозі товару їх немає. Чому?
Зібране лежить у прайсі джерела й переїжджає в каталог окремим прогоном — оновленням базового каталогу. Перевірте три речі: чи запускали оновлення; чи не позначені ці назви як «Ігнорувати» у вікні «Зіставлення атрибутів»; чи вистачило балансу — перенесення фото й характеристик від парсера коштує 0,05 € за товар.
Чи можна додати своє поле до переліку?
Ні. 64 рядки правил заводяться при створенні джерела, і кнопки «додати рядок» у сітці немає. Якщо потрібного поля немає, а на сайті значення є в таблиці параметрів, заберіть його як характеристику: у каталозі воно стане атрибутом.
Чи оновляться ціни, якщо зняти «Видаляти товари перед завантаженням»?
Ні. При знятому прапорці адреси наявних товарів заносяться в чергу з позначкою «ігнорувати», і їхні сторінки в цей прогін не відкриваються зовсім. Приїдуть тільки товари з нових адрес. Щоб оновити ціни, прапорець має бути увімкнений.
Що робить кнопка «AI-зіставити» і чи можна їй довіряти?
Вона підбирає для нових назв характеристик відповідники з вашого довідника атрибутів. Зіставлення з упевненістю 92 і вище застосовується само; від 75 до 91 показується як пропозиція з кнопками «Підтвердити зіставлення» й «Відхилити (новий атрибут)»; нижче 75 назва вважається новою. Раніше зроблене вручну зіставлення ШІ не перетирає. Механізм новий.
Суміжні теми
- Парсинг сайтів — як завести джерело-парсер, налаштувати обхід і селектори, запустити збір і прочитати журнали.
- Збір даних із сайтів — розділ керівництва, до якого належить ця стаття.
- Оновлення базового каталогу — перенесення зібраного у ваш каталог і те, скільки це коштує.
- Фотографії товару — що відбувається зі знімками після перенесення.
- Атрибути — довідник, у який лягають зібрані характеристики.
- Статуси наявності — як текст із поля «Статус наявності (з прайсу)» стає статусом.
- Операції прайс-листа — що застосовується до зібраних товарів після обходу.
- Зіставлення товарів постачальника — як позиція прайсу знаходить свій товар у каталозі.

