Скрапер Google Maps на Playwright: семь граблей, на которые я наступил
Коротко
- Координаты в URL
Google Maps не гарантируют региональную фильтрацию: надёжнее указывать город или регион прямо в тексте поискового запроса. - Семантические селекторы role, aria-label и осмысленные data-* обычно устойчивее сгенерированных CSS-классов вроде a.hfpxzc.
- Фиксированные sleep и wait_for_timeout создают флаки-поведение; лучше ждать изменения DOM, появления панели или роста числа элементов.
- Regex для email без фильтрации ловит ассеты, Sentry и шаблонные адреса, поэтому нужны блок-лист и приоритеты для выбора контакта.
- Скрапер остаётся уязвим к сетевым сбоям, капче, дедупликации и юридическим ограничениям Google, privacy-законодательства и рассылок.
Для географического поиска координат в URL недостаточно: Google Maps воспринимает их скорее как настройку области просмотра, поэтому регион лучше добавлять прямо в поисковый запрос. Для интерфейса автор советует по возможности опираться на ARIA-роли и осмысленные data-атрибуты вместо сгенерированных CSS-классов, а окончание ленивой ленты определять по нескольким раундам без роста числа карточек. Фиксированные паузы после скролла или клика лучше заменять ожиданием конкретного события или изменения DOM.
Отдельная проблема — качество извлечённых контактов. Простой regex принимает за email retina-ассеты, адреса Sentry, Wix и шаблонные example.com, поэтому после поиска нужен блок-лист и ранжирование адресов: предпочтительнее info@, contact@ и почта на домене самой компании, а noreply@, abuse@ и служебные адреса стоит понижать. Вместо перебора десятка предполагаемых URL вроде /contacts эффективнее загрузить главную страницу и извлечь реальные ссылки на контактные разделы, оставив перебор как запасной вариант.
Текущая версия остаётся синхронной, не делает ретраи после сетевых ошибок, может недобирать результаты из-за дедупликации, не распознаёт капчу и не собирает метрики качества. Автоматический сбор данных из Google Maps противоречит условиям Google; кроме того, именные email могут подпадать под требования законодательства о персональных данных, а последующая холодная рассылка регулируется отдельно. Поэтому автор рассматривает такой скрапер прежде всего как инженерный эксперимент, а для коммерческого применения рекомендует заранее оценивать юридические риски.
FAQ
Зачем автор вообще использовал Playwright и отдельный обход сайтов, если у Google Maps есть официальный Places API?
Задача требовала не только найти компании, но и получить email, Telegram или WhatsApp. По описанию автора, Places API не предоставляет email, поэтому контакты приходилось искать уже на сайтах организаций.
Как скрапер отличает окончание списка результатов Google Maps от временной задержки при подгрузке карточек?
Автор считает последовательные раунды без увеличения числа карточек и завершает прокрутку после пяти таких раундов. Это снижает риск преждевременно остановиться из-за краткого лага.
Почему найденный регулярным выражением email нельзя сразу считать корректным контактом компании?
Страница может содержать адреса мониторинга, платформ, шаблонные данные и строки вроде logo@2x.png. Поэтому найденные адреса нужно фильтровать и ранжировать по типу ящика и совпадению с доменом сайта.
Читайте также
Google ещё сильнее отодвигает обычные результаты поиска вниз из-за AI Mode
Почему я отказался от внедрения тёмных паттернов и не получил оффер на лид-позицию
Передача персональных данных за рубеж: разрешён ли Google Analytics и как работать по новым правилам
Парсинг на Python: ниша, в которую легко войти и сложно продолжать
Роскомнадзор против Google Analytics: есть легальный путь для бизнеса, но с формальностями
- Иерархия устойчивости селекторов для браузерной автоматизации: В Playwright-скраперах стоит выбирать селекторы по устойчивости: сначала ARIA role и aria-label, затем осмысленные data-атрибуты и структура DOM, а сгенерированные CSS-классы использовать только как крайний вариант. Для критичных скрапер-процессов полезен отдельный регулярный тест, который проверяет, что ключевые селекторы по-прежнему возвращают ожидаемые элементы.
[Web scraping / Надёжность селекторов]
Зарегистрированные пользователи видят только два тезиса.
Зарегистрироваться
Автор разбирает скрапер Google Maps на Python и Playwright, который собирает компании по городу, находит их сайты и пытается извлечь email,
Telegram или
WhatsApp1. Основные проблемы оказались не в сложной логике, а в нестабильных селекторах, ожиданиях загрузки, очистке контактов и тихих ошибках, которые дают правдоподобные, но неверные данные.