Парсинг сайтів: налаштувати парсер, запустити збір і прочитати журнал

46 хв

Парсинг сайтів — це коли товари й ціни беруться не з файла постачальника, а просто зі сторінок його сайту: програма обходить розділи, відкриває картки товарів і забирає з них назву, ціну, наявність, фото й характеристики. В Elbuz такий сайт стає звичайним джерелом у списку прайс-листів. Різниця одна, зате принципова: у файлового прайсу ви показуєте програмі, у якій колонці ціна, а тут — у якому місці сторінки вона написана.

Стаття закриває два випадки. Перший — ви налаштовуєте збір уперше й хочете зрозуміти, що куди вписувати. Другий — збір уже працював, а цього разу приїхало не те: порожні назви, нульові ціни або взагалі нічого. Другий випадок трапляється частіше, і розібраний він не одним абзацом, а порядком перевірок — від коду відповіді в журналі до підбору селекторів заново.

Розмова з підтримкою — замість читати: навіщо це потрібно, що налаштувати і що ви отримаєте.

Вікно
«Налаштування завантаження даних із сайту» і «Завантаження даних із сайту»
Право доступу
доступ до вікна, яке в правах записане як «Прайс-листи» (у меню — «Список прайс-листів»); окремо перевіряється лише журнал парсингу
Підготувати
контрагента, під якого заводиться джерело, і адресу сайту; для збору без сервера — розширення Elbuz для Google Chrome
Модуль
«Використовувати сервер для завантаження даних» — потрібен для фонового збору й розкладу; без нього сторінки відкриває ваш браузер

Більшість парсерів відкриває сторінки вашим браузером, а не сервером Elbuz — і для цього в Chrome має бути встановлене розширення Elbuz. Без нього такий парсер сторінку не отримає: ні тест селектора, ні прогін не повернуть даних.

Як зрозуміти, що розширення немає: у вікні налаштувань джерела з'являється червоне посилання «Встановити розширення». Програма перевіряє наявність сама і показує його тільки тоді, коли розширення не відповідає. Якщо посилання не видно — розширення на місці.

Кого це не стосується: джерел із увімкненим модулем «Використовувати сервер для завантаження даних» — там сторінки качає наш сервер, браузер не потрібен, і саме цей режим потрібен для збору за розкладом. Не стосується й нативних джерел: вони сторінок не відкривають зовсім.

Як встановити розширення, перевірити, що воно відповідає, і що робити з попередженням про застарілу версію — окрема стаття цього розділу.

Маршрут задачі

  1. Завести джерело-парсер: контрагент і сайтМайстер підключення джерела
  2. Налаштувати правила розбору й список адресНалаштування завантаження даних із сайту
  3. Запустити збір і дочекатися кінцяЗавантаження даних із сайту
  4. Подивитися, що сталося з кожною сторінкоюЖурнал парсингу

Де це у програмі

Жодне вікно парсера в меню не виведене й ярлика на робочому столі не має. Усі три відкриваються з одного місця — зі списку прайс-листів або з картки самого джерела.

Меню
Довідники → Обробка прайс-листів → Список прайс-листів
З картки джерела
секція «Джерело» → кнопка «Налаштування завантаження даних із сайту»; кнопка є тільки в джерела, привʼязаного до парсера
Зі списку джерел
кнопка «Налаштування» в шапці правої панелі — вона зʼявляється, коли вибрано рядок типу «Парсер сайту»; сусідня кнопка «Імпортувати» для такого рядка відкриває вікно збору
З майстра підключення
крок «Звідки» → плитка «Парсер сайту» → «Далі»
З вікна налаштувань парсера
вкладка «Додатково», верхній ряд кнопок: «Журнал парсингу», «Налаштування розкладу», «Список проксі серверів»
Розкрите меню «Довідники» з пунктом «Список прайс-листів»
1Список прайс-листів
  1. Список прайс-листів — єдині двері до всіх вікон парсера.

Кнопка й вікно, яке вона відкриває, називаються однаково — «Налаштування завантаження даних із сайту»; далі в тексті це просто вікно налаштувань. У списку прав доступу те саме вікно записане як «Налаштування парсера джерела».

У списку джерел парсерний рядок видно за іконкою глобуса й типом «Парсер сайту». Універсальний парсер, якщо на кроці «Хто» не вписати власну назву, назветься доменом сайту; готовий модуль залишиться з тією назвою, яку дав майстер.

Виділене джерело «Парсер сайту» у списку прайс-листів
1Рядок джерела
2Кнопка «Налаштування»
3Кнопка «Імпортувати»
  1. Іконка глобуса і тип «Парсер сайту» відрізняють джерело від файлових.
  2. Кнопка-шестерінка «Налаштування» є тільки в парсерних джерел.
  3. У парсера ця кнопка відкриває вікно збору і одразу запускає обхід сайту — не натискати.

Чим парсер відрізняється від звичайного прайсу

Для решти програми джерело-парсер — такий самий прайс-лист: у нього є товари, ціни, націнка, зіставлення категорій і журнал прогонів. Відрізняється тільки те, звідки беруться дані й що саме ви налаштовуєте.

 Файл, посилання, e-mail, FTPПарсер сайту
Звідки даніодин файл, який дає постачальниксторінки сайту, які програма обходить сама
Що налаштовуєтеадреси колонок файлаправила розбору сторінки — и
Крок «Перевірка» в майстріє: зіставлення колонокпропускається, замість нього відкривається вікно налаштувань парсера
Запуск«Імпортувати» читає файл«Імпортувати» відкриває вікно «Завантаження даних із сайту», і обхід починається одразу
Журналижурнал прогонів джерелаплюс «Журнал парсингу» і жива стрічка збору

Як влаштований обхід: чотири операції

Програма ніколи не забирає «сайт цілком» одним рухом. Вона працює чергою: одна сторінка — одне . Кожна розібрана сторінка породжує завдання наступного етапу: з головної народжуються розділи, з розділу — картки товарів, із картки — сторінка характеристик. Тому налаштування парсера — це не одна форма, а чотири набори селекторів, по одному на кожну операцію. І тому порожній результат майже завжди означає, що обірвалася одна конкретна ланка, а не «парсер не працює».

«без відкриття картки»увімкненозвичайний обхідСписок посилань: стартовіадресиСписок посилань накатегорії товарівСписок посилань натовариНазва й ціна прямо зісторінки розділуКартка товару: назва, ціна,опис, фотоАтрибути товаруТовари в прайсі джерела
Ланцюжок операцій розбору: де саме програма бере назви й ціни та що змінює прапорець «без відкриття картки»
ОпераціяЩо робить програмаЩо задаєте виЩо зʼявиться після неї
Список посилань на категорії товарів відкриває одну сторінку (головну або сторінку каталогу) і збирає з неї адреси розділів селектор посилань на розділи завдання «Список посилань на товари» на кожен знайдений розділ
Список посилань на товари відкриває розділ — — і збирає адреси карток та адреси наступних сторінок селектор блоку товару, селектор пагінації, за потреби — поля назви й ціни завдання «Картка товару» на кожен товар і завдання на наступні сторінки розділу
Картка товару відкриває картку й заповнює поля товару, фото, відео, файли селектори полів: назва, ціна, артикул, опис, фото та інші товар у прайсі джерела; за потреби — завдання на сторінку характеристик і на товари-опції
Атрибути розбирає таблицю характеристик — на тій самій картці або на окремій сторінці селектор блоку характеристик, селектор рядка, селектори назви й значення характеристики товару

У переліку типів операцій є ще пʼята — «Фото», — але правил цієї операції не заводять. Фото збираються полем «Зображення» в «Картці товару» або в «Списку посилань на товари».

З чого починається перше завдання

Кнопка «Почати завантаження» не одразу йде на сайт. Спершу програма готує чергу, і саме тут вирішується, чи буде взагалі що обходити.

  1. Черга й жива стрічка минулого прогону стираються. Тому «Журнал парсингу» треба читати до наступного запуску, а не після. Кнопка «Продовжити» нічого не стирає.
  2. Якщо стоїть «Видаляти товари перед завантаженням», товари джерела видаляються. Якщо прапорець знятий, адреси наявних товарів заносяться в чергу з позначкою «ігнорувати», і їхні сторінки в цей прогін узагалі не відкриваються — ось так і працює обіцянка «завантажуватимуться тільки нові товари».
  3. Якщо заповнене «Посилання на карту сайту (файл XML)», карта завантажується заново — при кожному прогоні, а не один раз при налаштуванні.
  4. Якщо у вкладці «Список посилань» є адреси, кожна з них стає завданням. Адреса з галочкою «Це посилання на товар» іде одразу в операцію «Картка товару», решта — в операцію «Список посилань на товари».
  5. Якщо «Список посилань» порожній, програма створює рівно одне завдання — «Список посилань на категорії товарів» на адресу з поля «Посилання на категорії», а коли воно порожнє — на головну сторінку сайту.

Останній пункт має умову, через яку найчастіше й буває «прогін закінчився, нічого не зібралося». Завдання на головну сторінку створюється, тільки якщо в рядку «Селектор операції» групи «Список посилань на категорії товарів» щось заповнене — селектор або регулярний вираз — або ввімкнено «Авто пошук селекторів». Порожній селектор без автопошуку й порожній «Список посилань» разом означають, що черга не створиться зовсім: у стрічці одразу пишеться «Завдання завершено», а в журналі парсингу немає жодного рядка.

