Искал компании без сайта — в итоге написал два расширения, для Яндекс Карт и 2ГИС
Привет, Пикабу! Я — разработчик, делаю сайты, и MapsGrabs мой проект. Это два расширения для Chrome: одно для Яндекс Карт, второе для 2ГИС. Открываешь карту в браузере, вводишь запрос — расширение собирает сведения об организациях из открытой вкладки и складывает их в XLSX, который формируется прямо на компьютере. Сразу скажу честно: лидов, клиентов и готовой базы на обзвон тут не обещаю — ни я, ни сайт. Просто расскажу, зачем я это сделал и как оно устроено.
Всё началось с простой задачи: найти компании, которым нужен сайт. Не «плохой сайт», а отсутствующий. Таких хорошо видно на картах: организация есть — название, адрес, телефон, — а сайта в карточке нет.
Только поиск выглядел уныло. Вводишь запрос, идёшь по списку, открываешь карточку за карточкой и переписываешь в таблицу название, адрес, телефон. Следующая, ещё одна, ещё. Взгляд плывёт, теряешь, где остановился и кого уже записал. Долго, скучно, и в каждом ручном переносе прячется ошибка: то строка пропущена, то ячейка не та. В какой-то момент стало очевидно: это должна делать машина.
Так появилась первая версия расширения — для Яндекс Карт. Открываешь карту, вводишь запрос, а расширение подталкивает страницу подгружать следующие порции выдачи и складывает записи в файл. Потом захотелось то же самое для 2ГИС, и тут началось интересное: задача та же, а механика карт другая, выдачу приходится «докручивать» иначе. Поэтому вместо одного универсального парсера получилось два расширения — под каждую карту своё.
Принцип, который я для себя вывел: DOM — руль, JSON — источник. Расширение не вычитывает поля из текста карточек на экране. Оно слушает JSON-ответы, которые вкладка карты и так получает при поиске: там лежат названия, адреса, телефоны, сайты, рейтинги. А DOM нужен как руль — чуть прокрутить список, дождаться ответа, прокрутить ещё, чтобы карта отдала следующую порцию. От вёрстки такой подход зависит меньше, но хрупкость никуда не девается: карты меняют ответы и элементы управления, поэтому код приходится обновлять.
Сбор идёт проходами: сначала организации, потом — уже по собранным карточкам — отзывы и медиа. Данные копятся локально в расширении, XLSX собирается здесь же, на компьютере.
Демонстрационный экран со вкладками организаций, отзывов и медиа: счётчики на кадре не являются типичным результатом
В одном старом файле из истории разработки лежало 47 организаций, и у двух из них поле «Сайт» оказалось пустым. Две пустые ячейки — и меня осенило: сколько вообще компаний живёт без сайта? Это же ровно те, кого я ищу: собираешь выдачу по нише и смотришь, у кого сайта нет. Оговорюсь сразу: это один файл и один момент, а не статистика. Какой процент бизнеса реально сидит без сайта, я не знаю и не измерял. Но как отправная точка идеи — сработало.
Теперь о границах — они важные
Отзывы в выгрузку попадают в маскированном виде: короткое превью без полного текста, автор вроде «И*** П***», оценка и месяц. Полный текст отзыва и имя автора я не сохраняю. С медиа ещё строже: сами фото и видео не копируются и не экспортируются, в файл попадает только их количество по типу на организацию. Никаких URL картинок и роликов в выгрузке нет. Копировать чужие отзывы и медиа я в инструмент сознательно не закладывал — это и некрасиво, и против правил источников.
И ещё одна деталь: перед первым запуском расширение попросит принять условия. Данные публичные и работать с ними нужно аккуратно, капчи и блокировки расширение не обходит и обходить их нельзя, рекламные обзвоны и рассылки без согласия адресата — тоже нельзя. Пока не подтвердишь и сервер не пришлёт «квитанцию» о согласии, сбор не стартует. Может, лишний клик — зато сразу видно, на что ты соглашаешься. Это не разрешение на любой сценарий, а фиксация границ: ответственность за использование выгрузки остаётся на тебе.
Что умеет и чего не умеет сам сбор
Расширение собирает организации по твоему запросу: телефоны, сайты, соцсети, адреса, рейтинги — эти колонки есть в выгрузке. Но что реально заполнится, зависит от того, что источник отдаст в конкретном запуске. Выгрузка — заготовка для проверки и чистки, а не готовая база клиентов. «Соберёт всех» я не обещаю: таких измерений не делал. И повторю: встроенной рассылки, обзвона и интеграций с CRM в расширении нет. Оно снимает ручной перенос карточек в таблицу, но не решает за человека, как использовать выгрузку и с кем работать.
Отдельно про приватность: карточки, поисковый запрос и содержимое выгрузки на сервер не передаются. На сервере оседает только лицензионный ключ и служебная информация — версия расширения и диджесты принятых документов. Всё остальное живёт в твоём браузере.
Если задача тебе знакома — на mapsgrabs.ru можно проверить свой запрос: первые 50 организаций выгружаются бесплатно, без банковской карты и без личного кабинета. Один ключ действует для обоих расширений.
И вопросы тем, кто реально работает с такими таблицами: каких колонок вам не хватает в выгрузке? В каком формате удобнее было бы импортировать — или XLSX и так ок? На каких запросах сбор ведёт себя хуже всего? По этим ответам я и исправлю следующие версии.



