Перейти к содержанию

Ошибка парсинга цены: 7 причин и как исправить

Аналитик данных и разработчик

Ошибка парсинга цены выглядит одинаково: круг сбора закончился, а числа в таблице нет. Вместо цены пустое поле, кусок текста карточки или старое значение из кэша. Причин у такого сбоя семь, от сменившейся вёрстки до антибота, и почти каждая чинится за один вечер. Ниже разобрал каждую причину с признаками, по которым её узнают, и проверки, которые не пускают мусор в таблицу.

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

Из каких блоков состоит парсер цен

Блоков пять, и все скучные. Это к лучшему: чем проще устройство, тем дольше парсер живёт.

  1. Список задач. Вход парсера: за какими страницами следить и с чем каждую цену сравнивать. Обычно это таблица «конкурент плюс ваш товар», по строке на пару.
  2. Обходчик. Программа на Python, которая открывает страницы и забирает их содержимое. Я использую Scrapy, когда страница отдаётся сразу, и Selenium, когда цену рисует скрипт и она появляется только в настоящем браузере.
  3. Вычитка. Блок, который находит на странице саму цену. Отдельная забота, какую именно цену считать главной, о ней ниже в ошибках.
  4. Хранилище. Каждая строка пишется с датой круга: лёгкие задачи живут в SQLite или таблице, большие объёмы в PostgreSQL.
  5. Выдача. Таблица для человека, график истории цен и уведомление в Telegram, когда дельта превысила порог.

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

Что происходит за один цикл сбора

Круг это шесть повторяющихся шагов.

  1. Парсер берёт из списка следующую пару «страница плюс ваш товар».
  2. Открывает страницу конкурента и ждёт, пока загрузится блок с ценой.
  3. Вычитывает цену и наличие, если оно видно рядом.
  4. Пишет строку в базу с датой и временем круга.
  5. Сравнивает с прошлым кругом; разница больше порога уходит в уведомление.
  6. Делает паузу и идёт к следующему артикулу.

Пауза в конце не украшение. Сайт отличает парсер от человека прежде всего по ритму: сто страниц подряд без остановки не открывает никто. Задержки между запросами и смена адресов, с которых идёт сбор, обычная часть гигиены, иначе доступ закрывают уже в первый день.

Разовая выгрузка или мониторинг по расписанию

До заказа стоит определиться с режимом: он меняет и цену работы, и пользу от неё.

Режим Что получается Кому подходит
Разовая выгрузка снимок цен на одну дату, одна таблица закупке перед переговорами, разовому анализу ниши
Мониторинг по расписанию история цен, дельта к вашей цене, уведомление в день изменения селлерам и менеджерам, которые реагируют на движение конкурентов в тот же день

Разовый круг отвечает на вопрос «сколько стоят сейчас». Мониторинг показывает динамику: разовое снижение отличается от планомерного демпинга только на истории, и видно это после нескольких недель кругов.

Почему сайты сопротивляются и как парсер остаётся живым

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

Граница при этом не двигается: парсер собирает только публичные страницы, открытые без входа в аккаунт. Что говорят правила площадок и где красные линии, я разбирал отдельно в статье легален ли парсинг.

Ошибка парсинга цены

Ошибка парсинга цены: круг сбора вернулся без значения или с мусором вместо числа. Мусор бывает разный. Пустое поле там, где должна стоять цена. Кусок текста карточки вместо числа. Старая цена из кэша, которую сайт отдал вместо свежей.

Причин у сбоя семь, и почти все они повторяются от проекта к проекту.

  1. Сменилась вёрстка. Блок с ценой переехал или получил новое имя, и вычитка больше не находит поле. Признак: пустые цены сразу по всем страницам одного сайта. Чинится поправкой вычитки под новый блок.
  2. Сработал антибот. Сайт закрыл доступ и отдаёт заглушку вместо страницы каталога. Признак: пусто или мусор у всех товаров одного конкурента, у остальных продавцов всё на месте. Помогают паузы между запросами, ротация адресов и запасной обходчик.
  3. Цену рисует скрипт. В настоящем браузере цена есть, но появляется не сразу. Обходчик открыл страницу без ожидания и забрал пустоту. Чинится обходчиком с ожиданием, например Selenium.
  4. Кэш отдал старое. Сайт вернул страницу из кэша, и в ней вчерашняя цена. Признак: значение не меняется много кругов подряд, хотя на сайте идёт акция. Лечится повторным кругом после паузы.
  5. Значения нет. У товара просто нет цены: снят с продажи, зарезервирован, ждёт поступления. Это не сбой вычитки, а состояние товара.
  6. Цена скрыта. Видна только после выбора варианта товара, города или магазина, а обходчик без выбора видит пустоту. Чинится настройкой обхода с нужным выбором.
  7. Другой формат записи. Валюта сменилась или цена ушла за единицу товара, а не за штуку. Число на месте, но сравнивать его с прошлыми кругами нельзя: вычитку поправляют под новый формат.