Дві перевірки працюють на кожному завданні, і про них варто знати заздалегідь. Одна адреса потрапляє в чергу один раз: повторне посилання на ту саму сторінку відкидається, тому один і той самий товар не качається двічі, навіть якщо він лежить у трьох розділах. І адреса чужого домену в чергу не потрапляє взагалі — у стрічці зʼявляється червоний рядок Main domain not exist in url! з адресою сайту та відкинутим посиланням. Якщо сайт віддає товари на другому домені, впишіть його в поле «Посилання синонім» на вкладці «Додатково».

Як завести джерело-парсер

Джерело заводиться тим самим майстром підключення, що й файловий прайс. На кроці «Хто» вибираєте контрагента, на кроці «Звідки» — плитку «Парсер сайту» з підписом «збір зі сторінок сайту». Під плитками зʼявляються два блоки, і вони взаємовиключні: вибір готового парсера гасить поле універсального й навпаки. Якщо не вибрати нічого, майстер скаже «Оберіть готовий парсер зі списку або вкажіть посилання на сайт».

Крок 2 майстра джерела: вибір плитки «Парсер сайту»
1Плитка «Парсер сайту»
2Готові парсери
3Універсальний парсер
4Автоматичне налаштування
5Завантажувати без відкриття картки
  1. Плитка «Парсер сайту» — дані беруться зі сторінок сайту, а не з файлу.
  2. «Готові парсери» — майданчики, які підтримує Elbuz.
  3. «Універсальний парсер» — блок з полем адреси для будь-якого іншого сайту.
  4. Перемикач увімкнено за замовчуванням — після майстра збір товарів почнеться сам.
  5. Перемикач вирішує, чи відкривати кожну картку товару під час збору.

Готовий парсер зі списку

Блок «Готові парсери» з підказкою «Магазини та майданчики, які ми підтримуємо самі — оберіть і налаштуйте.» Зараз у списку чотирнадцять модулів, серед них Rozetka і Rozetka (API), PROM, Hotline і Hotline (API), Kaspi, eMAG, Black Red White, public.cy, eBay, Amazon, B&H Photo Video та «Прайс навигатор». Вибрали модуль, натиснули «Далі» — джерело привʼязується до нього й одразу відкривається вікно налаштувань. Селектори писати не треба: у готового модуля вкладок «Налаштування завантаження» і «Тестування завантаження» немає взагалі, є «Список посилань», «Список продавців» і «Додатково». В окремих модулів із власним API попереду зʼявляється ще вкладка «Мої товари» — це стеження за цінами, тема іншої статті.

Вкладка «Список продавців» стосується лише майданчиків-агрегаторів, де той самий товар продають різні магазини: у ній ведуть білий і чорний списки продавців, націнку по кожному й вибір джерела ціни. Для звичайного сайту вона порожня.

Налаштування готового модуля спільні для всіх джерел, які на ньому сидять. Копія під ваш прайс не створюється: джерело привʼязується до того самого системного запису парсера. Тобто якщо ви завели два джерела на Rozetka — своє й для конкурента, — зміна прапорця в одному змінює поведінку другого. Коли джерел у запису більше одного, вікно налаштувань пише про це просто над вкладками: «Налаштування цього парсера спільні: їх використовують N джерел. Зміна тут торкнеться всіх.» Потрібні різні налаштування на той самий сайт — заведіть замість другого джерела універсальний парсер.

Універсальний парсер для будь-якого сайту

Блок «Універсальний парсер», підказка «Будь-який сайт: вкажіть посилання, селектори CSS налаштовуються вручну.» Поле «Посилання на сайт» із прикладом «наприклад https://site.com» — якщо схему не вписати, програма підставить https:// сама. Нижче два перемикачі, обидва увімкнені за замовчуванням:

  • «Автоматичне налаштування (почати завантаження перших 300 товарів)» — програма перевірить, чи є в сайту , і спробує підібрати селектори сама;
  • «Завантажувати товари та ціни без відкриття картки» — назви й ціни беруться прямо зі сторінки розділу, картки не відкриваються. Швидше, але з картки нічого не приїде: ні опис, ні характеристики.

Після «Далі» програма робить кілька речей за вас. Качає головну сторінку сайту й витягає з її розмітки картку організації — логотип, адресу, опис, телефон, e-mail; усе це дописується в картку контрагента, але тільки в порожні поля, ваші дані не затираються. Забирає favicon сайту — він стає значком парсера. Створює 64 порожні правила розбору по чотирьох операціях. Заповнене з них рівно одне: селектор h1 для назви товару в картці. Далі, якщо автоналаштування залишили ввімкненим, шукає sitemap.xml, а не знайшовши — рядок Sitemap: у robots.txt, і вмикає .

За налаштувань майстра за замовчуванням збір починається сам — і не тільки тоді, коли знайшлася карта сайту. Якщо ввімкнений другий перемикач, «Завантажувати товари та ціни без відкриття картки», карту взагалі не шукають і вважають знайденою, тож майстер відкриває вікно «Завантаження даних із сайту» з автозапуском у будь-якому разі. Єдиний спосіб цього уникнути — зняти «Автоматичне налаштування» перед «Далі»: тоді відкриється вікно налаштувань і збір чекатиме вашої кнопки.

Перший після автоналаштування навмисно короткий: не більше 50 посилань на розділи й не більше 300 збережених товарів, після чого черга завдань очищається й збір зупиняється сам. Сторінки пагінації в перший прогін теж не додаються — з кожного розділу береться тільки перша сторінка. Це зроблено, щоб ви подивилися на результат до того, як обхід піде по всьому сайту. Обмеження діє рівно один раз — після завершення прогону воно знімається, і наступний запуск іде без стелі.

Список посилань: з чого починається обхід

Вкладка «Список посилань» — це перелік стартових адрес. Порожній список не помилка: для універсального парсера це означає «почни з головної сторінки й знайди розділи сам». Але якщо потрібні лише три розділи з тридцяти або сайт узагалі без каталогу, адреси вписують сюди.

Колонки сітки: «Статус», «Посилання», «Це посилання на товар», «Це посилання на список товарів», «Назва», «Артикул», «Вартість доставки», «Примітка». Для універсального парсера робочий тут один прапорець — «Це посилання на товар»: він відправляє адресу одразу в операцію «Картка товару». Адреса без цього прапорця йде в операцію «Список посилань на товари», тобто трактується як сторінка розділу. Колонка «Це посилання на список товарів» на обхід не впливає — її проставляє собі імпорт із CSV.

Вкладка «Список посилань» вікна налаштування завантаження даних із сайту
1Кнопка «плюс»
2Колонка «Це посилання на товар»
3Колонка «Це посилання на список товарів»
4Бургер «Додаткові операції»
  1. Кнопка «плюс»: сюди вставляють адреси розділів і товарів, можна пачкою.
  2. Колонка «Це посилання на товар» — адреса веде прямо в картку.
  3. Колонка «Це посилання на список товарів» — адреса веде в розділ, звідки збирають посилання на товари.
  4. Бургер «Додаткові операції»: у ньому три пункти — «Оновити», «Скасувати фільтр» і «Видалити всі посилання»; журнал, розклад і проксі лежать не тут, а вгорі вкладки «Додатково».

Кнопка «плюс» відкриває діалог «Додати посилання» з полем «Список посилань» і галочкою «Всі посилання на товари». Адреси вставляються пачкою: роздільник програма визначає сама — чи то перенесення рядка, чи то крапка з комою, дивиться, чого більше. Дублі відкидаються. Якщо в рядку є табуляція, програма дивиться, у якій із двох частин є адреса, — друга піде в назву.

Другий спосіб наповнити список — акордеон «Налаштування завантаження посилань з файлу Sitemap (XML)» на вкладці «Додатково». Вписуєте «Посилання на карту сайту (файл XML)», за потреби — тексти, за якими адреси ігноруються або, навпаки, відбираються, і тиснете «Завантажити посилання». У стрічці при цьому йдуть рядки «Завантаження картки сайту:», «Завантажено посилання на карту сайту:» і «Завантажено посилання на сторінки сайту:». Автоналаштування, до речі, вписує в поле ігнорування чотири шаблони — category, categori, article і /filter/, щоб у список не потрапляли статті й сторінки фільтрів, — але тільки якщо карту знайшли за прямою адресою сайт/sitemap.xml. Коли адресу взяли з robots.txt, поле лишається порожнім і шаблони вписують самі.

Третій спосіб — сусідній акордеон для файла CSV: номери колонок з артикулом, найменуванням, посиланням і прапорцем «це посилання на товар», роздільники стовпців і рядків, з якого рядка починати, і галочка «Очищати список посилань перед завантаженням файлу».

У бургері «Додаткові операції» на цій вкладці три пункти: «Оновити», «Очистити фільтр» і «Видалити всі посилання». Останній прибирає весь список одним рухом, і скасування немає. Якщо адреси набиралися руками, спершу вивантажте їх собі — відновлювати не буде звідки.

Правила розбору: сітка селекторів

Вкладка «Налаштування завантаження» є тільки в універсального парсера. Це сітка правил, згрупована за операціями обходу, і кожна група — це один крок конвеєра. Рядки правляться прямо в комірці, по кліку; кнопки «Зберегти» тут немає, як і на решті вкладок цього вікна.

Грід правил розбору на вкладці «Налаштування завантаження», згрупований за типами операцій
1Список посилань на категорії товарів
2Картка товару
3Селектор операції
4Селектор №1
5Посилання для тестування
6Іконка-блискавка
  1. Група «Список посилань на категорії товарів» — перший тип операції: звідси беруться посилання на розділи сайту.
  2. Група «Картка товару» — тип операції, де перелічені поля, які збираються зі сторінки товару.
  3. Рядок «Селектор операції» — з нього починається розбір, тут-таки розташовані кнопки перевірки.
  4. Колонка «Селектор №1» — адреса потрібного місця на сторінці.
  5. Колонка «Посилання для тестування» — без неї кнопки перевірки селектора не працюють.
  6. Іконка-блискавка — підбір селекторів майстром або ІІ; версія з ІІ перезаписує вже збережені селектори.

У кожній групі перший рядок називається «Селектор операції» — це адреса самого списку або блоку, з якого починається розбір усієї групи. Решта рядків — окремі поля товару. Різниця між ними важлива: якщо не спрацював «Селектор операції», не спрацює вся група, скільки б полів ви не заповнили нижче.

Для операцій «Картка товару» і «Атрибути» «Селектор операції» можна лишити порожнім — тоді програма шукає поля по всій сторінці. Для двох операцій зі списками порожній селектор означає, що на цьому кроці обхід зупиниться.

Чотири колонки селекторів — і чотири різні змісти

У кожному рядку є «Селектор №1» … «Селектор №4». У рядку поля це запасні варіанти: програма пробує їх по черзі й зупиняється на першому, який дав значення. Зручно, коли акційні товари розмічені інакше за звичайні: у №1 кладете основний варіант, у №2 — акційний. Виняток — одне поле, «Зображення»: там перебираються всі чотири колонки й фото складаються в один список.

А от у рядку «Селектор операції» чотири колонки означають зовсім різні речі, і залежить це від операції:

ОпераціяСелектор №1Селектор №2Селектор №3Селектор №4
Список посилань на категорії товарів посилання на розділи ще три селектори посилань на розділи: усі чотири виконуються, знайдене складається в один список
Список посилань на товари блок товару або посилання на картку посилання пагінації посилання на поточну сторінку (канонічна адреса) додаткові посилання пагінації
Картка товару блок картки; порожньо — уся сторінка посилання на товари-опції: кожне стане окремим завданням «Картка товару»
Атрибути блок характеристик; порожньо — уся сторінка рядок характеристики: без нього операція нічого не збере посилання на окрему сторінку характеристик хвіст, який дописується до адреси картки, щоб отримати сторінку характеристик

Звідси два практичні наслідки. Пагінація на сайті налаштовується не в групі «Список посилань на категорії товарів», як здається за назвою, а в «Селекторі №2» групи «Список посилань на товари». І характеристики з окремої сторінки («Технічні характеристики» окремою вкладкою) вмикаються заповненням «Селектора №3» або «№4» у групі «Атрибути»: щойно там щось зʼявилося, програма перестає шукати характеристики на самій картці й заводить окреме завдання на другу сторінку.

Що ще можна задати в рядку правила

Решта колонок — це обробка вже знайденого значення. Порядок у неї фіксований, і плутанина з ним дає більшість «дивних» результатів.

  1. Що взяти. За замовчуванням береться текст елемента. Галочка «Отримувати HTML» лишає розмітку — потрібна для опису; «Дозволені HTML теги» звужує її до перелічених, наприклад <p><br><ul><li>.
  2. Адреси добудовуються. Відносне посилання /catalog/nasosy/ перетворюється на повне; #, javascript:, mailto: і tel: відкидаються; хвіст ?click_track_data= зрізається.
  3. Автоматична чистка. З тексту прибираються HTML-коментарі, службові атрибути тегів, емодзі, нерозривні пробіли й повтори пробілів.
  4. «Текст для очищення» — вирізає з результату вказаний текст. Кілька значень пишуть через |||.
  5. «Знайти» / «Замінити» — три різні дії залежно від того, що заповнено. Обидва поля — звичайна заміна. Тільки «Замінити» — текст дописується в кінець значення. Тільки «Знайти» — текст вирізається.
  6. «Видаляти посилання» — прибирає з результату теги посилань; що саме видаляти, свій домен чи чужі, задають два прапорці в акордеоні «Додатково».
  7. Ціна. У полях типу «ціна» лишаються тільки цифри й роздільники, роздільник тисяч і десятковий беруться з налаштувань прайсу, результат округлюється до двох знаків. Якщо в одному значенні трапилося дві ціни — стара і нова поруч, — береться менша.
  8. «Регулярний вираз» — витягає шматок зі знайденого значення.
  9. «Розділювач значення» — якщо селектор знайшов кілька елементів, вони склеюються через цей роздільник. За замовчуванням кома, для категорії — « / », для фото — |||.

Ще дві колонки стосуються не значення, а кількості. «Макс. кількість результатів» у рядку «Селектор операції» обмежує, скільки елементів узяти з однієї сторінки: поставили 20 — з розділу приїде двадцять товарів, скільки б їх там не було, і на звичайному прогоні теж, не тільки в тесті. «Префікс посилання», попри назву, дописується в кінець адреси — ним будують сторінки пагінації виду ?page=.

«Регулярний вираз» працює по-різному залежно від того, чи є в рядку селектор. Без селектора програма шукає вираз по всій сторінці й бере кожне співпадіння першої дужки. Разом із селектором — застосовує вираз до знайденого значення й бере друге співпадіння першої дужки. Тобто вираз, який співпадає рівно один раз, у парі з селектором не змінює нічого: значення лишається таким, яким було. Якщо вираз «не працює», перевірте спершу це, а не сам вираз.

Ще одна дрібниця, яку легко не помітити: якщо замість селектора написати текст у фігурних дужках, він стане фіксованим значенням поля. {Нова колекція} в полі «Виробник» проставить це слово всім товарам, нічого не шукаючи на сторінці.

Селектори: CSS, XPath і три помічники

Селектор можна написати двома мовами. За замовчуванням у комірці чекають CSS-селектор — той самий, яким верстальники описують стилі: h1, div.price, span[itemprop=price]. Якщо зручніше XPath, поставте в цьому ж рядку галочку «XPath».

Галочка «XPath» — не косметика. XPath, вписаний у рядок без неї, не «нічого не знаходить»: розбір цієї сторінки обривається з помилкою. У результатах тесту буде порожньо або текст помилки, а на прогоні сторінка залишиться нерозібраною, хоча код відповіді в журналі буде 200. Так само обривається розбір і на CSS-селекторі із синтаксичною помилкою — зайва дужка коштує цілої сторінки. Селектор, який просто нічого не знайшов, поводиться інакше: результат порожній, помилки немає.

Дві можливості CSS-запису варто знати окремо, бо без них половина сайтів не збирається.

  • ::attr(імʼя) — забирає значення атрибута, а не текст. Ціна, захована в розмітці для пошукових систем, береться саме так: meta[itemprop=price]::attr(content). Фото з srcsetimg.photo::attr(srcset), причому в «Картці товару» з набору розмірів програма сама візьме найбільший. У лістингу такого відбору немає: там для повного розміру потрібен інший атрибут.
  • :contains(текст) — відбір за вмістом: td:contains(Гарантія). Поруч працюють :not(...) і :has(...).

Довгі ланцюжки виду div:nth-child(3) > div > span:nth-child(2) працюють, але ламаються від будь-якої перемальовки сайту — навіть від зайвого банера в блоці. Короткий селектор за класом або атрибутом переживе більше.

Підібрати селектор допомагають три різні кнопки, і плутати їх не варто.

  • Тест правила (іконка з горизонтальними стрілками в рядку «Селектор операції») — відкриває сторінку на сусідній вкладці «Тестування завантаження» і показує в лівій панелі «Результат тестування» те, що повернув селектор. Нічого не змінює в правилах.
  • Кнопка-блискавка в тому ж рядку — «Отримати селектори зі сторінки». Для двох операцій зі списками вона відкриває «Майстер налаштування парсера», для «Картки товару» й «Атрибутів» — підбір штучним інтелектом. Обидва варіанти качають сторінку сайту.
  • Паличка ШІ-помічника в тулбарі вкладки «Список посилань», підказка «ШІ-помічник: скласти CSS-селектор або XPath». Це розмова, а не кнопка: ви вставляєте шматок HTML зі сторінки, помічник відповідає готовим селектором і поясненням, що саме той вибирає. У сітку правил він нічого не пише — селектор ви копіюєте самі.

«Майстер налаштування парсера» теж нічого не записує за вас, і це головне, що про нього треба знати. Він качає сторінку й показує сітку: «Активність», «Назва», «Посилання», «Селектор», «Усього посилань». Кожен рядок — група схожих посилань зі сторінки та готовий CSS-селектор для неї, а колонка «Усього посилань» показує, скільки посилань під цей селектор потрапляє. Підказка вгорі вікна так і каже: «Наведений нижче список посилань сайту на основі стилів CSS (атрибут class). Вам потрібно скопіювати потрібний селектор та вставити його в поле "Селектор операції".» Тобто ваша робота — знайти рядок, у якому кількість посилань схожа на кількість розділів (або товарів у розділі), і перенести його селектор у сітку правил руками.

Підбір штучним інтелектом працює інакше: сторінка скачується, розмітка чиститься й іде в модель, запропоновані селектори програма одразу перевіряє на цій самій сторінці, за невдачі робить один повторний запит по полях, які не спрацювали, і записує результат у правила. Перед запуском вікно перепитує: «ШІ підбере селектори для цієї операції та ЗАМІНИТЬ ними поточні налаштування розбору. Повернути попередні значення буде неможливо.» Кнопка підтвердження підписана «Підібрати і замінити».

