Сбор e-mail компаний из Google Maps с помощью A-Parser
Кратко
Собирать контакты компаний для продаж и холодных рассылок долго: нужно найти организации, собрать данные из карточек, перейти на сайты и проверить разделы с контактами. На большой выборке такая работа быстро превращается в рутину.
Эту рутину можно полностью автоматизировать в A-Parser. Связка Maps::Google и HTML::EmailExtractor за один автоматический запуск собирает название, телефон, адрес, рейтинг и сайт компании, а затем находит на её сайте опубликованные публичные e-mail.
В статье разберём:
- как собрать карточки компаний из Google Maps по своей нише и городу;
- как передать результат во второе задание без ручного списка URL;
- как найти публичные e-mail на сайтах компаний;
- что показал тест на 772 карточках стоматологий Москвы;
- как повторить схему с готовым пресетом.
1. ЧТО ПОЛУЧАЕТСЯ НА ВЫХОДЕ
Вместо «голого» списка почтовых ящиков получается таблица с контекстом по каждой компании:
| Компания | Сайт | Телефон | Адрес | Рейтинг | Отзывы | |
|---|---|---|---|---|---|---|
| Artikon | articon-clinic.ru | +7 (495) 975-95-98 | Серпуховский Вал, 21 к4 | 5.0 | 104 | [email protected] |
| Colibri Dental | colibrident.ru | +7 (495) 161-10-22 | ул. Краснопролетарская, 7 | 4.8 | 79 | [email protected], [email protected] |
| Стоматология № 4 | stomatologia4.ru | +7 (495) 255-11-42 | Марксистская, 3 стр 2 | 4.4 | 19 | [email protected] |
По такой таблице сразу видны город, телефон, сайт, примерный масштаб компании по числу отзывов и канал для первого контакта.
Важно: парсер находит только публичные адреса, опубликованные на страницах сайта. Это исходная база для сегментации: перед массовой отправкой писем проверьте адреса валидатором доставляемости. Публичный адрес не означает согласие на любую рассылку, поэтому учитывайте правила, применимые к вашим контактам.
2. ПОЧЕМУ GOOGLE MAPS И ПОИСК E-MAIL НУЖНО РАЗДЕЛИТЬ НА ДВА ЗАДАНИЯ
Логичный вопрос: зачем не добавить оба парсера в одно задание? Потому что мультипарсинг запускает парсеры на одном и том же исходном запросе. Запись вроде $p1.site в поле запроса второго парсера не передаст ему найденный сайт: EmailExtractor получит исходную фразу, например «стоматология Москва».
Преимущества двух этапов
- Экономия ресурсов и времени: на второй этап уходят только компании, у которых есть сайт.
- Пошаговый контроль: сначала формируется список компаний с сайтами, затем он дополняется найденными e-mail — результат каждого этапа легко проверить.
- Повтор только неудачных URL: включите сохранение неудачных запросов. A-Parser запишет их в queries/failed; затем создайте новое задание HTML::EmailExtractor с теми же настройками и укажите этот файл как источник запросов. Повторно собирать Google Maps не потребуется.
3. ПРИМЕР: ПАРСИНГ НИШИ «СТОМАТОЛОГИЯ» В GOOGLE MAPS
Для проверки взяли стоматологические организации Москвы. Maps::Google вернул 772 строки карточек. После удаления пустых и повторяющихся сайтов осталось 588 уникальных URL.
Затем эти URL передали в HTML::EmailExtractor с Parse to level = 1. Это был расширенный тест с обходом внутренних ссылок, а не рекомендуемый режим первого запуска. На большой базе даже первый уровень раздувает очередь до десятков тысяч страниц; в проверочном запуске она превысила 40 000. Поэтому готовый пресет ниже по умолчанию обрабатывает только стартовый URL каждого сайта.
Код:
eJztVt1uE0cUfpXVChRIg3H+DDUXKBgbqJKYBtOb2EST3WN7mtmZZWbWiYki
QVX1hotWVa+qqmr7BAiKSn+gr7B+BZ6kZ2Z21z+129y3F4n3nD1n5sx3vvPN
nvqaqCN1X4ICrfzq/qmPjwnT6gEZQEv4Vb9LGfgrPglDqqnghDWEjIgN7qzk
0Q85fZwARistKe9hfGI9HycgKWCslgms+AoXbRBcMJx5QTVIooVsxmYPdJ/6
gm8xtg0DYGh2CVMYhivK4a2EshCk2upi0r0scX5I829rnBUlT241AHkssYa8
HGvcau44G3NCsS16eLzwEI/GaEQ12qomEq7RW0bnEUBcoGAckZBQ7OGWzXbe
imPgIYZhVCB4l/aaWICkIeSgJryFbWnymohiBhpqNsrsD12CS2CiFoKpjx64
VWJJsVWbZocIDzNOLGAJCGMP97Yn35hEpUXc5HUpDYKuyFDchsOkN5GpoSfk
0JUWW6Zg8g6Jlff+i6+9eoQNrZ9oSQLsg/f+6TdeIBgDY5nSiFTYCczetznV
6h0hepZSxWFO/QFhFrjNzdK16+XrGxsr69dKlc1ra5UP181hh7F5KzKY0EMN
foEQMqQcC1T+2XiV1dWFGU+EiPyzzpi4jsz4Zv+i12ju1bdqdz3sfeTd2/Xi
1RKWHt/w7jWsr6Tw/w3PMsw78Jbaegl/7BtOIphx4cDgHmrGG/cFh1knMhiH
ZtYJAwrHs6GmBOviSze8+u5t+8+72PHHJ8Lx2sVy8EwR4n3FZKiSVoNxCI77
mIGP3SQ2JCJT9TWc6Mw5zLHZ9y9Y2+8U0Rg5ejb6LH2X/pG+sL+/49+r9M3o
Sy/9Ln03epb+lr5MX/gzAzklGjPOWdLjHnO4RRItsCoaeMAlDfoRcFNwomBv
fP4tlemLMfIh/l/a/rvSVj63rp2fcpPKdre1s12tTufOVzg3SnaOFwubjem6
8ZsQtkp5YYamEYhkKnp9cXQsxclQgrY8nVTOhRk4XzZpMtpfXnwCG1zrQ3AE
cr7gZkAE2DTCh22d2ZlsFrYVzMJySjk2nUYWtkEVDRRu0wlVchBeWrpgzJWl
y22+WCfBpSwQyvRbq3V/pi/St0bl2jr9Kv159DR9PXqGzz+lr1EBX48+x6i3
aP+A9q+oi28w+hXa3+PzL6Pn6cvRc7R+xFXwbVtbwtiiplU4E6bHkyK231kg
y45LU9o8R3ZP805J6MGJmQ+RyABystmxM2taq+Vugaw3TiJNVwzrTT8MQrYT
FirbA7NiVofboeo/ulRavnm53dbn/u1rHaub1atX9x+h2fkAnWr5gp8t2XIH
sGbMSJAPOhAZ9PNnnEonmj7S7vxXDU8Y+5dbxIlspxj84qP5dP74o996JlTD
q5Q9BYF31Vsve/n8YVxPiLAmQtzcIYcnOZTiGHexM9kHEjIDv9GxLn5ciWOs
PBJ8D0Iq8UtL2TB1RGPjx41cqCQ8FBF9AgeaqYMu9gs/Z/AS0/atCd8V3NTu
Jj+TkKpfsSJPTmpCHDlCrVbcHes0wEQLzoamLgtqUdYOaLIHXUSm70qyvak1
3HBZ1+EwJkrVmEjCBiMSan3kPOyQk/ukZ/daM7trOTwwbFi1OSEM7KVgd5oS
r6q/XraEQN4qHQIjw+yScrPv+m/kZo4itPEr6rKVaY0gBn3TV4cN8B7lhl+m
Brt+kOBLg4S5JUUPry2OOe4KLFu0DhQibeqvrK1ubDi85BU8lL1I85HsTuuf
nyNnVykAtVzG/rS2H3yCFOwO3WssZs0+zQfxbsETxCznFFJ+rVzurExLshPv
Y0L1Q64pQ5uDPhbyiOIKa4Z/Ihy6OkJx0HtC439onkMAdF8YqbxTb5nqk8Pb
eGvSDJ+goFIxsXhnAw+wwrCesSNv7iFBcMOAAeFJbFtczvAw/GqRnovFsKmh
OTvDz5lP1X03nmZozXChD+8mhZ3CE5z9BT+wSLA=
Результаты поиска e-mail на сайтах
| Потоки | Прокси | Строк с e-mail | Всего адресов | Уникальных адресов |
|---|---|---|---|---|
| 10 | включены | 266 | 337 | 319 |
Конверсия сайтов в найденные публичные e-mail
В этом тесте e-mail найден для 266 из 588 сайтов — около 45%. Всего собрано 337 адресов, из них 319 уникальных.
Примеры строк итогового файла
| Компания | Сайт | Найденный e-mail | Телефон | Адрес |
|---|---|---|---|---|
| Colibri Dental | colibrident.ru | [email protected], [email protected] | +7 (495) 161-10-22 | ул. Краснопролетарская, 7 |
| Artikon | articon-clinic.ru | [email protected] | +7 (495) 975-95-98 | Серпуховский Вал, 21 к4 |
| Стоматология № 4 | stomatologia4.ru | [email protected] | +7 (495) 255-11-42 | Марксистская, 3 стр 2 |
Полный пример результатов: посмотреть таблицу.
Пустое поле Email — нормальный результат. Сайт может использовать форму обратной связи без открытого ящика, а контакты могут загружаться через JavaScript. Телефон и адрес из карточки Maps при этом остаются в файле.
4. КАК АВТОМАТИЧЕСКИ СОБРАТЬ БАЗУ КОМПАНИЙ В A-PARSER
Настройте два последовательных задания. Maps::Google выгрузит карточки компаний в TSV без строки заголовков. Затем A-Parser автоматически передаст файл в HTML::EmailExtractor, который откроет сайты из карточек Maps и добавит найденные e-mail.
Шаг 1. Соберите карточки компаний в Google Maps
В первом задании выберите Maps::Google и задайте формат результата TSV. Значения разделяются табуляцией, а строку заголовков добавлять не нужно — оставьте resultsPrepend пустым.
Для запуска по Москве в пресете уже заданы параметры области поиска:
- Coordinates: 55.780844,37.6572693 — центр Москвы;
- Zoom: 11 — масштаб области поиска для московских карточек.
Эти параметры задают область поиска, а не координаты найденных организаций. Для плотного покрытия города включите Collect full region и задайте шаг координатной сетки. Для другого города замените координаты и зум в настройках Maps::Google.
Код:
[% FOREACH item IN p1.serp;
IF item.site;
query _ "\t" _ item.name _ "\t" _ item.address _ "\t" _ item.phones _ "\t" _ item.rating _ "\t" _ item.reviews _ "\t" _ item.site _ "\n";
END;
END %]
Порядок полей в каждой строке должен быть одинаковым:
Код:
Запрос | Компания | Адрес | Телефон | Рейтинг | Отзывы | Сайт
В примере \t и \n означают табуляцию и перенос строки. В готовом пресете между полями находится настоящая табуляция, а после каждой карточки — перенос строки. Если записать в результат буквальные символы \ + t и \ + n, весь файл станет одним запросом для следующего задания. Условие IF item.site исключает карточки без сайта ещё на этапе формирования файла Maps.
В дополнительных опциях задания включите:
- Запустить по завершении → выберите второе задание HTML::EmailExtractor;
- Использовать файл результатов для запросов → включите опцию.
После завершения Maps::Google A-Parser автоматически передаст файл во второе задание. Заголовок здесь не нужен: он стал бы отдельной строкой и не прошёл бы разбор во втором задании.
Шаг 2. Найдите публичные e-mail на сайтах компаний
Теперь настройте HTML::EmailExtractor. Сначала добавьте в его Конструктор запросов правило типа Regex. Оно разберёт TSV-строку на отдельные поля и передаст парсеру только URL сайта.
Код:
{
"source": "query",
"type": "regex",
"regex": "^(.*?)\\t(.*?)\\t(.*?)\\t(.*?)\\t(.*?)\\t(.*?)\\t(https?://[^\\t]+)\\s*$",
"regexType": "",
"to": ["queryText", "company", "address", "phone", "rating", "reviews", "site"]
}
Первые шесть групп сохраняют запрос, компанию, адрес, телефон, рейтинг и количество отзывов. Последняя группа проверяет непустой URL, начинающийся с http:// или https://. Карточки без сайта в файл не попадают благодаря условию IF item.site в шаблоне Maps.
В настройках HTML::EmailExtractor:
- в поле Формат запроса укажите $query.site — парсер откроет URL из поля сайта;
- оставьте Engine = HTTP, если контакты доступны в HTML; для JavaScript-сайтов выберите Chrome;
- используйте прокси и ограниченное число повторов, чтобы не зациклить обработку недоступного сайта;
- для первого тестового запуска не добавляйте Parse to level. Тогда парсер проверит только переданный URL и объём работы останется предсказуемым.
Если нужно пройти внутренние страницы, включайте режим отдельно на небольшой выборке: Parse to level = 1, Follow links = Internal only, положительный Follow links limit (например, 5–10) и Уникальные запросы. Такой обход заметно увеличивает число запросов, время работы и расход прокси.
В Формат результата сохраните поля карточки Maps и добавьте найденные адреса:
Код:
$query.company\t$query.address\t$query.phone\t$query.rating\t$query.reviews\t$query.site\t$p1.mails.format('$mail,')\n
В Prepend добавьте заголовок итогового файла:
Код:
Компания\tАдрес\tТелефон\tРейтинг\tОтзывы\tСайт\tEmail\n
В результате получится единый файл: данные карточки Maps будут сохранены вместе с публичными e-mail, найденными на сайте компании и, при включённом обходе, на её внутренних страницах.
5. ГОТОВЫЙ ПРЕСЕТ A-PARSER ДЛЯ GOOGLE MAPS И EMAILEXTRACTOR
Предлагаемый пресет содержит автоматическую связку из двух заданий:
- первое задание — Maps::Google;
- второе задание — HTML::EmailExtractor;
- результат первого задания передаётся второму через runTaskOnComplete и useResultsFileAsQueriesFile;
- файл с результатами Maps используется без строки заголовков, а Query Builder выделяет поле $query.site;
- итоговый результат содержит данные компании, сайта, телефона, адреса, рейтинга, отзывов и e-mail;
- по умолчанию EmailExtractor обрабатывает только стартовый URL: переопределения Parse to level в пресете нет;
- HTTP, прокси, таймаут и число повторов заданы явно.
Настройки рассчитаны на быстрый тест с бесплатными прокси: 10 потоков, таймаут 60 секунд и 30 повторов запроса. На платных прокси эти параметры можно адаптировать под качество маршрутов; автоматическую схему менять не требуется. Значения заданы непосредственно в пресете как переопределения timeout, proxyretries, useproxy и proxyChecker, поэтому они не зависят от настроек одноимённого parser preset. Глубокий обход намеренно не переопределён.
Как импортировать пресет и запустить сбор
- Откройте Редактор заданий в A-Parser и нажмите Импорт пресета.
- Скопируйте пресет и вставьте его в окно импорта.
- После импорта убедитесь, что созданы два задания и у Maps указано Запустить по завершении для задания EmailExtractor.
- При необходимости замените единственную тестовую поисковую фразу стоматология Москва на свою.
- Для запуска статьи оставьте Coordinates = 55.780844,37.6572693 и Zoom = 11. Для плотного покрытия Москвы включите Collect full region и задайте шаг координатной сетки.
- Запустите первое задание. После его завершения второе стартует автоматически и получит файл результатов без дополнительных действий. Для тестов лучше оставить Parse to level выключенным; глубокий обход включайте отдельно только для ограниченной выборки.
Не переключайте второе задание на отдельный список URL: его входом должен оставаться результат Maps.
6. КАК РАССТАВИТЬ ПРИОРИТЕТЫ В СОБРАННОЙ БАЗЕ
A-Parser сохраняет в итоговый файл объективные данные: название, сайт, телефон, рейтинг, отзывы и найденные e-mail. Колонки Приоритет в результатах нет — вы сами расставляете приоритеты в Excel или Google Таблицах, отталкиваясь от готовности контакта к работе.
Обычно базу делят на три уровня приоритета:
| Приоритет | Что в таблице | Почему такой приоритет | Что делать дальше |
|---|---|---|---|
| Высокий | Поле Email заполнено | Готовый контакт без дополнительных затрат. Стоимость отправки письма минимальна, а название и адрес из Maps дают персонализацию. | Проверить через валидатор доставляемости и запускать email-рассылку. |
| Средний | Поле Email пустое, но есть рабочий сайт и телефон | Организация действующая, но контакт требует доработки: глубокого допарсинга внутренних страниц или прямого звонка. | Отправить сайты на второй круг с Parse to level = 1 (поиск по страницам /contacts, /about) либо связаться по телефону / через форму. |
| Низкий | Сайт недоступен или выдал ошибку таймаута | Высокий риск заброшенного бизнеса или неактуальной карточки. Ручной разбор отнимет время при низкой отдаче. | Отложить в резерв или удалить из рабочей базы. |
Дополнительный скоринг по рейтингу и отзывам
Если ваша рассылка предлагает конкретные B2B-услуги, используйте числовые колонки из Google Maps для точной выборки:
- Для SERM и работы с отзывами: отфильтруйте организации с рейтингом ниже 4.3 — у них есть проблемы с репутацией, и им актуальна работа с негативом.
- Для локального SEO и рекламы: отберите карточки с рейтингом 4.8–5.0, но с малым количеством отзывов (до 15) — организация работает хорошо, но теряет клиентов в поиске Maps.
7. ЧТО ДЕЛАТЬ, ЕСЛИ ЧТО-ТО ПОШЛО НЕ ТАК
| Проблема | Почему так вышло | Как исправить |
|---|---|---|
| Google Maps выдаёт мало компаний | Слишком узкая область или мелкий зум | Проверьте координаты, язык и включите Collect full region для сканирования сеткой |
| EmailExtractor выдаёт пустые email | На стартовой странице нет открытой почты или она скрыта скриптом | Сначала попробуйте Chrome на небольшой выборке. Затем при необходимости включите Parse to level = 1, Follow links: Internal only, уникализацию запросов и лимит переходов 5–10 |
| Много таймаутов или ошибок соединения | Прокси нестабильные | Проверьте логи, не увеличивайте бесконечно число повторов и при необходимости замените прокси на более качественные. Для стабильной работы рекомендуются резидентские прокси A-Parser |
| Дублируются строки | Разные филиалы используют один сайт | Включите опцию Уникальные запросы |
8. КАК ИСПОЛЬЗОВАТЬ БАЗУ КОМПАНИЙ ИЗ GOOGLE MAPS
Связка собирает исходные данные для дальнейшего отбора. Вот несколько практических сценариев:
- Веб-студии и аутсорс: после проверки мобильной версии отберите клиники и сервисы со старыми неадаптивными сайтами и предложите точечный аудит.
- Агентства репутации: отберите компании с рейтингом 3.5–4.2 и предложите системную работу с отзывами и картами.
- Локальное SEO и контекст: после сравнения локальной выдачи найдите компании со слабым присутствием и подготовьте предложение под конкретный район.
- B2B-поставки и дистрибуция: соберите оптовую базу профильных предприятий — клиник, ресторанов или СТО — для прямых предложений по расходникам и оборудованию.
Чтобы повторить схему, импортируйте готовый пресет и сначала проверьте его на небольшой выборке. Затем замените поисковые запросы и настройте параметры под свою задачу.
️ Продуктовый стек для сбора компаний и e-mail
- A-Parser Pro / Enterprise
Запускает Maps::Google и HTML::EmailExtractor, передаёт результаты между заданиями и сохраняет итоговую таблицу в нужном формате. - Резидентские Premium-прокси A-Parser
Пул IP для задач, где важны регион сбора Google Maps и стабильная обработка большого списка сайтов.
Выберите A-Parser для запуска связки и подключите Premium-прокси, если в задаче важны регион сбора и стабильность запросов.
Полезные ссылки:
Последнее редактирование: