Перейти к содержимому
AutoValue
28 августа 2026 г. · Data Quality

Лето, когда наш счётчик объявлений сломался: дневник изнутри краулера

AutoValue Editorial
Лето, когда наш счётчик объявлений сломался: дневник изнутри краулера

Почти каждый день у меня открыта вкладка, которая просто показывает количество источников. Ничего красивого — ни графиков, ни фильтров, просто число рядом с каждым из 1 375 сайтов, с которых мы собираем объявления, и метка времени последнего отклика. В большинстве дней это скучно ровно настолько, насколько инфраструктура и должна быть скучной. Этим летом всё было иначе, и я думаю, что история о том, что пошло не так, полезнее вам как покупателю автомобиля, чем большинство советов «как купить подержанную машину», которые мы могли бы вместо этого написать. Речь о том, что на самом деле означают «живые данные», когда источник, который их питает, — это 1 375 разных сайтов, которые вам ничего не должны.

Середина июля: число, которым я гордился

К середине июля мы довели реестр источников до 1 190 сайтов в 73 регионах — результат нескольких недель сверки дублирующихся записей и мёртвых ссылок, которые незаметно завышали наш собственный счётчик. Помню, как думал, что 1 190 реальных, откликающихся источников — это то, чем можно гордиться. Это очень много отдельных сайтов дилеров, досок объявлений и аукционных лент, у каждой — своя структура HTML, свои ограничения по частоте запросов, своё мнение о том, является ли скрапер клиентом или атакой.

Затем начала приносить результаты кампания по разбору накопившегося списка — очереди из 683 источников, которые месяцами простаивали отложенными: часть заблокирована, часть просто никогда не была построена. Во второй половине июля 274 из них были построены и подключены. К концу месяца рабочее число выросло до 1 464. Такую неделю хочется сохранить скриншотом.

Начало августа: 241 источник — как не бывало

А потом приходит число, которое портит всю неделю: за одну ночь 241 источник перешёл в деградированное состояние. Не по нашей вине — у нашего провайдера прокси истёк срок оплаты аккаунта, а огромная часть нашего трафика идёт через ротируемые IP именно для того, чтобы нас не блокировали сайты, ограничивающие скраперов. Нет прокси — нет свежих страниц, нет свежих объявлений. Источники не сообщают о поломке сами — они просто тихо перестают возвращать новые данные, пока их старые объявления продолжают выглядеть актуальными.

Вот часть, которая не отражается в счётчике объявлений ни на одном автомобильном сайте, включая наш, если специально не копать: «живой» маркетплейс может держать устаревшие строки рядом со свежими и выглядеть снаружи абсолютно одинаково. Мы завязали запуск новых обходов на реальную проверку состояния прокси, чтобы мёртвый пул не мог незаметно ухудшить качество данных ещё сильнее, и поставили на паузу те части расписания, которые бы усугубили ситуацию. Работа не эффектная. Это тот случай, когда, если вы никогда об этом не слышите, значит, кто-то хорошо сделал свою работу.

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

Заморозка

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

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

Где приземлилось число

Вот счётчик на сегодня и форма тех шести недель, что привели нас сюда:

Мы пришли к 1 375 источникам в 73 регионах, которые питают 1 108 535 живых объявлений, из них 12 823 сейчас помечены как оценённые ниже своей региональной когорты. Это примерно на 90 источников меньше июльского пика — часть из 241 деградировавших так и не восстановилась полностью, некоторые сайты за это время сменили политику противодействия ботам и требуют перестройки, а не просто повторного подключения. Мы всё ещё работаем над некоторыми из них.

Чего это на самом деле стоит для вас

Ничто из этого не меняет, какую машину вам стоит купить. Но это должно изменить то, как вы читаете любое число «живых объявлений в наличии» на любом автомобильном сайте, не только нашем. Прямо сейчас Франция лидирует по нашему региональному счётчику с 67 569 объявлениями, Япония идёт следом с 61 940, и эти цифры меняются — не потому, что сам рынок подержанных автомобилей колеблется так быстро, а потому, что колеблется инфраструктура, которая за ним следит. Объявление, устаревшее на три дня из-за деградации источника, выглядит точно так же, как свежее, если платформа не честна насчёт разницы между ними.

Мы лучше расскажем вам о 75-часовой заморозке, чем сделаем вид, что наше число никогда не шатается. Набору данных, который никогда не признаётся в плохой неделе, стоит доверять меньше, а не больше.

Data QualityWEB ScrapingMethodologyTransparencyMarket Data
Поделиться

Похожие статьи