Скасування в цієї заміни немає — ні кнопкою, ні повторним підбором. Якщо селектори налаштовані руками й працюють, скопіюйте їх собі перед тим, як тиснути блискавку.

Усі три кнопки в рядку правила вимагають заповненої колонки «Посилання для тестування»: для операцій зі списками — адреса розділу, для картки й атрибутів — адреса товару. За порожньої колонки блискавка покаже вікно «Виникла проблема!» з текстом «Посилання для тестування!», а кнопка тесту просто нічого не зробить — жодного повідомлення не буде.

Як прочитати результат тесту

Ліва панель «Результат тестування» — головний інструмент налаштування, і показує вона рівно те, що поверне прогін. Вигляд залежить від операції.

  • Для двох операцій зі списками — заголовок із кількістю в дужках («Список посилань на категорії товарів (37)») і сам перелік: назва, під нею адреса. Число в дужках — перше, на що варто дивитися: 0 означає мертвий селектор, 300 замість 30 — що селектор захопив усе меню сайту разом із службовими сторінками.
  • Для «Списку посилань на товари» під переліком іде другий заголовок — «Список посилань на сторінки лістингу товарів (пагінація)» з тим самим лічильником. Порожньо тут — значить із розділу приїде тільки перша сторінка.
  • Для «Картки товару» — перелік полів із назвами: «Найменування», «Ціна (у валюті акаунта)», «Артикул виробника» і далі, кожне зі своїм значенням. Нижче окремими блоками «Фото (8)» з мініатюрами, «Відео», «Файли», «Атрибути» і «Посилання на товари» (це товари-опції з «Селектора №4»).
  • Для «Атрибутів» — пари «назва: значення» і лічильник у заголовку.

Біля кожного знайденого посилання в результатах першої операції стоїть кошик «Додати до списку ігнорування» — сміттєві розділи відсіюються прямо звідси, правило йде в , який живе в окремому вікні. Кошиків у рядку буває два, і правила вони заводять різні: біля назви — ігнорування за назвою розділу, біля адреси — за адресою.

Тест і майстер селекторів беруть сторінку по-різному, і це видно, коли сайт капризний. Тест відкриває адресу у вбудованому вікні вашого браузера, а розмітку повертає розширення Elbuz — тобто ви бачите сторінку такою, якою її бачить ваш браузер, з вашими куками. Майстер і підбір ШІ качають сторінку сервером Elbuz. Якщо тест показує дані, а прогін у серверному режимі — ні, причина зазвичай саме тут: сайт віддає різне браузеру й серверу.

Порожня вкладка «Тестування завантаження» джерела-парсера
1Результат тестування
2Посилання на сайт
3Межа між панелями
  1. Сюди програма виведе те, що повернув селектор, разом із кількістю знайдених елементів у дужках.
  2. Адресу сторінки можна вписати вручну, не повертаючись у грід правил.
  3. Межу тягнуть мишкою, ширина панелей запам'ятовується.

Крок 1. Список посилань на категорії товарів

Що робить програма. Відкриває одну сторінку — адресу з поля «Посилання на категорії», а якщо воно порожнє, головну сторінку сайту, — і збирає з неї всі посилання, які підпадають під селектор. Ніякого «розумного» відсіву тут немає: скільки посилань під селектор потрапило, стільки й піде в чергу, разом із «Доставкою» й «Контактами», якщо вони лежать у тому самому меню.

Що задаєте ви. Один селектор посилань у рядку «Селектор операції» — і, за потреби, ще три в колонках №2–№4, якщо розділи на сторінці розмічені по-різному (наприклад, верхнє меню й плитка на головній). Колонка «Префікс посилання» тут працює як хвіст: те, що в ній написано, дописується до кожної знайденої адреси в кінець.

Як перевірити. Кнопка тесту в цьому рядку. Число в заголовку результату має бути схоже на кількість розділів у каталозі сайту.

Що видно при помилці. Якщо селектор не знайшов нічого, у журналі парсингу залишиться один рядок із кодом 200 — сторінка приїхала, а завдань наступного кроку не зʼявилося. У стрічці це виглядає як миттєве «Завдання завершено».

Якщо ввімкнено «Авто пошук селекторів», а колонка порожня, поведінка інша. Програма спершу викидає зі сторінки підвал, бічні колонки й скрипти, потім перебирає сорок вісім типових селекторів меню й каталогу, бере до чотирьох різних і записує їх у порожні колонки правила. Заодно вона відкидає посилання за списком службових слів — «Оплата», «Доставка», «Контакти», «Блог», «Кошик», «Порівняти», мовні перемикачі й сторінки входу. Тому після тесту з увімкненим автопошуком сітка правил перечитується: у ній уже стоять підібрані селектори.

Крок 2. Список посилань на товари

Що робить програма. Відкриває сторінку розділу й робить дві речі одразу: збирає посилання на картки товарів і збирає адреси наступних сторінок цього розділу. На кожен товар створюється завдання «Картка товару», на кожну сторінку пагінації — ще одне завдання цього ж кроку.

Що задаєте ви. «Селектор №1» — блок товару в лістингу (наприклад, div.product-item) або посилання на картку. «Селектор №2» — посилання пагінації. Якщо пагінації на сайті немає, а сторінки будуються адресою, згодяться три спеціальні колонки: «Селектор загальної кількості сторінок», «Селектор загальної кількості товарів» і «Селектор кількості товарів на сторінці» — з них програма порахує число сторінок і збудує адреси сама, дописуючи «Префікс посилання» й номер (наприклад, ?page=).

Окремий випадок — «Товари в цій операції». Це прапорець у тому ж рядку «Селектор операції». Якщо він стоїть, картки товарів не відкриваються зовсім: назва, ціна, наявність і фото беруться прямо з лістингу, а заповнювати треба вже не один селектор, а рядки полів у цій самій групі. Саме його й вмикає перемикач майстра «Завантажувати товари та ціни без відкриття картки».

У режимі «товари прямо з лістингу» товар без назви або без адреси не зберігається взагалі. Тому поле «Посилання на товар (URL)» у цій групі обовʼязкове нарівні з назвою: без нього прогін пройде чисто, а в прайсі не буде жодного рядка.

Як перевірити. Тест на адресі розділу. У результаті мають бути два лічильники: товари й пагінація. Якщо стоїть «Товари в цій операції», замість переліку посилань зʼявиться перелік полів кожного товару — там одразу видно, чи не поїхала ціна разом зі старою ціною.

Що видно при помилці. Порожній перелік означає, що селектор блоку не збігається з версткою. Якщо ж на сторінці розділу товарів немає взагалі — трапляється, коли розділ складається з підрозділів, — програма не здається: вона пробує розібрати цю саму сторінку правилами першого кроку й забрати з неї посилання на підрозділи.

Ще одна колонка цієї групи виручає на сайтах, де пошук іноді відкриває одразу картку товару замість списку: «Текст на сторінці для переходу на наступну операцію». Якщо вказаний текст знайшовся на сторінці, програма не шукає посилань, а розбирає цю сторінку як картку товару.

І остання підстраховка цього кроку: якщо в режимі «товари прямо з лістингу» селектори не дали жодного товару, а на сторінці є розмітка товарів для пошукових систем, програма пробує зібрати товари з неї. У «Картці товару» такої підстраховки немає.

Крок 3. Картка товару

Що робить програма. Відкриває сторінку товару й заповнює поля прайсу — по одному рядку правила на кожне поле. Фото, відео й файли складаються в окремі списки товару. Якщо в «Селекторі №4» стоїть селектор посилань, кожне знайдене посилання стає ще одним завданням «Картка товару» — так забирають товари-опції, які на сайті лежать окремими сторінками.

Що задаєте ви. Селектори полів. Заповнене з коробки одне — h1 для назви. Порожній рядок означає «це поле не збирати»: жодних значень за замовчуванням у нього не підставиться.

Як перевірити. Тест на адресі будь-якого товару. У лівій панелі буде перелік полів із значеннями та блок «Фото» з мініатюрами — видно і те, що зібралося, і те, що зібралося не так.

Що видно при помилці. Порожнє поле в результаті тесту — порожній або мертвий селектор. Товар у прайсі без назви — той самий випадок, тільки вже після прогону.

Кілька дрібниць програма робить сама, і на них не треба витрачати селектори. Категорія товару, якщо поле «Категорія з прайсу» порожнє, береться з «хлібних крихт» у розмітці сторінки, а слова на кшталт «Головна / » і «Каталог / » з початку відкидаються. Посилання на YouTube, яке потрапило в поле «Зображення», їде у відео, а не у фото. Картинки-заглушки з іменами placeholder, no-photo, no_image, no-image і картинки з /brand/ не зберігаються.

Крок 4. Атрибути

Що робить програма. Розбирає таблицю характеристик рядок за рядком і зберігає пари «назва — значення». Якщо «Селектор №3» і «№4» порожні, характеристики шукаються на тій самій сторінці картки, одразу після її розбору. Якщо в них щось є, характеристики беруться з окремої сторінки, і на неї створюється власне завдання.

Що задаєте ви. Чотири рядки: «Селектор операції» — блок характеристик (наприклад, table.specs) або порожньо, якщо блок не виділяється; «Селектор №2» у цьому ж рядку — селектор одного рядка характеристики (tr); далі окремі рядки «Назва атрибута» і «Значення атрибута» — це вже комірки всередині рядка (td.name і td.value). Ще два рядки, «Назва блоку атрибута» й «Опис атрибуту», потрібні сайтам, де характеристики поділені на розділи.