От всего этого защищаются заранее. Контроль формата: значение проверяют на правдоподобие до записи в базу. Повтор с паузой: одна пустая цена не приговор, страницу перечитывают. Валидация полей: строка с мусором не попадает в таблицу и не рождает ложного уведомления о дельте. Запасной ручной путь: контрольная строка круга, по которой человек замечает сбой и чинит вычитку.

Типичные ошибки при заказе парсинга цен

  1. Не зафиксировали, какую цену брать. В карточке товара живёт несколько цен: до скидки, по карте лояльности, от объёма. Если не выбрать одну точку сравнения, дельта будет показывать движение там, где его нет.
  2. Собирают весь каталог вместо своего списка. Получается миллион строк, в которых тонут нужные артикулы, и смета за воздух.
  3. Не задали порог уведомления. Письмо о каждом изменении на рубль перестают читать на третий день; работать будет только отбор через порог.
  4. Один круг приняли за мониторинг. Без истории не отличить разовую акцию от начавшегося демпинга, а реакция на них разная.
  5. Забыли про сопровождение. Площадка меняет вёрстку, и парсер молча возвращает пустые цены. Нужен тот, кто заметит это по контрольной строке круга и починит за вечер.

Коротко

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

Частые вопросы

Как работает парсер цен конкурентов
По повторяющемуся кругу: парсер берёт из списка очередную страницу, открывает её, вычитывает цену и наличие, пишет строку в базу с датой и сравнивает с прошлым кругом. Разница больше заданного порога уходит уведомлением в Telegram или на почту, история цен копится в таблице и на графике.
Законно ли парсить цены конкурентов
Цены в открытом каталоге видны любому посетителю без входа, их сбор обычная аналитическая практика. Ограничения пишут сами площадки в пользовательских соглашениях, формулировки у них обновляются, поэтому перед работой исполнитель сверяется с текущей редакцией на сайте площадки. Красные линии прежние: обход авторизации и персональные данные.
Сколько стоит парсинг цен конкурентов
Цена зависит от объёма задачи: сколько сайтов-конкурентов в списке, сколько артикулов, как часто запускать сбор и что получать на выходе, таблицу или бота. Чем шире охват, тем больше работы. Точную цифру называют после короткого брифа, по запросу; ориентир по сроку: круг-прототип с таблицей и уведомлением от трёх дней.
Как часто собирать цены конкурентов
Частоту задаёт скорость ниши. Большинству категорий хватает ежедневного круга: таблица собирается за ночь, утром видна дельта. Чаще имеет смысл там, где цена двигается несколько раз в сутки; медленным рынкам достаточно недели.
Можно ли собрать цены конкурентов без программирования
Для короткого списка хватает таблицы и рук: дата, ссылка, цена. Этот способ ломается на первом отпуске и не копит историю. Парсер окупается, когда список длиннее пары десятков позиций, круг нужен каждый день, а об изменениях нужно узнавать в день изменения, а не вспоминать самому.
Что такое ошибка парсинга цены?
Так называют круг сбора, который вернулся без значения или с мусором вместо цены: пустое поле, кусок текста карточки вместо числа, старая цена из кэша. Причины типичные: сменилась вёрстка, сработал антибот, цену рисует скрипт. Ошибка парсинга цены не редкость, поэтому базу защищают проверкой до записи.
Как исправить ошибку парсинга цены?
Сначала выясняют причину. Сменилась вёрстка: поправляют вычитку, чтобы она снова находила поле цены. Сработал антибот или цену рисует скрипт: обходчик добавляет паузу и повторяет круг. Единственная пустая цена ничего не решает: страницу перечитывают после паузы.
Почему парсер перестал видеть цену на сайте?
Частая причина: сменилась вёрстка, блок с ценой переехал или получил новое имя, и вычитка больше не находит поле. Парсер при этом молча возвращает пустые цены, поэтому сбой замечают по контрольной строке круга и поправляют вычитку.
Почему парсер возвращает пустую цену или мусор?
Возможно, сработал антибот: сайт закрыл доступ и отдаёт заглушку вместо страницы каталога. Или цену рисует скрипт, а обходчик открыл страницу без ожидания и забрал пустоту. Бывает, что кэш отдаёт старую цену вместо свежей. Что делают: добавляют паузу между запросами и повторяют круг, а страницу, которую целиком рисует скрипт, открывает запасной обходчик.
Как не пропустить ошибку парсинга цены в таблицу?
Пустая цена или мусор не должны доехать до таблицы. Значение проверяют на правдоподобие до записи в базу. Валидация полей не пускает строку с мусором, поэтому ложных уведомлений о дельте не будет. За сбоем следит человек по контрольной строке круга.

Читайте также