В этом руководстве мы разберем все доступные способы сбора email-адресов с сайтов: готовые десктопные программы, облачные сервисы и написание собственного скрипта на Python. Это три разных подхода к масштабному сбору почтовых адресов в интернете.
Парсинг (или веб-скрапинг) – это автоматический сбор данных со страниц сайтов в удобный для анализа формат. Поиск email-адресов – один из самых частых сценариев. Их собирают для рассылок, обновления баз контактов, пополнения черных списков (добавления адресов-ловушек) и других задач.
Подробнее об этом можно прочитать в нашей статье о том, что такое парсинг.
А ниже мы подробно разберем техническую сторону вопроса: что именно нужно делать, стоит ли писать свой парсер, какие существуют онлайн-инструменты и какие библиотеки стоит использовать.
Законно ли парсить email?

Главная цель парсинга email – сбор баз для рекламных и маркетинговых рассылок.
Но здесь есть и риски, так как законы зависят от страны. Например, в ЕС (по правилам GDPR) и Канаде (CASL) на получение маркетинговых писем нужно предварительное согласие пользователя (opt-in). В США правила мягче: закон CAN-SPAM разрешает коммерческие рассылки без предварительного согласия (opt-out), если в письме есть кнопка отписки, реальный физический адрес и честная тема. Единого международного закона нет, а штрафы за нарушения огромные. Здесь мы не даем юридических консультаций, поэтому всегда проверяйте законы тех стран, куда планируете отправлять письма.
Некоторые компании пытаются обойти правила и сознательно нарушают закон. Однако почтовые сервисы отлично распознают такой спам и блокируют подобные рассылки за считанные часы.
Но есть и абсолютно легальные поводы собирать адреса:
- Поиск контактов контрагентов (партнеров, поставщиков, производителей).
- Объединение контактов со всех страниц крупной компании в единую базу (например, при сборе данных с собственных корпоративных сайтов).
- Сбор дополнительной информации о клиентах. Email или номер телефона – отличный идентификатор, помогающий понять, на каких сайтах регистрируются пользователи и чем они интересуются.
- Раннее обнаружение утечек данных в даркнете для защиты себя и своих клиентов.
- Конвертация информации из одного формата в другой для удобного поиска и индексации.
- Улучшение B2B-продаж (например, поиск всех доступных контактов потенциального клиента на корпоративном домене).
Как видите, парсинг – это инструмент не только для спамеров.
Как устроен парсинг email

Несмотря на популярность мессенджеров, электронная почта остается важнейшим каналом связи. Кроме того, email часто служит логином для большинства сайтов, сервисов и поисковиков. По сути, это ценная контактная информация, и бизнесу выгодно собирать ее в сети.
У email-адреса строгая структура из трех частей:
- Логин (имя пользователя). Уникален в рамках одного почтового сервиса.
- Разделитель. Всегда символ «@».
- Домен. Обычное доменное имя. Любой владелец домена может создать на нем почту, но большинство людей пользуется популярными сервисами: Gmail, Yahoo, Outlook. Их адреса заканчиваются на домены провайдеров (например, @gmail.com).
На сайтах также часто встречаются кликабельные ссылки на почту в виде HTML-тегов: <a href="mailto:EMAIL-HERE">Текст ссылки</a>.
За всем этим стоит целый набор стандартов. Формат адреса строго описан RFC 5321 и RFC 5322. За отправку писем отвечает протокол SMTP, за получение – POP3 и IMAP, а за распознавание домена – DNS.
Чтобы собрать адреса со страницы, нужно проанализировать ее текст или HTML-код и найти совпадения по шаблону. Главный признак email – это символ «@». Можно собрать все слова с «@» и проверить, заканчиваются ли они на известные доменные зоны вроде .com или .net. Но на практике чаще всего используют регулярные выражения (regex).
Это самый популярный способ, так как все адреса строятся по схеме имя@домен.зона. Модуль re в Python может просканировать сырой HTML-код и за мгновение выдать все совпадения.
В реальности все складывается сложнее. Чтобы проанализировать страницу, ее нужно сначала загрузить. Сегодня сайты часто используют Ajax (подгрузка контента на лету) или полностью рендерятся через JavaScript. То есть финальный HTML-код собирается прямо в браузере.
Поэтому для парсинга часто нужен полноценный браузер, который сначала отрисует страницу. Браузеры, которыми можно управлять через код, называются headless-браузерами (без графического интерфейса). А если нужно парсить данные из-под разных аккаунтов, используют антидетект-браузеры.
Еще одна сложность: некоторые сайты прячут исходный код и блокируют средства отладки. Тогда приходится делать скриншоты и распознавать текст с помощью компьютерного зрения.
Крупные ресурсы борются с ботами. Они проверяют поддержку JavaScript, анализируют паузы между запросами и сверяют IP-адреса со списками спамеров. К слову, вот статья о том, как избежать частых ошибок при парсинге.
Неудивительно, что разработчики создали множество готовых сервисов, программ и библиотек для сбора email-адресов. Разберем основные методы.
Десктопные программы для парсинга email