Як перевірити. Тест на адресі товару: у результаті буде «Атрибути (N)» і самі пари. Якщо характеристики беруться з окремої сторінки, у результаті тесту зʼявиться рядок з її адресою — це нормально, значить програма знайшла, куди йти.

Що видно при помилці. Порожній «Селектор №2» — характеристики не зберуться взагалі, навіть якщо решта заповнена: без селектора рядка операція завершується, нічого не роблячи. Однакові назва й значення в парі — селектори комірок вказують на той самий елемент; такі пари програма відкидає сама.

Що саме можна зібрати: повний перелік полів

Універсальному парсеру при створенні заводять 64 рядки правил. Це і є повний список того, що взагалі можна забрати зі сторінки: більше полів у сітці не зʼявиться, менше — залишиться порожнім.

ОпераціяСкільки рядківЯкі поля
Список посилань на категорії товарів 1 тільки «Селектор операції»
Список посилань на товари 22 «Селектор операції» та 21 поле: Найменування, Модель, Посилання на товар (URL), Ціна (у валюті акаунта), Ціна РРЦ, Ціна стара, Валюта постачальника, Кількість, Статус наявності (з прайсу), Категорія з прайсу, Опис короткий, Опис повний, Зображення, Артикул контрагента, Артикул виробника, Виробник, Штрихкод EAN, GTIN, Штрихкод ISBN, Габарит, Одиниця виміру
Картка товару 34 «Селектор операції» та 33 поля: усе з попереднього рядка, крім «Посилання на товар (URL)», плюс Гарантія, Висота, Ширина, Глибина, Вага, Колір, Стан товару, Назва родини (варіації), Інструкція, Вартість доставки, Посилання на категорію, Посилання на відео, Посилання на файл
Атрибути 7 «Селектор операції», Назва атрибута, Значення атрибута, Назва блоку атрибута, Опис атрибуту, Посилання на картинку атрибута, Посилання на картинку блока атрибута

Три речі збираються поза сіткою правил, прапорцями на вкладці «Додатково»:

  • «Зберігати meta теги» — заголовок, опис і ключові слова сторінки лягають у мета-поля товару;
  • «Зберігати текстову копію сторінок сайту» — очищений від розмітки текст сторінки зберігається разом із товаром;
  • фото, відео й файли — це не окремі поля, а списки: скільки адрес знайде селектор «Зображення», стільки фото й буде в товару.

Чого в цьому переліку немає — того парсер не забере ніяк. Наприклад, залишків по складах постачальника окремо від загальної наявності, персональних даних продавця чи будь-чого, що на сторінці підвантажується вже після натискання кнопки й у розмітці не зʼявляється.

Налаштування збирання: вкладка «Додатково»

Кнопки «Зберегти» в цьому вікні немає. Форма відправляється на сервер сама, при кожній зміні поля, і жодного підтвердження не показує. Через це буває дві протилежні помилки: людина шукає кнопку й думає, що налаштування не збереглися, або ж «просто дивиться», клацає прапорець і вже змінила поведінку збору. Перевірити збережене можна лише одним способом: закрити вікно й відкрити знову — значення перечитаються з бази.

Головна картка вкладки — «Параметри парсингу», розбита на пʼять груп.

«Які дані збирати». «Завантажувати атрибути» (увімкнено; підказка попереджає, що при оновленні базового каталогу за них стягується додаткова оплата), «Завантажувати фото» (увімкнено), «Завантажувати відгуки» (вимкнено), «Зберігати meta теги» (вимкнено), «Зберігати текстову копію сторінок сайту» (вимкнено).

Перші три прапорці цієї групи — «Завантажувати атрибути», «Завантажувати фото», «Завантажувати відгуки», а разом із ними й «Завантажувати ціни» з останньої групи — читають готові модулі. Універсальний парсер їх не читає: у нього збір визначає сітка правил, і поле з порожнім селектором не збереться незалежно від прапорця. Два останні прапорці групи, «Зберігати meta теги» і «Зберігати текстову копію сторінок сайту», працюють в обох випадках.

«Режим завантаження сторінок». Тут селект «Як сервер завантажує цей сайт» із трьома значеннями: «Через проксі (звичайний серверний режим)» — так за замовчуванням; «Напряму, без проксі» — коли постачальник сам дозволив вам збір і такі запити безкоштовні; «Через сервіс обходу захистів» — для сайтів, які інакше сторінок не віддають, оплачується окремо за будь-якого тарифу. Для третього варіанта зʼявляється поле «Країна запиту» зі значенням «Авто (за замовчуванням)», а прапорець серверного режиму вмикається примусово. У цій же групі — «Використовувати сервер для завантаження даних», «Використовувати сервер для рендерингу JavaScript», «Завантажувати JavaScript» і «Завантажувати товари та ціни без відкриття картки».

Картка «Параметри парсингу» на вкладці «Додатково»
1Які дані збирати
2Як сервер завантажує цей сайт
3Використовувати сервер для завантаження даних
4Режим налагодження
5Завантаження цін
  1. Група «Які дані збирати» — визначає, що саме зберігається під час обходу: атрибути, фото, відгуки, meta-теги, текстову копію сторінок.
  2. Селект «Як сервер завантажує цей сайт» — три режими: через звичайний сервер, напряму або з обходом захисту сайту.
  3. Чекбокс «Використовувати сервер для завантаження даних» — без нього сторінки відкриває ваш браузер, і вікно програми має лишатися відкритим.
  4. Чекбокс «Режим налагодження» у групі «Автоматика та налагодження» — без нього код сторінки не зберігається в журналі парсингу.
  5. Група «Завантаження цін» — вмикає збирання цін під час парсингу.

Про два прапорці цієї групи варто сказати окремо. «Використовувати сервер для рендерингу JavaScript» потрібен сайтам, які без виконання скриптів показують порожню сторінку, — і він же різко сповільнює обхід: у цьому режимі сервер бере по 4 адреси за раз у 2 потоки замість звичайних 100 адрес у 10 потоків. А «Завантажувати товари та ціни без відкриття картки» після створення джерела на універсальний парсер уже не впливає: за режим лістингу відповідає колонка «Товари в цій операції» в рядку «Селектор операції» групи «Список посилань на товари», і перемикати треба саме її.

«Обробка даних». «Виправляти неправильний HTML» (увімкнено), «Очищати посилання» — у універсального парсера прибирає з адрес лістингів хвіст після #, а параметри виду ?param=value зрізає тільки в готових модулів, — і «Видаляти товари перед завантаженням» (за замовчуванням стоїть). Останній прапорець варто зрозуміти правильно: якщо його зняти, із сайту завантажуватимуться тільки нові товари, а те, що зникло з сайту, залишиться у вашому прайсі.

«Автоматика та налагодження». «Авто пошук селекторів» — програма сама підбирає селектор там, де він порожній, на кожному прогоні. «Пошук за товарами БК» — обхід не по розділах, а пошуком на сайті за вашими товарами: у поле «Посилання на пошук товару» вписують адресу пошуку з макросом {NAME}, {SKU} або {EAN}, і програма підставить у неї назву, артикул чи штрихкод кожного товару базового каталогу. «Режим налагодження» — зберігає розмітку кожної сторінки в журналі парсингу; без нього дивитися там буде нічого.

«Завантаження цін». Прапорець «Завантажувати ціни».

Нижче — картка «Адреси сайту»: «Посилання на гол. сторінку сайту», «Посилання синонім» (другий домен того самого сайту — посилання на нього не відкидатимуться), «Посилання на категорії» (сторінка, з якої почнеться обхід, якщо це не головна), «Посилання на пошук товару», «ID категорії» та «Ігнорувати сторінки, які містять текст». Останнє поле відсікає службові сторінки: сторінка, у тексті якої трапився ваш рядок, у розбір не піде. Працює воно тільки в серверному режимі — сторінки, які приносить розширення браузера, через цю перевірку не проходять.

Акордеон «Додатково» внизу цієї ж вкладки ховає те, що потрібне рідко, але без чого окремі сайти не збираються: «Знайти» / «Замінити» (заміна по всій сторінці, до розбору), «Селектори CSS для видалення зайвих блоків», «Список тегів для видалення», видалення посилань свого й сторонніх доменів, списки cookies на видалення й на встановлення, «Заголовки HTTP», «Кодування сайту», а також «Макс. кількість сторінок із категорії» та «Макс. кількість товарів із категорії» — ці дві межі читають готові модулі, а універсальний парсер обмежують колонкою «Макс. кількість результатів» у рядку правила. Там же перемикач «Тип завантажуваних елементів»: «Товар», «Стаття», «Новина», «Рецепт». За замовчуванням — «Товар».

Запуск вручну

Кнопка «Імпортувати» в шапці правої панелі відкриває для джерела-парсера не імпорт файла, а вікно «Завантаження даних із сайту» — і обхід починається одразу, без окремого натискання. Та сама дія є на вкладці «Товари» картки джерела, там кнопка підписана «Завантажити». Майже все вікно займає стрічка операції — рядки зʼявляються в ній у міру роботи. У шапці:

  • «Почати завантаження» — створює завдання й починає обхід;
  • «Продовжити» — зʼявляється, коли з минулого разу лишилися незавершені завдання; поруч стоїть лічильник «Є незавершені завдання N» і підказка «Натисніть кнопку "Продовжити" для продовження роботи.»;
  • «Пауза» — видно лише під час роботи; у стрічку пишеться «Завдання призупинено», черга лишається на місці;
  • «Скасувати» — теж лише під час роботи; у стрічці «Завдання скасовано», після чого прогін завершується;
  • напис «триває робота» — поки він пульсує, збір живий; між рідкими рядками стрічки інакше не відрізнити роботу від зависання;
  • іконка журналу парсингу.

