Парсер Hotline.ua

14 хв

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

Модуль розбору для Hotline уже написаний — селектори налаштовувати не потрібно, на відміну від довільного сайту постачальника.

Два модулі Hotline: який брати

У списку готових парсерів Hotline зустрічається двічі, і це не помилка. Це два різні способи взяти ті самі дані.

«Hotline»
звичайний розбір: програма завантажує сторінку й розкладає її за селекторами
«Hotline (API)»
швидкісний модуль: дані беруться з програмного інтерфейсу самого сайту пачками

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

У списку готових модулів майстра ці два рядки розрізняються тільки назвою — «Hotline» і «Hotline (API)», з однаковим логотипом і адресою hotline.ua. У вікні «Пошук контенту для товарів», де той самий перелік сайтів використовується для наповнення карток, швидкісний модуль додатково позначений міткою «⚡ Швидкісний».

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

Далі в статті все, що не позначене окремо, стосується обох модулів.

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

Порядок такий самий, як у будь-якого джерела: майстер питає, від кого дані («Хто»), і звідки їх брати («Звідки»). На кроці «Хто» оберіть наявного контрагента або впишіть назву — наприклад, «Hotline, моніторинг». На кроці «Звідки» виберіть парсер сайту — розгорнеться блок «Готові парсери», у ньому знайдіть потрібний рядок Hotline.

Список готових парсерів у майстрі підключення джерела: рядки «Hotline» та «Hotline (API)»
1Hotline
2Hotline (API)
  1. Hotline — звичайний модуль, розбирає завантажені сторінки сайту.
  2. Hotline (API) — бере дані пачками через API сайту, працює в рази швидше, доступний лише в серверному режимі.

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

Список посилань

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

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

Сторінка розділу Hotline віддає рівно 48 товарів, скільки не проси — перевірено запитами на 100, 200 і 500. Тому «максимум сторінок» перекладається в товари просто: 10 сторінок — це 480 позицій. Почніть із двох-трьох сторінок, подивіться, що приїхало, і лише потім знімайте межі.

Є й стеля, яку не обійти налаштуваннями: більше 200 сторінок з одного розділу швидкісний модуль не бере. Це дев'ять тисяч товарів — більше за найбільший розділ сайту, тож на практиці в неї впираються тільки тоді, коли в «максимумі сторінок» стоїть нуль.

Пропозиції магазинів: заради чого це роблять

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

Це вміє тільки швидкісний модуль. У звичайного розбір списку продавців вимкнений — сторінка Hotline стала динамічною, і з завантаженої сторінки продавці більше не витягуються; самого прапорця в його налаштуваннях теж немає.

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

Поле «Пропозицій на товар» обмежує довжину списку; типове значення — 200.

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

Місто: чому ціни приходять не ті, що ви бачите

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

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

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

Прогін: що відбувається після «Почати завантаження»

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

Швидкісний модуль веде прайс двома шляхами, і порядок у нього такий:

  1. прайс очищується — рядки попереднього прогону видаляються разом з їхніми фото, характеристиками й пропозиціями магазинів;
  2. обходяться адреси зі «Списку посилань»: розділи — посторінково, окремі картки — поштучно;
  3. товарам зі списку спостереження «Мої товари», яким картку на Hotline ще не знайшли, шукається відповідник за назвою;
  4. по товарах спостереження з уже відомою карткою забираються ціни;
  5. якщо ввімкнено прапорець пропозицій — забираються списки продавців, одним заходом по всьому, що лягло в прайс;
  6. наприкінці застосовуються операції прайсу (наявність, націнки, зіставлення) і перераховується підсумкова таблиця.

Поки шостий крок не пройшов, робота не завершена, хоч ціни в прайсі вже видно.

По чому видно, що прогін відпрацював

