Як парсер оновлює прайс: новинки, повторний прогін і обрив

20 хв

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

Коли це знадобиться:

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

З чого почати: вирішіть, чи потрібне «Видаляти товари перед завантаженням» на вкладці «Додатково».

Що вміє прогін парсера

Де це і хто має доступ

Меню
Довідники → Обробка прайс-листів → Список прайс-листів
Прапорці прогону
рядок джерела → «Налаштування» → вкладка «Додатково»
Запуск
вікно «Завантаження даних із сайту»: «Почати завантаження», «Продовжити», «Скасувати»
Журнал парсингу
вкладка «Додатково» → «Журнал парсингу» або картка джерела → «Товари» → бургер
Право доступу
вікно «Прайс-листи» (у меню — «Список прайс-листів»)

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

Як оновити ціни або добрати тільки новинки

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

Ознака одна — адреса сторінки. Ні назва, ні артикул, ні штрихкод у цьому не беруть участі.

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

На цьому ж механізмі тримається прапорець «Видаляти товари перед завантаженням» (вкладка «Додатково», група «Обробка даних», за замовчуванням увімкнений):

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

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

Другий наслідок: якщо сайт змінив адресу товару, для парсера це новий товар. Старий залишиться в прайсі поруч із новим.

Що лишається в прайсі, якщо обхід обірвався або його зупинили

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

Операції прайс-листа — націнка, правила наявності та інші — до зібраних рядків не застосовуються, поки обхід не закінчився. Вони запускаються в трьох випадках:

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

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

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

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

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

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

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

Як доробити обірваний прогін: «Продовжити» чи «Почати завантаження»

Що відбувається з окремими сторінками:

  • сторінка, від якої немає відповіді, повертається в чергу на повтор: коли сторінки відкриває браузер — через 35 секунд, через сервер Elbuz — через 150 секунд: запас на найдовше очікування сторінки сервером, до 120 секунд у режимі «Преміум-парсинг (обхід захистів)». Після п'яти невдалих спроб (для hotline — двадцяти) завдання закривається з позначкою «немає відповіді понад 35 сек, спроба 5 / 5» — в обох режимах позначка однакова, і товару з цієї сторінки в прайсі не буде;
  • сторінка, що відповіла кодом 404, закривається без повторів;
  • завдання, до яких обхід ще не дійшов, лишаються в черзі. Наступного разу у вікні завантаження над кнопками буде «Є незавершені завдання» з їхньою кількістю й кнопка «Продовжити».

Після обриву дві кнопки діють по-різному:

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

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

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

Скільки сторінок парсер бере за раз і де межі

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

Через сервер Elbuz (увімкнено «Використовувати сервер для завантаження даних»):

  • сторінки завантажуються пачками: за замовчуванням по 100 адрес у 10 потоків (у фоновому продовженні планувальником — по 300 адрес). На всю пачку відведено 30 секунд на кожну її адресу;
  • на одну сторінку чекають до 35 секунд, через ваші власні проксі — до 55 секунд, у режимі «Преміум-парсинг (обхід захистів)» — до 120 секунд;
  • з увімкненим «Використовувати сервер для рендерингу JavaScript» (без власних проксі) пачка менша: 4 адреси у 2 потоки;
  • обхід іде на сервері, вікно лише показує журнал. Закриття вікна обхід не зупиняє. За один запуск сервер проходить до 14 пачок поспіль, а решту незавершених завдань продовжує фонове завдання планувальника;
  • хід видно в журналі: на кожну пачку — рядок «Завантажуємо дані за посиланнями» з кількістю адрес у пачці та кількістю незавершених завдань. Перед кожною пачкою журнал називає режим: «Режим завантаження сторінок:» і далі «серверний проксі», «прямий (без проксі)», «проксі користувача» або «посилений режим (обхід захистів)».

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

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

Чому товар із тесту не потрапив у прайс

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

  1. У режимі лістингу немає назви або адреси. Такий рядок мовчки пропускається (поля лістингу).
  2. Спрацювало правило завантаження товарів. Якщо для джерела заведені умови відбору позицій, кожен знайдений товар проганяється через них, і той, що не підійшов, не зберігається.
  3. Ціна поза діапазоном. Поля «Завантажувати товари з ціною — починаючи від / до» в картці джерела, секція «Ціни». Товар із ціною поза межами не записується.
  4. Наявність у стоп-списку. У довіднику «Статуси наявності» в кожного статусу є перемикач «Не імпортувати товари з цим статусом (парсер сайту)». Увімкнули його для «Немає на складі» — і товари з таким текстом у полі «Статус наявності (з прайсу)» в прайс не потраплять. Окреме правило {EMPTY} (або {ПУСТО} — приймаються обидва написання) відсікає товари з порожньою наявністю. За замовчуванням цей перемикач знятий у всіх статусів.

Що перевірити після першого прогону

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

Перший прогін завершився

Сценарії

Стежити за цінами й наявністю на сайті постачальника

Що зробити. У групі «Картка товару» заповніть селектори «Ціна» і «Статус наявності (з прайсу)». На вкладці «Додатково» лишіть увімкненим «Видаляти товари перед завантаженням».

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

Чого не буде. Картки каталогу від цього не зміняться: нові ціни туди переносить оновлення базового каталогу. Якщо обхід обірвався сам, операції не запустяться, і в прайсі лишаться ціни сайту без націнки (що робити після обриву).

Добирати з сайту тільки новинки

Що зробити. Зніміть «Видаляти товари перед завантаженням» і запустіть «Почати завантаження».

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

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

Що робити, коли після прогону в прайсі не те

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

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

Чи оновляться ціни, якщо зняти «Видаляти товари перед завантаженням»?

Ні. Адреси наявних товарів заносяться в чергу з позначкою «ігнорувати», і їхні сторінки в цей прогін не відкриваються. Приїдуть тільки товари з нових адрес (докладніше).

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

Через сервер Elbuz — так: обхід іде на сервері, вікно лише показує журнал. Коли сторінки відкриває браузер, закрите вікно нових сторінок не бере, а невиконані завдання чекають на «Продовжити».

Скільки товарів можна зібрати за один прогін?

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

Чи можна продовжити прогін, скасований кнопкою «Скасувати»?

Ні. «Скасувати» видаляє з черги незавершені завдання прайсу, тож «Продовжити» робити нічого. Лишається «Почати завантаження» (докладніше).

Чому в прайсі два рядки з однаковою адресою товару?

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

Суміжні теми

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