Що саме ви побачите в шапці, залежить від того, чи лишилися незавершені завдання з минулого разу. Якщо ні — обхід уже йде: у шапці тільки «Пауза», «Скасувати» й «триває робота». Якщо так — обхід не почався, а в шапці стоять «Почати завантаження» і «Продовжити», лічильник «Є незавершені завдання N» і підказка під ними.

Далі все залежить від того, хто відкриває сторінки — ваш браузер чи сервер.

Браузерний режим працює без модуля сервера. Вікно кожні три секунди питає в сервера порцію завдань і передає їх розширенню Elbuz, розширення відкриває сторінки й повертає розмітку. Звідси два наслідки, про які варто знати заздалегідь: без розширення не збереться нічого, а закрите вікно зупиняє збір. Прогін вважається завершеним після пʼяти порожніх відповідей поспіль.

Серверний режим вмикається прапорцем «Використовувати сервер для завантаження даних» і працює, тільки якщо у вашому акаунті активований відповідний модуль. Тоді сторінки качає сервер Elbuz — по 100 адрес за раз у 10 потоків, у режимі «Напряму, без проксі» у 20, — а вікно лише показує стрічку. Його можна закрити.

Посилання «Встановити розширення» показується у вікні налаштувань, коли в парсера знятий прапорець «Використовувати сервер для завантаження даних», — тобто рівно тоді, коли розширення й потрібне. Ставиться воно зі сторінки встановлення розширення для Google Chrome.

Коли обхід закінчився, програма не просто закриває вікно. Вона застосовує до зібраного всі операції прайсу — націнку, наявність і решту, — у стрічці на цей час висить «Застосування різних операцій для товарів», а потім переіндексовує товари джерела й оновлює сітку, щоб ви не дивилися на старі дані. Останній рядок стрічки — «Завдання завершено» і «Витрачено: мм:сс».

Запустити все одразу можна пунктом бургера «Запустити всі парсери сайтів» у групі «Завантаження джерел» списку прайс-листів. Програма сама збере всі активні джерела-парсери й оброблятиме їх по черзі: закінчився один — вікно закривається й через півтори секунди відкривається для наступного.

Запуск за розкладом

Розклад відкривається кнопкою «Налаштування розкладу» — вона стоїть у верхньому ряду вкладки «Додатково», поряд із «Журналом парсингу» і «Списком проксі серверів».

Верхній ряд кнопок вкладки «Додатково» вікна налаштування парсера
1«Журнал парсингу»
2«Налаштування розкладу»
3«Список проксі серверів»
  1. «Журнал парсингу» — покрокова історія обробки кожної сторінки.
  2. «Налаштування розкладу» — регулярний збір, працює лише в серверному режимі.
  3. «Список проксі серверів» — власні адреси для обходу.

Головна умова: розклад працює тільки в серверному режимі. При вимкненому модулі сервера завдання за розкладом припиняє роботу першим же рядком і нічого не збирає — ні попередження, ні помилки ви не побачите.