Дивляться в журнал прогону — те саме вікно, що відкриває кнопка «Завантажити», — і на плитку «Останній прогін» в картці прайс-листа: у ній дата завершення, а натискання відкриває той самий журнал. Рядки журналу називають цифри прямо:

  • «⚡ Моніторинг цін: оновлено товарів …, нових зіставлень …, запитів до джерела …» — підсумок швидкісного модуля: скільки рядків записано в прайс, скільком товарам уперше знайшли картку на сайті й скільки запитів пішло до Hotline.
  • «📂 Розділ «…»: отримано товарів …» — окремим рядком по кожній адресі зі «Списку посилань».
  • «🏬 Пропозиції магазинів: збережено …» — скільки пропозицій продавців лягло в прайс.
  • «Завдання завершено» — останній рядок прогону. Доки її немає, операції прайсу ще не застосовані.

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

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

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

Якщо прогін обірвався

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

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

Ознака обірваного прогону — відсутність рядка «Завдання завершено». Операції прайсу (наявність, націнки, перерахунок) виконуються одним заходом у кінці, і на обірваному прогоні вони не виконувалися зовсім.

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

Повторний прогін: що перезапишеться, а що лишиться

Рядки прайсу не оновлюються по місцю. Швидкісний модуль перед кожним прогоном видаляє всі товари цього прайсу — разом з їхніми фото, характеристиками й пропозиціями магазинів — і записує зібране наново. Тому виправлення, зроблені руками просто в сітці товарів прайсу (ціна, назва, наявність), після наступного прогону зникають: у прайсі буде те, що віддав сайт.

У звичайного модуля це залежить від прапорця «Видаляти товари перед завантаженням» на вкладці «Додатково»:

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

Що прогін не губить:

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

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

Товар зник з Hotline

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

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

Якщо вже зібрали не те

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

Коли прибрати треба тільки частину:

  • Зайві товари. У сітці товарів прайсу відберіть їх фільтром — назва розділу Hotline лежить у колонці «Категорія із прайсу», — позначте галочками й виберіть у меню «Видалити» → «Видалити товар». Пункт «Видалити всі товари» очищає прайс цілком. Разом із рядком ідуть його фото, характеристики й пропозиції магазинів.
  • Непотрібний розділ. На вкладці «Список посилань» зніміть позначку в колонці «Статус»: рядок лишиться, але обхід за ним більше не піде. Видалення рядка робить те саме остаточно.
  • Конкретний магазин. На вкладці «Список продавців» поставте йому «Чорний список» — наприкінці кожного прогону його пропозиції видаляються з прайсу, тобто вже зібрані зникнуть після наступного прогону. Запити на них при цьому витрачаються: пропозиції спершу забираються й лише потім відсіюються. Зворотний варіант — «Білий список»: у прайсі лишаються пропозиції тільки відмічених продавців.

Куди лягають магазини, категорії та виробники

Прогін приносить не тільки ціни — він поповнює три різні списки, і чистяться вони по-різному.

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

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

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

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

Що приїжджає з картки товару

Набір керується прапорцями в налаштуваннях джерела: характеристики, фото, опис, ціна. Що саме дає Hotline:

  • Назва й виробник — у тому вигляді, у якому їх веде агрегатор.
  • Розділ сайту — стане в пригоді при зіставленні категорій.
  • Мінімальна ціна по товару.
  • Короткі характеристики — рядок, який на сайті стоїть під назвою.
  • Повний опис — тільки у швидкісного модуля й тільки з увімкненим прапорцем опису.
  • Характеристики — з розбивкою на групи, як вони згруповані на сайті.
  • Фотографії.
  • Штрихкод — тільки у швидкісного модуля. Річ рідкісна й корисна: за ним добре зіставляти товари.

Чого не буває: відгуків і відео. Ці прапорці для Hotline нічого не змінюють.

Hotline як джерело контенту

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

Штрихкод, який приносить швидкісний модуль, робить зіставлення точнішим: збіг за штрихкодом надійніший за збіг за назвою.

Скільки коштує прогін

Платять не за товари в прайсі, а за роботу нашого сервера — і одиниця оплати у двох модулів різна.

МодульЩо йде в рахунок
Hotlineкожна завантажена сторінка: один запит — один рядок витрат. Сторінка розділу — один запит, картка кожного товару — ще один
Hotline (API)товари, за якими ходили до джерела. Сорок товарів приїжджають одним запитом, але в рахунок ідуть сорок товарів, а не один запит

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