На рынке есть множество специализированных программ, устанавливаемых на компьютер:
- ePochta Extractor. Платная программа с пробной версией. Умеет определять страну адресата, сортировать почту по доменам и экспортировать списки. Но для проверки реальности адресов (валидации) понадобятся дополнительные инструменты.
- LetsExtract Contact Extractor. Инструмент для маркетологов. Собирает не только email, но и телефоны, логины Skype и другие контакты. Ищет по ключевым словам. Работает только на Windows.
- Email Extractor Pro. Программа для Windows и macOS. Ищет контакты в интернете и на локальных дисках.
- ScrapeBox. Настоящий «комбайн» для сбора самых разных данных. Почту собирает через специальный плагин.
Мы перечислили только самые популярные решения, которые регулярно обновляются.
Главный минус таких программ – отставание от алгоритмов поисковиков, что мешает при поиске свежих сайтов для сканирования. Вторая проблема – они плохо справляются с динамическими сайтами, так как внутри нет встроенного браузера, и страницы на JavaScript выдают ошибки.
Зато плюсы налицо: это готовые решения, которые быстро ищут контакты и сохраняют их в удобном формате. Но при масштабном парсинге вам придется обходить блокировки, поэтому такие программы бесполезны без прокси-серверов. Как правило, в них можно загружать списки прокси, а встроенные менеджеры сами отсеивают нерабочие IP.
Облачные сервисы для скрапинга (онлайн-парсеры)

Есть и готовые онлайн-сервисы. Одни продают доступ к уже собранной базе адресов (Hunter, ZoomInfo, Skrapp, Findymail, AeroLeads), другие – это полноценные онлайн-парсеры, которые собирают свежие данные под ваш запрос. Удобно тем, что ничего не нужно ставить и настраивать, а прокси уже встроены.
Но есть важная оговорка. У стороннего сервиса вы не видите, как именно он собирает данные и насколько это законно в вашем случае. Когда вы пишете собственный скрипт (см. ниже), вы контролируете источники, объем и темп – и можете выстроить весь процесс так, чтобы он оставался в рамках закона.
Если же нужен готовый вариант, мы рекомендуем скраперы Froxy: данные с маркетплейсов и поисковиков, без блокировок по IP, в любых регионах, с расписанием и уведомлениями по вебхукам.
Froxy Scrapers
Готовые скраперы для маркетплейсов и поисковиков. Без блокировок по IP, в любых регионах, с расписанием и уведомлениями по вебхукам.
Как написать парсер email на Python

