Сбор e-mail компаний из Google Maps с помощью A-Parser

Support Anastasia

Administrator
Команда форума
A-Parser Enterprise
herogmail.webp


Сбор e-mail компаний из Google Maps с помощью A-Parser

Кратко

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

Эту рутину можно полностью автоматизировать в A-Parser. Связка Maps::Google и HTML::EmailExtractor за один автоматический запуск собирает название, телефон, адрес, рейтинг и сайт компании, а затем находит на её сайте опубликованные публичные e-mail.

В статье разберём:
  • как собрать карточки компаний из Google Maps по своей нише и городу;
  • как передать результат во второе задание без ручного списка URL;
  • как найти публичные e-mail на сайтах компаний;
  • что показал тест на 772 карточках стоматологий Москвы;
  • как повторить схему с готовым пресетом.



1. ЧТО ПОЛУЧАЕТСЯ НА ВЫХОДЕ

Вместо «голого» списка почтовых ящиков получается таблица с контекстом по каждой компании:

КомпанияСайтТелефонАдресРейтингОтзывыEmail
Artikonarticon-clinic.ru+7 (495) 975-95-98Серпуховский Вал, 21 к45.0104[email protected]
Colibri Dentalcolibrident.ru+7 (495) 161-10-22ул. Краснопролетарская, 74.879[email protected], [email protected]
Стоматология № 4stomatologia4.ru+7 (495) 255-11-42Марксистская, 3 стр 24.419[email protected]

По такой таблице сразу видны город, телефон, сайт, примерный масштаб компании по числу отзывов и канал для первого контакта.

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



2. ПОЧЕМУ GOOGLE MAPS И ПОИСК E-MAIL НУЖНО РАЗДЕЛИТЬ НА ДВА ЗАДАНИЯ

Логичный вопрос: зачем не добавить оба парсера в одно задание? Потому что мультипарсинг запускает парсеры на одном и том же исходном запросе. Запись вроде $p1.site в поле запроса второго парсера не передаст ему найденный сайт: EmailExtractor получит исходную фразу, например «стоматология Москва».

infographic_googlemail.webp


Преимущества двух этапов
  1. Экономия ресурсов и времени: на второй этап уходят только компании, у которых есть сайт.
  2. Пошаговый контроль: сначала формируется список компаний с сайтами, затем он дополняется найденными e-mail — результат каждого этапа легко проверить.
  3. Повтор только неудачных 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включены266337319

Конверсия сайтов в найденные публичные e-mail

В этом тесте e-mail найден для 266 из 588 сайтов — около 45%. Всего собрано 337 адресов, из них 319 уникальных.

Примеры строк итогового файла

КомпанияСайтНайденный e-mailТелефонАдрес
Colibri Dentalcolibrident.ru[email protected], [email protected]+7 (495) 161-10-22ул. Краснопролетарская, 7
Artikonarticon-clinic.ru[email protected]+7 (495) 975-95-98Серпуховский Вал, 21 к4
Стоматология № 4stomatologia4.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. Глубокий обход намеренно не переопределён.

Как импортировать пресет и запустить сбор
  1. Откройте Редактор заданий в A-Parser и нажмите Импорт пресета.
  2. Скопируйте пресет и вставьте его в окно импорта.
  3. После импорта убедитесь, что созданы два задания и у Maps указано Запустить по завершении для задания EmailExtractor.
  4. При необходимости замените единственную тестовую поисковую фразу стоматология Москва на свою.
  5. Для запуска статьи оставьте Coordinates = 55.780844,37.6572693 и Zoom = 11. Для плотного покрытия Москвы включите Collect full region и задайте шаг координатной сетки.
  6. Запустите первое задание. После его завершения второе стартует автоматически и получит файл результатов без дополнительных действий. Для тестов лучше оставить 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

Связка собирает исходные данные для дальнейшего отбора. Вот несколько практических сценариев:
  1. Веб-студии и аутсорс: после проверки мобильной версии отберите клиники и сервисы со старыми неадаптивными сайтами и предложите точечный аудит.
  2. Агентства репутации: отберите компании с рейтингом 3.5–4.2 и предложите системную работу с отзывами и картами.
  3. Локальное SEO и контекст: после сравнения локальной выдачи найдите компании со слабым присутствием и подготовьте предложение под конкретный район.
  4. B2B-поставки и дистрибуция: соберите оптовую базу профильных предприятий — клиник, ресторанов или СТО — для прямых предложений по расходникам и оборудованию.

Чтобы повторить схему, импортируйте готовый пресет и сначала проверьте его на небольшой выборке. Затем замените поисковые запросы и настройте параметры под свою задачу.



️ Продуктовый стек для сбора компаний и e-mail
  • A-Parser Pro / Enterprise
    Запускает Maps::Google и HTML::EmailExtractor, передаёт результаты между заданиями и сохраняет итоговую таблицу в нужном формате.
  • Резидентские Premium-прокси A-Parser
    Пул IP для задач, где важны регион сбора Google Maps и стабильная обработка большого списка сайтов.

Выберите A-Parser для запуска связки и подключите Premium-прокси, если в задаче важны регион сбора и стабильность запросов.



Полезные ссылки:
 
Последнее редактирование:
Назад
Верх