Вікно «Налаштування розкладу» парсера сайту
1Перемикач «Активність»
2Вибір часу запуску
  1. Перемикач «Активність» вмикає розклад — без нього завдання за розкладом не запускається.
  2. Поля дня тижня та часу («Кожен тиждень у понеділок-п'ятниця у 17:10») задають, коли саме стартує парсинг.

Друга умова стосується самого джерела. Якщо парсер працює в браузері, розклад його пропускає й пише в журнал: «Джерело ID 123 пропущено розкладом: парсер працює у браузері, за розкладом він не запускається». Якщо серверний режим у парсера стоїть, а модуль в акаунті не підключений, повідомлення інше: «Джерело ID 123 пропущено розкладом: серверний парсинг для акаунта не підключено». Обидва рядки шукайте в журналі операцій — саме за ними видно, що розклад спрацював, а джерело просто не взяли в роботу.

Два прогони за розкладом одночасно не запускаються. Якщо в момент старту вже йде інший парсинг, у журнал пишеться «Скасовано завантаження за розкладом, причина - завантажується інший шаблон парсингу (конфлікт обробки даних).» — і цей запуск просто не відбувається. Коли таке повторюється щоразу, розведіть джерела по різних годинах.

Ще одна деталь, спільна для обох режимів: завдання, яке не отримало відповіді довше 35 секунд, повертається в чергу з відміткою в журналі й лічильником спроб. За замовчуванням спроб пʼять, для окремих майданчиків більше. У браузерному режимі це найчастіше означає згорнуте вікно, у серверному — повільний сайт.

Коли сайт не віддає сторінки

Сайти захищаються від автоматичного обходу, і це нормальна частина роботи. Програма розрізняє два випадки.

Перевірка «ви не робот». На цей випадок передбачена окрема поведінка: збір стає на паузу, сторінка повертається в чергу, лунає звуковий сигнал, а в стрічці червоним зʼявляється «Виявлено капчу» й посилання «Пройдіть перевірку на сайті та натисніть «Продовжити»». Веде воно саме на ту сторінку, де перевірка трапилася, і відкривається у звичайній вкладці браузера, де живуть ваші куки: пройшли перевірку — «Продовжити», і обхід іде далі з того самого місця.

Розпізнає програма перевірку за прикметами — характерними шматками коду сторінки, які записані в налаштуваннях самого парсера. У готових модулів вони заповнені: у Hotline, наприклад, це g-recaptcha, «Automatic checking against unwanted bots» і ще кілька рядків. А в універсального парсера, якого заводить майстер, прикмет немає жодної, і це головне, що треба знати: сторінка з перевіркою приїде до нього як звичайна. У журналі парсингу в неї буде код 200 і підозріло малий розмір, а товарів із неї нуль. Побачили таку картину — відкрийте цю адресу у своєму браузері й подивіться, що на ній насправді.

Відмова сервера. Коди 400 і вище означають, що сторінка не відкрилася. 404 закривається одразу й назавжди — сторінки більше немає. Решта (403, 429, 5xx) повторюється до двадцяти разів, після чого завдання закривається. Тіло відповіді як результат розбору не зберігається ніколи: сторінка з написом «Access Denied» не потрапить у ваш прайс як опис товару. До ваших рядків у полі «Ігнорувати сторінки, які містять текст» програма додає ще сім службових прикмет — заглушки Cloudflare, «403 Forbidden», «Access Denied» і подібні. Робить вона це тільки в серверному режимі: у браузерному сторінку приносить розширення, і цієї підстраховки немає.

Що з цим робити, залежить від сайту. Якщо постачальник дав вам доступ — «Напряму, без проксі»: такі запити не тарифікуються. Якщо сайт просто не любить чужих — «Через проксі» або власні адреси у вікні «Список проксі серверів» (кожна адреса з нового рядка, у форматі user:password@proxyserver:proxyport або proxyserver:proxyport). Якщо не допомагає ні те, ні інше — «Через сервіс обходу захистів»: він обходить капчу й антибот-захист великих майданчиків, але тарифікується окремо за кожен запит. Коли гроші на балансі закінчаться, прогін зупиниться з повідомленням «Преміум-парсинг (обхід захистів) зупинено: недостатньо коштів на балансі. Поповніть баланс, щоб продовжити.»

Три журнали, і це різні речі

Найчастіша плутанина в цій підсистемі — не селектори, а журнали. Їх три, і вони відповідають на різні питання.

Жива стрічка у вікні «Завантаження даних із сайту» відповідає на питання «що відбувається просто зараз». Рядки приходять по ходу роботи: «Починаємо завантаження», «Завантажуємо дані за посиланнями - N (M)», де N — скільки сторінок пішло в роботу в цій порції, а M — скільки завдань лишилося, «Виявлено капчу», «Операція перервана користувачем!», «Застосування різних операцій для товарів», «Завдання завершено». Архівом стрічка не є: рядки приходять у реальному часі й ніде не переграються, тож заново відкрите вікно порожнє, а записи минулого прогону стираються, щойно ви запустите наступний.

«Журнал парсингу»: рядок на кожну сторінку

Це вікно відповідає на питання «що сталося з кожною сторінкою». По суті це черга завдань: один рядок — одна сторінка, яку треба було відкрити й розібрати. Відкривається кнопкою «Журнал парсингу» вгорі вкладки «Додатково» або іконкою журналу у вікні збору, і одразу відфільтроване по вашому джерелу.

Відкрили журнал між прогонами й побачили «Немає даних для відображення» — це норма, а не збій налаштування. Черга живе рівно стільки, скільки йде обхід: на старті кожного прогону програма чистить і її, і докладні рядки загального журналу за цим джерелом. Тому в журнал заглядають під час роботи або одразу після неї; коли потрібна історія за минулі дні, її дивляться на вкладці «Журнал» у картці джерела.

Колонки, у порядку корисності при розборі: «Тип операції» (посилання на категорії, посилання на товари, картка товару, атрибути товару), «Посилання», «HTTP код відповіді», «Розмір, кб», «Повторів», «Статус» — накопичувальний рядок, куди програма дописує причини, «Дата додавання», «Виконано», «У роботі», «Час відповіді», «Дата виконання», «Контрагент/Прайс», «Користувач», «ID завдання». Іконка сторінки в рядку відкриває «HTML код сторінки» — але тільки якщо в налаштуваннях був увімкнений «Режим налагодження»; інакше розмітка не зберігається.

Колонка «Тип операції» — найкорисніша й найменш очевидна: вона показує, до якого кроку конвеєра дійшов обхід. Якщо в журналі є рядки «Посилання на категорії» і «Посилання на товари», але жодного «Картка товару (контент)», ланцюжок обірвався на другому кроці — селектор блоку товару нічого не знайшов. Якщо є картки, але немає атрибутів, справа в четвертому кроці.

У тулбарі є «Оновити» і «Зупинити парсинг даних» — друга кнопка зупиняє збір, не відкриваючи вікна запуску.

Журнал прогонів джерела відповідає на питання «скільки рядків у підсумку приїхало». Це та сама вкладка «Журнал» у картці джерела, що й у файлових прайсів, з оцінкою здоровʼя, плитками й історією; у колонці «Формат» для такого джерела стоїть parser.

Сайт змінив вигляд — і зібралося не те

Це найчастіша поломка збору, і виглядає вона мирно: прогін проходить, помилок немає, а товарів немає теж. Або вони є, але з порожніми назвами. Причина майже завжди одна — сайт перемалювали, і селектори більше не знаходять того, що знаходили торік. Розбирається це в чотири прийоми, і порядок має значення.

Крок перший — прочитати «Журнал парсингу» (кнопка вгорі вкладки «Додатково»), бо він відрізняє «сайт не віддав сторінку» від «сторінка приїхала, але не розібралася», а колонка «Тип операції» показує, на якому кроці все зупинилося. Зробіть це до наступного запуску: кнопка «Почати завантаження» стирає і чергу завдань, і живу стрічку минулого прогону, тож дивитися буде вже нічого. «Продовжити» нічого не стирає. Ознаки такі:

  • код відповіді 200, «Розмір, кб» нормальний, а товарів немає — сторінка приїхала цілою, справа в селекторах;
  • код 403, 429 або 5xx і «Статус» із http … — сторінка не відкрилася, пропущено — сайт відмовив, селектори ні до чого, дивіться режим завантаження;
  • код 404 і «Виконано» — сторінки більше немає, приберіть адресу;
  • «Розмір, кб» підозріло маленький — замість сторінки приїхала заглушка антибота або перевірка «ви не робот»;
  • завдань немає взагалі, а в стрічці одразу «Завдання завершено» — обходити нічого: або порожній «Список посилань» разом із порожнім селектором категорій, або «Селектор операції» не знайшов на сторінці жодного посилання.

Крок другий — тест правила на тому кроці, де обірвався ланцюжок. Вписуєте в колонку «Посилання для тестування» адресу сторінки, яка точно існує, і тиснете кнопку тесту в рядку «Селектор операції». Ліва панель «Результат тестування» покаже, що саме повертає селектор зараз. Порожньо — селектор мертвий; є, але не те — селектор ловить сусідній блок.

Крок третій — підібрати селектор заново. Для операцій зі списками це «Майстер налаштування парсера»: він покаже готові селектори для всіх груп посилань на сторінці, вам лишиться скопіювати потрібний у «Селектор операції». Для картки товару й атрибутів — кнопка підбору штучним інтелектом, яка перезаписує правила сама.

Крок четвертий — увімкнути «Авто пошук селекторів», якщо сайт перемальовують регулярно. У цьому режимі програма підбирає селектор сама на кожному прогоні там, де він порожній, і відрізняє сторінку списку від картки за характерними для лістингу словами й позначками ціни.

Коли з сайту приїхало не те

Чого парсер не робить

  • Не збирає, поки закрите вікно. Це стосується браузерного режиму: сторінки відкриває розширення браузера, і разом із вікном зупиняється збір. Фоновий обхід і розклад доступні лише в серверному режимі.
  • Не впізнає перевірку «ви не робот» без прикмет у налаштуваннях. У готових модулів вони заповнені, в універсального парсера — ні, і тоді блокування виглядає як порожній результат із малим розміром сторінки в журналі.
  • Не бере те, чого немає в сітці правил. Перелік полів фіксований: 21 у лістингу, 33 у картці, шість в атрибутах. Своє поле дописати не можна.
  • Не зберігає розмітку сторінок без «Режиму налагодження». Поки прапорець вимкнений, у журналі парсингу є код відповіді й розмір, але подивитися, що саме приїхало, не вийде — і розібратися постфактум теж.
  • Не тримає живу стрічку як архів. Заново відкрите вікно показує порожню стрічку, а записи минулого прогону стираються на старті наступного. Історія прогонів живе в іншому місці — у журналі джерела.
  • Не питає підтвердження на збереження. У вікні налаштувань немає ні кнопки «Зберегти», ні скасування: змінене поле вже записане.
  • Не робить окремих налаштувань для готового модуля. Усі джерела, привʼязані до того самого готового парсера, ділять один запис налаштувань.
  • Не вміє входити на сайт під логіном із цього вікна. Форми авторизації у формі не налаштовуються — з інтерфейсу доступні лише cookies й заголовки HTTP в акордеоні «Додатково» внизу вкладки.
  • Не зіставляє категорії й не рахує націнку сам по собі. Це операції прайс-листа, спільні для всіх джерел, і виконуються вони після завершення обходу — описані в статті про завантаження прайсу.

Розбір частих проблем

Повідомлення парсера й що з ними робити
Що ви бачитеЧому такЩо зробити
У журналі парсингу код 200, «Розмір, кб» помітно менший за звичайний, товарів із цих сторінок немає Приїхала не сторінка, а заглушка захисту або Відкрити цю ж адресу у своєму браузері. Якщо там перевірка — пройти її або змінити режим завантаження сторінок (про блокування)
«Завдання завершено» одразу після старту, у журналі парсингу жодного рядка Черга не створилася: «Список посилань» порожній і при цьому в групі «Список посилань на категорії товарів» немає ні селектора, ні «Авто пошуку селекторів». У браузерному режимі так само виглядає відсутнє Заповнити «Селектор операції» першого кроку або додати адреси у «Список посилань»; перевірити розширення (з чого починається обхід)
Код відповіді 200, розмір сторінки звичайний, а товарів немає Сторінка приїхала цілою, але селектори її більше не розбирають — сайт змінив вигляд Тест правила → майстер селекторів → підбір ШІ, саме в такому порядку. У серверному режимі перевірте заодно поле «Ігнорувати сторінки, які містять текст» (сайт змінив вигляд)
Тест правила показує порожню панель, хоча селектор скопійований із браузера У рядку записаний XPath, а галочка «XPath» не поставлена — або в CSS-селекторі є синтаксична помилка. Розбір сторінки в такому разі обривається, а не повертає порожній список Поставити галочку «XPath» у цьому ж рядку або виправити селектор (про селектори)
«Регулярний вираз» у рядку правила нічого не змінює Разом із селектором вираз бере друге співпадіння першої дужки. Якщо співпадіння одне, значення лишається як було Прибрати селектор із рядка, щоб вираз шукав по всій сторінці, або переписати вираз так, щоб потрібне було другим співпадінням (обробка значення)
Атрибути не збираються, хоча селектори назви й значення заповнені Порожній «Селектор №2» у рядку «Селектор операції» групи «Атрибути»: без селектора рядка характеристики операція завершується, нічого не роблячи Вписати в «Селектор №2» селектор одного рядка характеристики, зазвичай tr (крок «Атрибути»)
У режимі «без відкриття картки» прогін проходить, а в прайсі порожньо Товар без назви або без адреси не зберігається. Найчастіше не заповнене поле «Посилання на товар (URL)» у групі «Список посилань на товари» Заповнити в цій групі обидва поля — «Найменування» і «Посилання на товар (URL)» (крок «Список посилань на товари»)
У стрічці червоним: Main domain not exist in url! і дві адреси Селектор захопив посилання на інший домен — таке в чергу не потрапляє Уточнити селектор. Якщо сайт справді віддає товари на другому домені — вписати його в «Посилання синонім» (про обхід)
У журналі парсингу: http 403 — сторінка не відкрилася, пропущено Сайт відмовив. Тіло відповіді як результат не зберігається, завдання повторюється до двадцяти разів Змінити «Як сервер завантажує цей сайт» або підключити свої проксі. Якщо постачальник дав доступ — «Напряму, без проксі» (про блокування)
Те саме з кодом 404 Сторінки більше немає; завдання закривається одразу, без повторів Прибрати адресу зі «Списку посилань» або перезавантажити карту сайту
У журналі: op_status = 1 немає відповіді понад 35 сек, спроба 2 / 5 Відповідь не прийшла за 35 секунд. У браузерному режимі — закрили вікно, згорнули браузер, немає розширення; у серверному — повільний сайт Не закривати вікно під час збору або ввімкнути «Використовувати сервер для завантаження даних» (про два режими)
У журналі: op_status = 3 был получен пустой ответ Сторінка прийшла порожньою. Завдання повертається в чергу й повторюється, поки не вичерпані пʼять спроб Перевірити адресу в браузері. Якщо сторінка відкривається, а порожні відповіді повторюються — увімкнути «Використовувати сервер для рендерингу JavaScript»
«fetch-сервіс не повернув HTML, пропущено» Зовнішній сервіс завантаження сторінок повернув порожню відповідь Повторити прогін; якщо повторюється — змінити режим завантаження сторінок
«Джерело ID 123 пропущено розкладом: парсер працює у браузері, за розкладом він не запускається» У парсера знятий прапорець «Використовувати сервер для завантаження даних», а розклад уміє запускати тільки серверний збір Увімкнути серверний режим або запускати це джерело руками (про розклад)
«Джерело ID 123 пропущено розкладом: серверний парсинг для акаунта не підключено» У парсера серверний режим стоїть, але сам модуль в акаунті не активований Підключити модуль «Використовувати сервер для завантаження даних» (хто має доступ)
«Скасовано завантаження за розкладом, причина - завантажується інший шаблон парсингу (конфлікт обробки даних).» Інший прогін за розкладом уже йде; двох одночасних не буває Дочекатися завершення. Якщо повторюється щоразу — рознести розклади джерел по різних годинах (про розклад)
«Операція перервана користувачем!» Натиснуто «Скасувати» — тут або в іншому вікні Нічого. Незавершені завдання лишилися: наступного разу вікно запропонує «Продовжити»
«Є незавершені завдання N» і «Натисніть кнопку "Продовжити" для продовження роботи.» Минулий прогін не дійшов до кінця «Продовжити» — обхід піде з того самого місця. «Почати завантаження» почне все заново й зітре журнал минулого прогону (про запуск)
«Преміум-парсинг (обхід захистів) зупинено: недостатньо коштів на балансі. Поповніть баланс, щоб продовжити.» Обрано «Через сервіс обходу захистів», гроші на балансі скінчилися Поповнити баланс або повернути режим «Через проксі»
«Оберіть готовий парсер зі списку або вкажіть посилання на сайт» У майстрі вибрано плитку «Парсер сайту», але ні модуль не відмічено, ні адресу не введено Вибрати щось одне: варіанти взаємовиключні (про майстер)
Вікно «Виникла проблема!» з текстом «Посилання для тестування!» Натиснуто кнопку-блискавку, а колонка «Посилання для тестування» в рядку порожня Вписати в цю колонку адресу сторінки потрібного виду: розділу — для операцій зі списками, картки товару — для картки й атрибутів
Налаштування у вкладці «Додатково» «не збереглися» Кнопки «Зберегти» у вікні немає: форма йде на сервер при кожній зміні поля, але підтвердження не показує Закрити й відкрити вікно — значення перечитаються з бази (про вкладку «Додатково»)
Змінили налаштування одному джерелу — змінилися в іншого Джерела на тому самому готовому модулі ділять один запис налаштувань. Коли джерел більше одного, вікно пише про це над вкладками Розвести такі сайти по різних акаунтах або завести на цей сайт універсальний парсер (про готові парсери)

Хто має доступ

Права в цій підсистемі задаються на рівні вікна цілком: окремих блоків усередині вікон парсера немає, тому дати доступ «тільки до списку посилань, але не до налаштувань» не вийде. Вікон у групах доступу чотири: «Налаштування парсера джерела» — так вікно з правилами розбору названо у списку прав, хоча в заголовку самого вікна стоїть «Налаштування завантаження даних із сайту», — далі «Завантаження даних із сайту» і два журнальних вікна, «Журнал парсингу» та «Журнал парсингу сайтів».

Перевірка права виконується у вікні журналу парсингу: воно відкривається, якщо співробітникові дозволене хоча б одне з двох журнальних вікон — «Журнал парсингу» або «Журнал парсингу сайтів», — інакше показує сторінку відмови. Вікно налаштувань парсера й вікно збору такої перевірки в коді не мають — вони відкриваються в кожного, хто може відкрити картку джерела. Тобто фактичною межею тут працює доступ до вікна «Прайс-листи».

Окремо стоїть модуль «Використовувати сервер для завантаження даних». Поки він вимкнений, серверні прогони не стартують, розклад не працює, а джерела із серверним парсером пропускаються під час масового завантаження. Вмикається він і сам — якщо в майстрі залишити «Автоматичне налаштування».

Часті запитання

Чи потрібно тримати вікно відкритим, поки йде збір?

У браузерному режимі — так. Сторінки відкриває розширення Elbuz у вашому браузері, а вікно кожні три секунди питає в сервера чергову порцію завдань; закрили вікно — збір зупинився. У серверному режимі вікно можна закрити: сторінки качає сервер, а вікно лише показує стрічку. Ознака браузерного режиму проста: прапорець «Використовувати сервер для завантаження даних» знятий або модуль сервера в акаунті не активований.

Чому після майстра збір почався сам, я нічого не натискав?

Так працює перемикач «Автоматичне налаштування (почати завантаження перших 300 товарів)», який у майстрі увімкнений за замовчуванням. Разом із другим перемикачем, «Завантажувати товари та ціни без відкриття картки», він відкриває вікно «Завантаження даних із сайту» з автозапуском у будь-якому разі — карту сайту в цьому режимі навіть не шукають. Щоб цього не сталося, зніміть перемикач перед натисканням «Далі»: тоді відкриється вікно налаштувань, і збір чекатиме на вашу кнопку «Почати завантаження».

Скільки товарів забере перший прогін?

Якщо джерело створене з автоналаштуванням — не більше 50 посилань на розділи й не більше 300 збережених товарів, після чого черга очищається й збір зупиняється сам. Сторінки пагінації в перший прогін не додаються взагалі: з кожного розділу береться перша сторінка. Це навмисне обмеження: подивитися на результат, поки обхід не пішов по всьому сайту. Діє воно рівно один раз — після завершення першого прогону знімається, і наступний запуск працює без стелі.

Де в налаштуваннях задається пагінація?

Не там, де її шукають. Пагінація живе в групі «Список посилань на товари», у рядку «Селектор операції», колонка «Селектор №2» — туди вписують селектор посилань на наступні сторінки розділу. Якщо посилань пагінації на сайті немає, а сторінки будуються адресою, заповніть «Селектор загальної кількості сторінок» або пару «Селектор загальної кількості товарів» і «Селектор кількості товарів на сторінці»: програма порахує число сторінок і збудує адреси сама, дописавши «Префікс посилання» й номер.

Як забрати значення з атрибута тега, а не з тексту?

Через ::attr(імʼя) в кінці CSS-селектора. Наприклад, ціна, захована в розмітці для пошукових систем, береться так: meta[itemprop=price]::attr(content). Так само беруть адресу з srcset: img.photo::attr(srcset), причому в «Картці товару» з набору розмірів програма сама візьме найбільший. У лістингу такого відбору немає: там для повного розміру потрібен інший атрибут.

Тест правила показує порожньо, хоча селектор я скопіював із браузера. Що не так?

Найчастіше причина одна з трьох. Перша: у рядку записаний XPath, а галочка «XPath» не поставлена — тоді розбір сторінки обривається, а не повертає порожній список. Друга: у колонці «Посилання для тестування» стоїть сторінка не того виду — адреса розділу для операції «Картка товару» нічого не дасть. Третя: сайт віддає серверу не те, що бачите ви в браузері, — тоді результат тесту й результат прогону розійдуться.

Змінив налаштування одному джерелу — змінилися в іншого. Чому?

Тому що обидва сидять на готовому модулі. Копія налаштувань під ваш прайс не створюється: джерело привʼязується до системного запису парсера, спільного для всіх. Якщо для того самого сайту потрібні різні налаштування, заведіть універсальний парсер — у нього запис свій.

Натиснув кнопку підбору селекторів штучним інтелектом. Можна повернути старі значення?

Ні. Перед підбором вікно перепитує — «ШІ підбере селектори для цієї операції та ЗАМІНИТЬ ними поточні налаштування розбору. Повернути попередні значення буде неможливо.», — але якщо підтвердження вже дано, скасування немає. Селектори доведеться вписати заново або підібрати ще раз. Тому перед натисканням блискавки скопіюйте поточні значення собі.

Де подивитися HTML сторінки, яку забрала програма?

У вікні «Журнал парсингу», іконкою сторінки в рядку — відкриється «HTML код сторінки». Але зберігається розмітка тільки тоді, коли в налаштуваннях увімкнений «Режим налагодження» на вкладці «Додатково». Без нього в журналі будуть код відповіді, розмір і час, а самої сторінки не буде.

Розклад налаштований, а збір не запускається. Що перевірити?

Найперше — чи ввімкнений серверний режим: без модуля «Використовувати сервер для завантаження даних» завдання за розкладом припиняється першим же рядком і нічого не робить. Друге — чи не йде в цей момент інший парсинг: два прогони за розкладом одночасно не запускаються, і в журнал пишеться «Скасовано завантаження за розкладом, причина - завантажується інший шаблон парсингу (конфлікт обробки даних).» Третє — чи немає в журналі операцій рядка «Джерело ID … пропущено розкладом»: у ньому названа причина.

Прогін завершився, але товари в прайсі старі. Чому?

Подивіться прапорець «Видаляти товари перед завантаженням» на вкладці «Додатково». Якщо він знятий, із сайту забираються тільки нові товари: адреси наявних заносяться в чергу з позначкою «ігнорувати», і їхні сторінки цього разу не відкриваються — старі позиції залишаються в прайсі, навіть коли на сайті їх уже немає. Друга можлива причина — прогін закінчився раніше, ніж дійшов до карток: перевірте в журналі парсингу, чи були завдання типу «Картка товару» й з яким кодом відповіді вони закрилися.

Суміжні теми

Чи була стаття корисною?