Свой скрипт стоит писать, если у вас есть время и навыки для его поддержки. Плюс в том, что вы ни от кого не зависите, можете добавлять любые функции (обработку JavaScript, ротацию прокси) и собирать данные откуда угодно. Но прокси покупать все равно придется.
Свой скрипт отдает в в вашу ответственность и юридическую сторону. Вы сами решаете, какие сайты обходить и что собирать: можно уважать robots.txt и правила сайта, не трогать персональные данные, на обработку которых нет законного основания, ставить паузы между запросами и хранить только публичные рабочие контакты. Сторонний сервис прячет эти решения от вас, а собственный код делает их явными. Это по-прежнему не юридическая консультация: что и как можно собирать и использовать, зависит от вашей юрисдикции и законов о персональных данных вроде GDPR.
Шаги для создания парсера на Python:
- Установить библиотеки (httpx и BeautifulSoup4).
- Отправить HTTP-запрос к нужному сайту.
- Разобрать полученный HTML-код с помощью BeautifulSoup.
- Найти все ссылки mailto, а остальные адреса собрать через регулярные выражения.
- Сохранить итог в JSON.
У email стандартный формат, который легко поймать:
pattern_email = re.compile(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}')
Окончание {2,} крайне важно. Если поставить {2,4} (как делали раньше), скрипт пропустит длинные доменные зоны вроде .online, .agency или .international. Подобные шаблоны поиска часто используют для проверки форм регистрации на сайтах. Подробности можно найти в официальной документации Python по модулю re.
Установим нужные библиотеки:
pip install httpx beautifulsoup4
Поиск всех ссылок формата mailto выглядит так:
matches_email = soup.find_all("a", attrs={"href": re.compile("^mailto:")})
А вот так можно искать совпадения по всему тексту страницы:
pattern_email = re.compile(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}')
matches_email = re.findall(pattern_email, page_html)
Имейте в виду: поиск по всему тексту страницы работает медленнее и потребляет больше ресурсов.
Вот как выглядит полноценный скрипт на Python:
import httpx
from bs4 import BeautifulSoup
import re
import json
# Запускаем запросы через ротируемые прокси Froxy, задаем User-Agent и таймаут.
# Без User-Agent многие сайты вернут ошибку 403.
client = httpx.Client(
proxy="http://user:pass@proxy.froxy.com:8080", # 8080 – порт прокси
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"},
timeout=30,
)
def parse_site(main_url: str):
links = []
response = client.get(main_url)
response.raise_for_status() # Выбросить ошибку при 403/404, чтобы не парсить страницу с ошибкой
bssoup = BeautifulSoup(response.text, "html.parser")
# Ищем ссылки на все страницы сайта
for link_box in bssoup.select("div.info-section.info-primary"):
a = link_box.select_one("a")
if a is None: # Пропускаем блоки, не подходящие по структуре
continue
# Формируем полные ссылки
link = "https://www.your-site.com" + a.attrs["href"]
links.append(link)
return links
def parse_emails(links: list):
emails = {}
for link in links:
# Отправляем GET-запрос по каждой ссылке
page_response = client.get(link)
page_response.raise_for_status()
bssoup = BeautifulSoup(page_response.text, "html.parser")
# Ищем название компании, если его нет – ставим заглушку unknown
name_node = bssoup.select_one("h1.dockable.business-name")
company_name = name_node.text if name_node else "unknown"
# Находим все mailto-ссылки и вытаскиваем из них адреса
for mailto_link in bssoup.find_all("a", attrs={"href": re.compile("^mailto:")}):
email = mailto_link.get("href").replace("mailto:", "")
# Записываем email к соответствующей компании
if company_name not in emails:
emails[company_name] = []
emails[company_name].append(email)
return emails
# Собираем ссылки на страницы
links = parse_site("https://www.your-site.com/target-page.html")
# Собираем email-адреса
emails = parse_emails(links)
# Выводим результат в JSON
print(json.dumps(emails, indent=4))
client.close()
Скрипт собирает адреса из атрибутов mailto и привязывает их к названиям компаний – получается готовая база контактов. Вставьте свои данные от прокси Froxy, и IP-адреса будут меняться при каждом запросе.
В этом примере название компании берется из конкретного HTML-класса. Если у сайта другая структура, теги в коде придется заменить. Мы используем метод select_one, чтобы скрипт не падал с ошибкой при отсутствии тега, а просто пропускал его. Функция raise_for_status() нужна, чтобы вовремя заметить блокировку (код 403 или 404). За разбор структуры тегов отвечает библиотека BeautifulSoup.
Альтернативные библиотеки Python для парсинга
Помимо HTTPX и BeautifulSoup, можно использовать:
- Scrapy – фреймворк для обхода целых сайтов. Он поддерживает многопоточность, перелистывание страниц (пагинацию) и смену прокси.
- Playwright или Selenium – незаменимы для сайтов, которые подгружают контент через JavaScript. Обязательно используйте их вместе с прокси, чтобы избежать блокировок по IP.
В связке Scrapy и Playwright решают любые задачи: от огромных статических сайтов до тяжелых JavaScript-приложений.
Проверенные подходы к парсингу
Владельцы сайтов знают о парсерах и активно защищают контакты. Среди методов защиты:
- Обфускация (запутывание кода).
- Конкатенация (склеивание частей email-адреса скриптами).
- Замена адресов на токены.
- Шифрование данных.
- Встраивание почты в виде картинки.
- Скрытие контактов за капчей (CAPTCHA).
Это дополнение к классическим мерам: блокировке подозрительных IP и скрытым ссылкам-ловушкам.
Сбор данных – это только половина дела, адреса еще нужно проверить на актуальность:
- Делайте паузы между запросами. Причем они должны быть случайными. Одинаковые интервалы мгновенно выдают бота.
- Проверяйте собранные базы. Сверяйте контакты с сервисами валидации. Рассылать тестовые письма опасно – в базах полно адресов-ловушек. Если отправить письмо на такой адрес с основного сервера, ваш домен быстро попадет в спам-фильтры.
- Собирайте контекст. Сохраняйте не только почту, но и имя человека, компанию и страницу, где вы нашли контакт.
- Используйте headless-браузеры. Они отлично справляются с JavaScript и обходят многие системы защиты.
- Меняйте IP-адреса. Ротация прокси при каждом запросе – лучшая защита от бана.
Residential Proxies
Резидентные прокси с ротацией для сбора данных по всему миру.
Выводы

Независимо от того, используете вы готовые программы или пишете код сами, вам понадобятся прокси-серверы. Без промежуточных IP-адресов целевой сайт быстро заблокирует вам доступ.
Самая надежная связка для масштабного парсинга: резидентные прокси с ротацией + headless-браузер + сервис для валидации адресов.
Арендовать качественные резидентные и мобильные прокси можно у Froxy. Вы платите только за потраченный трафик, а менять IP-адреса можно бесконечно (даже при каждом запросе). В нашем пуле более 120 миллионов адресов с возможностью таргетинга до города и провайдера.

