all articles

Как Otsledit находит цену на странице: нейросеть и простая эвристика

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

 

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

 

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

 

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

 

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

 

У каждого трека на карточке в списке отслеживания стоит небольшой бейдж — AI для нейросети и A для простой эвристики. Нажатие переключает способ у этого одного трека. Переключатель в настройках уже созданные треки не трогает: он решает только, с каким способом будут создаваться новые.

 

Есть и третье состояние, самое сильное: бейджа нет вовсе. Это значит, что цену вы выбрали руками — из списка кандидатов в попапе или указав элемент на странице. Такой трек следит ровно за этим элементом по его CSS-селектору, и автоматическое определение его не трогает. Если магазин раз за разом сбивает оба способа, ручной выбор прекращает спор.

 

Когда переключать? Если в треке подозрительно маленькое число — скорее всего он зацепился за платёж по рассрочке или стоимость доставки, попробуйте другой способ. Если подозрительно большое — возможно, взята зачёркнутая старая цена или цена комплекта. Если число скачет между двумя значениями на одной и той же странице, магазин, вероятно, показывает разные цены разным регионам, и в настройках трека для этого есть отдельная галка — не учитывать смену валюты.

 

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