Обидва модулі рахуються за звичайною серверною ставкою: преміальний режим обходу захистів для Hotline не потрібен і не вмикається. Не тарифікується зовсім: обхід через розширення браузера — запити робить ваш браузер, а не наш сервер — і офлайн-встановлення. На тарифі з фіксованою ціною в рахунок не йде звичайний модуль; швидкісний рахується й там.

Витрачене видно у вікні «Баланс» на вкладці «Історія операцій» (про баланс — окрема стаття). Списання йде не в момент прогону: витрати накопичуються рядками, знімає їх з балансу окреме фонове завдання, і в історії вони з'являються вже зведеною сумою за типом операції.

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

Вимкнути джерело чи видалити

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

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

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

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

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

Чого модуль не робить

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

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

Що ви бачитеЧому такЩо зробити
Ціни стрибають між прогонамимісто не задано, регіон визначається за адресою запитузаповніть «ID міста»
Прогін іде дуже довгообрано звичайний модуль або не виставлені межі обходувізьміть «Hotline (API)» і обмежте сторінки та товари з категорії
Швидкісний модуль не запускаєтьсявін працює тільки в серверному режиміперемкніть джерело в серверний режим або користуйтеся звичайним модулем
Продавців немає, тільки одна цінавимкнено «Збирати пропозиції магазинів» або обрано звичайний модуль, який продавців не збирає зовсімперейдіть на «Hotline (API)» і ввімкніть прапорець; пам'ятайте про обсяг даних
Ціни не оновилися, у журналі «⚠️ Джерело не відповіло, товари лишаються у черзі:»прогін обірвався вже після того, як прайс очистилизапустіть прогін ще раз — він знову очищає прайс і збирає все наново, дублів не буде
Правки, зроблені руками в сітці прайсу, зниклипрайс перезбирається з нуля на кожному прогонізакріплюйте значення в картці товару каталогу — «Не оновлювати» або «Фіксована ціна»
Товар був у прайсі, а тепер його немаєйого не стало на Hotline: у прайсі лежить тільки те, що приїхало цього разузвірте дату в колонці «Перевірено» на вкладці «Мої товари»
Розклад і далі запускає прогони, хоч прайс неактивнийпозначка «Прайс активний» розкладу не стосуєтьсявимкніть завдання розкладу «Парсинг товарів із сайту» або приберіть із нього це джерело
Немає штрихкодів і описівїх дає лише швидкісний модуль, і опис — за окремим прапорцемперейдіть на «Hotline (API)» і ввімкніть прапорець опису
З розділу приїхало рівно 48 товарівстільки віддає одна сторінка розділупідніміть «Макс. кількість сторінок із категорії»
Змінив налаштування — змінилося в іншому джереліналаштування готового модуля спільнірозводьте сценарії різними модулями або погоджуйте налаштування

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

Який із двох модулів Hotline вибрати?

Якщо джерело працює на сервері — «Hotline (API)»: він швидший і приносить більше (штрихкод, повний опис). Звичайний «Hotline» залишається для випадків, коли серверний обхід недоступний.

Чи потрібен акаунт на Hotline, щоб увімкнути парсер?

Ні. Збираються публічні дані карток і пропозицій, вхід на сайт не потрібен.

Навіщо заповнювати місто?

Hotline показує ціни за регіоном. Без міста регіон визначається за адресою запиту, і цифри пливуть від прогону до прогону.

Скільки продавців збирається з одного товару?

Стільки, скільки задано в полі «Пропозицій на товар»; типово 200. Прапорець збору пропозицій має бути ввімкнений.

Чи можна оновлювати ціни автоматично?

Так, джерело ставлять на розклад так само, як звичайний прайс постачальника.

Чи можна брати з Hotline характеристики й фото для свого каталогу?

Так, це другий типовий сценарій. Зберіть товари, зіставте їх зі своїми й перенесіть поля пакетним оновленням каталогу.

Що станеться з правками, які я зробив у прайсі руками?

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

Чи зупинить прогони за розкладом зняття позначки «Прайс активний»?

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

Суміжні теми

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