Ошибка парсинга цены: 7 причин и как исправить
Владислав КовнеровАналитик данных и разработчик
Ошибка парсинга цены выглядит одинаково: круг сбора закончился, а числа в таблице нет. Вместо цены пустое поле, кусок текста карточки или старое значение из кэша. Причин у такого сбоя семь, от сменившейся вёрстки до антибота, и почти каждая чинится за один вечер. Ниже разобрал каждую причину с признаками, по которым её узнают, и проверки, которые не пускают мусор в таблицу.
Цена такой ошибки растёт вместе с масштабом мониторинга. Цену конкурента можно открыть руками, и на одном товаре это работает. Проблема появляется, когда продавцов двадцать, артикулов полсотни и проверять нужно каждый день: к середине списка человек уже не смотрит, а скользит глазами. Парсинг цен конкурентов убирает эту ручную работу целиком: парсер сам заходит на страницу каждого товара из вашего списка, вычитывает цену, пишет строку в общую таблицу и повторяет обход по расписанию. Вы видите, насколько ваша цена отличается от чужой, и получаете уведомление, когда конкурент сдвинулся сильнее порога. Такие парсеры я собираю под заказ в услуге парсинга цен конкурентов: от списка артикулов до ежедневной таблицы с графиком истории.
Из каких блоков состоит парсер цен
Блоков пять, и все скучные. Это к лучшему: чем проще устройство, тем дольше парсер живёт.
- Список задач. Вход парсера: за какими страницами следить и с чем каждую цену сравнивать. Обычно это таблица «конкурент плюс ваш товар», по строке на пару.
- Обходчик. Программа на Python, которая открывает страницы и забирает их содержимое. Я использую Scrapy, когда страница отдаётся сразу, и Selenium, когда цену рисует скрипт и она появляется только в настоящем браузере.
- Вычитка. Блок, который находит на странице саму цену. Отдельная забота, какую именно цену считать главной, о ней ниже в ошибках.
- Хранилище. Каждая строка пишется с датой круга: лёгкие задачи живут в SQLite или таблице, большие объёмы в PostgreSQL.
- Выдача. Таблица для человека, график истории цен и уведомление в Telegram, когда дельта превысила порог.
По этой же схеме устроен любой парсер, меняется только источник: парсер Telegram-каналов читает открытые каналы, ценовой обходит каталоги магазинов.
Что происходит за один цикл сбора
Круг это шесть повторяющихся шагов.
- Парсер берёт из списка следующую пару «страница плюс ваш товар».
- Открывает страницу конкурента и ждёт, пока загрузится блок с ценой.
- Вычитывает цену и наличие, если оно видно рядом.
- Пишет строку в базу с датой и временем круга.
- Сравнивает с прошлым кругом; разница больше порога уходит в уведомление.
- Делает паузу и идёт к следующему артикулу.
Пауза в конце не украшение. Сайт отличает парсер от человека прежде всего по ритму: сто страниц подряд без остановки не открывает никто. Задержки между запросами и смена адресов, с которых идёт сбор, обычная часть гигиены, иначе доступ закрывают уже в первый день.
Разовая выгрузка или мониторинг по расписанию
До заказа стоит определиться с режимом: он меняет и цену работы, и пользу от неё.
| Режим | Что получается | Кому подходит |
|---|---|---|
| Разовая выгрузка | снимок цен на одну дату, одна таблица | закупке перед переговорами, разовому анализу ниши |
| Мониторинг по расписанию | история цен, дельта к вашей цене, уведомление в день изменения | селлерам и менеджерам, которые реагируют на движение конкурентов в тот же день |
Разовый круг отвечает на вопрос «сколько стоят сейчас». Мониторинг показывает динамику: разовое снижение отличается от планомерного демпинга только на истории, и видно это после нескольких недель кругов.
Почему сайты сопротивляются и как парсер остаётся живым
Сайты защищают каталоги от автоматического сбора, и защита периодически меняется. Инструменты живучести известны: задержки между запросами, чтобы ритм походил на человеческий; ротация прокси, чтобы запросы не шли с одного адреса; запасной обходчик на случай, когда страницу целиком рисует скрипт. Тяжёлые приложения на одной странице обходить дороже, отсюда разница в смете.
Граница при этом не двигается: парсер собирает только публичные страницы, открытые без входа в аккаунт. Что говорят правила площадок и где красные линии, я разбирал отдельно в статье легален ли парсинг.
Ошибка парсинга цены
Ошибка парсинга цены: круг сбора вернулся без значения или с мусором вместо числа. Мусор бывает разный. Пустое поле там, где должна стоять цена. Кусок текста карточки вместо числа. Старая цена из кэша, которую сайт отдал вместо свежей.
Причин у сбоя семь, и почти все они повторяются от проекта к проекту.
- Сменилась вёрстка. Блок с ценой переехал или получил новое имя, и вычитка больше не находит поле. Признак: пустые цены сразу по всем страницам одного сайта. Чинится поправкой вычитки под новый блок.
- Сработал антибот. Сайт закрыл доступ и отдаёт заглушку вместо страницы каталога. Признак: пусто или мусор у всех товаров одного конкурента, у остальных продавцов всё на месте. Помогают паузы между запросами, ротация адресов и запасной обходчик.
- Цену рисует скрипт. В настоящем браузере цена есть, но появляется не сразу. Обходчик открыл страницу без ожидания и забрал пустоту. Чинится обходчиком с ожиданием, например Selenium.
- Кэш отдал старое. Сайт вернул страницу из кэша, и в ней вчерашняя цена. Признак: значение не меняется много кругов подряд, хотя на сайте идёт акция. Лечится повторным кругом после паузы.
- Значения нет. У товара просто нет цены: снят с продажи, зарезервирован, ждёт поступления. Это не сбой вычитки, а состояние товара.
- Цена скрыта. Видна только после выбора варианта товара, города или магазина, а обходчик без выбора видит пустоту. Чинится настройкой обхода с нужным выбором.
- Другой формат записи. Валюта сменилась или цена ушла за единицу товара, а не за штуку. Число на месте, но сравнивать его с прошлыми кругами нельзя: вычитку поправляют под новый формат.
От всего этого защищаются заранее. Контроль формата: значение проверяют на правдоподобие до записи в базу. Повтор с паузой: одна пустая цена не приговор, страницу перечитывают. Валидация полей: строка с мусором не попадает в таблицу и не рождает ложного уведомления о дельте. Запасной ручной путь: контрольная строка круга, по которой человек замечает сбой и чинит вычитку.
Типичные ошибки при заказе парсинга цен
- Не зафиксировали, какую цену брать. В карточке товара живёт несколько цен: до скидки, по карте лояльности, от объёма. Если не выбрать одну точку сравнения, дельта будет показывать движение там, где его нет.
- Собирают весь каталог вместо своего списка. Получается миллион строк, в которых тонут нужные артикулы, и смета за воздух.
- Не задали порог уведомления. Письмо о каждом изменении на рубль перестают читать на третий день; работать будет только отбор через порог.
- Один круг приняли за мониторинг. Без истории не отличить разовую акцию от начавшегося демпинга, а реакция на них разная.
- Забыли про сопровождение. Площадка меняет вёрстку, и парсер молча возвращает пустые цены. Нужен тот, кто заметит это по контрольной строке круга и починит за вечер.
Коротко
Парсер цен это список страниц, обход по расписанию и таблица с датами. Работу он делает тогда, когда настроены две детали: порог уведомления, который отсекает шум, и история, которая отличает разовое движение от тенденции. Проверить механику на своих артикулах можно в услуге парсинга цен конкурентов; другие задачи сбора данных я разбираю в категории «Парсинг данных».
Частые вопросы
- Как работает парсер цен конкурентов
- По повторяющемуся кругу: парсер берёт из списка очередную страницу, открывает её, вычитывает цену и наличие, пишет строку в базу с датой и сравнивает с прошлым кругом. Разница больше заданного порога уходит уведомлением в Telegram или на почту, история цен копится в таблице и на графике.
- Законно ли парсить цены конкурентов
- Цены в открытом каталоге видны любому посетителю без входа, их сбор обычная аналитическая практика. Ограничения пишут сами площадки в пользовательских соглашениях, формулировки у них обновляются, поэтому перед работой исполнитель сверяется с текущей редакцией на сайте площадки. Красные линии прежние: обход авторизации и персональные данные.
- Сколько стоит парсинг цен конкурентов
- Цена зависит от объёма задачи: сколько сайтов-конкурентов в списке, сколько артикулов, как часто запускать сбор и что получать на выходе, таблицу или бота. Чем шире охват, тем больше работы. Точную цифру называют после короткого брифа, по запросу; ориентир по сроку: круг-прототип с таблицей и уведомлением от трёх дней.
- Как часто собирать цены конкурентов
- Частоту задаёт скорость ниши. Большинству категорий хватает ежедневного круга: таблица собирается за ночь, утром видна дельта. Чаще имеет смысл там, где цена двигается несколько раз в сутки; медленным рынкам достаточно недели.
- Можно ли собрать цены конкурентов без программирования
- Для короткого списка хватает таблицы и рук: дата, ссылка, цена. Этот способ ломается на первом отпуске и не копит историю. Парсер окупается, когда список длиннее пары десятков позиций, круг нужен каждый день, а об изменениях нужно узнавать в день изменения, а не вспоминать самому.
- Что такое ошибка парсинга цены?
- Так называют круг сбора, который вернулся без значения или с мусором вместо цены: пустое поле, кусок текста карточки вместо числа, старая цена из кэша. Причины типичные: сменилась вёрстка, сработал антибот, цену рисует скрипт. Ошибка парсинга цены не редкость, поэтому базу защищают проверкой до записи.
- Как исправить ошибку парсинга цены?
- Сначала выясняют причину. Сменилась вёрстка: поправляют вычитку, чтобы она снова находила поле цены. Сработал антибот или цену рисует скрипт: обходчик добавляет паузу и повторяет круг. Единственная пустая цена ничего не решает: страницу перечитывают после паузы.
- Почему парсер перестал видеть цену на сайте?
- Частая причина: сменилась вёрстка, блок с ценой переехал или получил новое имя, и вычитка больше не находит поле. Парсер при этом молча возвращает пустые цены, поэтому сбой замечают по контрольной строке круга и поправляют вычитку.
- Почему парсер возвращает пустую цену или мусор?
- Возможно, сработал антибот: сайт закрыл доступ и отдаёт заглушку вместо страницы каталога. Или цену рисует скрипт, а обходчик открыл страницу без ожидания и забрал пустоту. Бывает, что кэш отдаёт старую цену вместо свежей. Что делают: добавляют паузу между запросами и повторяют круг, а страницу, которую целиком рисует скрипт, открывает запасной обходчик.
- Как не пропустить ошибку парсинга цены в таблицу?
- Пустая цена или мусор не должны доехать до таблицы. Значение проверяют на правдоподобие до записи в базу. Валидация полей не пускает строку с мусором, поэтому ложных уведомлений о дельте не будет. За сбоем следит человек по контрольной строке круга.
Читайте также
- Парсинг Ozon: что можно собирать и какПарсинг Ozon: какие данные площадка показывает всем, что закрывают антибот и логин, и чем Seller API отличается от парсера витрины.
- Парсер ВКонтакте: как собирать товары и ценыТовары и цены ВКонтакте собирают официальным API: метод market.get отдаёт до 200 товаров за запрос, цену, наличие и фото. Пошаговый разбор в рамках правил.