Поиск авто по 20 европейским сайтам: как менеджеры ищут в одной таблице

Поиск авто по 20 сайтам

Компания подбирает для своих клиентов подержанные автомобили из Европы. Запросы приходят каждый день: нужна такая-то модель, не старше такого-то года, с пробегом до стольких-то километров, в пределах бюджета. Менеджер открывает двадцать европейских площадок, вручную вбивает запрос в каждую, листает выдачу и копирует подходящее в свою табличку. На один запрос уходит от сорока минут до полутора часов.

Задача звучала просто: менеджер вводит запрос в одном месте, а через несколько минут получает сводную таблицу со всех двадцати сайтов. Ниже – как это устроено изнутри, с какими проблемами пришлось разобраться и почему интерфейсом стала обычная Google Таблица, а не веб-приложение.

Поиск авто по 20 сайтам

Почему интерфейсом стала Google Таблица

Первое, что приходит в голову в такой задаче, – сделать сайт с формой поиска. Я от этого отказался сознательно, и вот почему.

  • Нулевой порог входа. Менеджеры и так работают в таблицах целый день. Новый интерфейс означал бы обучение, инструкции, сопротивление. Таблицу не нужно объяснять.
  • Не нужна авторизация. Доступ к документу раздает руководитель через обычный доступ Google. Пришел новый сотрудник – добавили почту, ушел – убрали. Никакой собственной системы пользователей и паролей.
  • История запросов складывается сама. Каждая строка на главном листе – это сохраненный запрос с датой, автором и ссылкой на результат. Руководитель видит, кто что искал, без отдельных отчетов.
  • Результат сразу пригоден к работе. Менеджер фильтрует, сортирует, ставит свои пометки прямо в том же документе. Ничего не нужно выгружать и куда-то переносить.

Таблица здесь – это оболочка. Вся работа происходит на сервере, а таблица только принимает запрос и показывает результат.

Как это работает шаг за шагом

1. Менеджер вводит запрос

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

2. Сервер раскладывает запрос на двадцать отдельных

Двадцать европейских площадок – это двадцать разных сайтов. Каждый со своей структурой, своими названиями категорий и своей логикой поиска. Один ищет по параметрам в адресе, второй – через внутренний API, третий требует форму с токеном со страницы, четвертый отдает результаты частями при прокрутке.

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

3. Приведение к единому виду

Это самая скучная и самая важная часть. С каждого сайта приходит своя каша:

  • цена может быть “45 000 EUR”, “45.000,00 €”, “EUR 45000” или “цена по запросу”;
  • год выпуска бывает отдельным полем, а бывает внутри названия;
  • пробег указывают в километрах, милях или не указывают вовсе;
  • фото иногда лежит прямой ссылкой, иногда прячется за скриптом галереи.

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

4. Результат ложится на новый лист

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

Менеджер видит все на одном экране, фильтрует по цене и году, открывает нужное объявление и связывается с продавцом.

Технические проблемы, с которыми пришлось разобраться

Лимиты Google Таблиц

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

Скорость

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

Сайты постоянно меняются

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

Именно поэтому подобные проекты живут в формате ежемесячной поддержки, а не разовой разработки. Разово сделанный поисковик по двадцати сайтам перестанет работать за несколько месяцев, и обычно в самый неудачный момент.

Защита от ботов

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

Что получил бизнес

Главное изменение даже не в экономии времени, хотя она очевидна: то, что занимало час, теперь занимает несколько минут ожидания. Важнее другое.

  • Полнота охвата. Под конец дня человек устает и проверяет пять сайтов вместо двадцати. Скрипт проверяет все двадцать всегда, независимо от настроения и загрузки.
  • Скорость ответа клиенту. На рынке подержанных авто выигрывает тот, кто первым предложил вариант. Разница между “перезвоню завтра” и “вот три варианта, смотрите” – это разница между сделкой и потерянным клиентом.
  • Одинаковый результат у всей команды. Опытный менеджер и новичок получают одинаково полную выборку. Знание о том, “где именно искать”, перестало быть личным активом отдельных людей и стало активом компании.
  • Управляемость. Руководитель видит все запросы в одном документе: что искали, как часто, на что самый большой спрос.

Кому подойдет такая схема

Схема “запрос в таблице – обработка на сервере – результат отдельным листом” работает везде, где несколько человек регулярно ищут одно и то же на многих источниках:

  • закупщики, сравнивающие предложения поставщиков;
  • агентства недвижимости, собирающие объявления по городам и районам;
  • отделы продаж, проверяющие наличие товара у конкурентов;
  • компании, отслеживающие тендерные и аукционные площадки.

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

Сколько это стоит и сколько занимает

Стоимость зависит от количества источников и от того, насколько сложно с каждого достать данные. Двадцать сайтов, часть из которых под защитой, – это уже полноценный проект.

Дальше идет ежемесячная поддержка: сервер, прокси, мониторинг и, главное, адаптация парсеров, когда источники меняются. Без поддержки такой проект не имеет смысла – он просто тихо умрет за несколько месяцев.

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

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

Сколько сайтов можно подключить к одному поиску?+
Технического потолка нет, вопрос только во времени разработки и поддержки. Двадцать источников - реальная работающая конфигурация, из них часть под защитой от ботов.
Почему результат в Google Таблице, а не в отдельном сервисе?+
Менеджеры уже работают в таблицах, их не надо обучать. Доступ раздает руководитель, история запросов накапливается сама, а результат сразу можно фильтровать и сортировать.
Что будет, когда сайт-источник изменит верстку?+
Сработает проверка на адекватность результата, я получу уведомление и адаптирую парсер. В формате ежемесячной поддержки такие правки входят в платеж без доплат.
Сколько времени занимает один поиск?+
Несколько минут: запросы ко всем источникам идут параллельно с ограничением на количество одновременных соединений, чтобы не нагружать сайты.
Похожая задача?

Опишите ее - за 15-20 минут скажу, решается ли она, каким путем и сколько примерно будет стоить. Без обязательств.

Обсудить задачу →