Блог Froxy | Новости, полезные статьи о использовании прокси

Подробный гайд: как парсить сайты и собирать e-mail

Written by Команда Froxy | 25.07.2024 9:00:00

Напомним, парсинг (веб-скрапинг) – это сбор и преобразование данных, размещённых на страницах сайтов, в данные, нужные для анализа и дальнейшей работы. Парсинг email с сайтов – достаточно частая задача. Адреса электронной почты могут потребоваться для рассылок, для актуализации базы контактов, для пополнения чёрных списков (ящиков-ловушек), а также для многих других целей.

Отдельный материал по теме – что такое парсинг.

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

Поехали.

Для чего нужно парсить email-адреса

Наиболее востребованный пример практического применения email-грабберов – это создание баз для проведения рекламных (маркетинговых) рассылок.

Однако, именно здесь кроется больше всего проблем. Рассылки без согласия пользователей запрещены. Если компания будет уличена в таком нарушении, то ей может грозить серьёзный штраф. Такая практика применяется во всех развитых странах.

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

Есть и более адекватные кейсы применения email-парсеров:

  • Поиск контактных данных контрагентов (партнёров, поставщиков, производителей и т.п.).
  • Создание единой базы email из разрозненных страниц и источников внутри одной компании (условно: парсятся email на страницах своих сайтов).
  • Сбор дополнительной информации о своих клиентах и подписчиках: на каких сайтах регистрируются, какими темами и категориями интересуются, как себя ведут и т.п. В качестве идентификатора при поиске в сети выступает email или номер телефона.
  • Своевременное обнаружение сливов в Даркнете (для повышения безопасности своих персональных данных и/или персональных данных клиентов).
  • Преобразование формата данных из одного в другой (для систематизации и удобного поиска/индексирования).
  • Повышение эффективности B2B-контактов. Например, за счёт поиска доступных контактов потенциального клиента по корпоративному домену.
  • И т.п.

Парсинг не всегда связан со злобными хакерами и спамом.

Как устроен email-парсинг и как он работает

Email – это адрес электронной почты. Несмотря на повсеместное использование мессенджеров и социальных сетей, email остаётся одним из самых востребованных каналов связи. Плюс, email-адреса заменяют собой идентификаторы клиентов в популярных поисковиках, на сайтах и в онлайн-сервисах.

Но изначально, email – это контактная информация. Естественно, бизнесу очень интересно собирать в сети новые контакты.

Email-адреса имеют определённую структуру. В составе email имеется сразу три компонента:

  • логин (ник или имя пользователя), он обязательно является уникальным внутри одного почтового сервиса, условно, в пределах одного почтового домена.
  • разделитель – это всегда символ @.
  • почтовый домен – это обычное доменное имя. Любой, кто владеет доменом, может создавать свои почтовые ящики. Но большинство клиентов в сети используют готовые почтовые сервисы, такие как Gmail, Yandex.Почта, Yahoo Mail, VK Mail, Outlook, Proton Mail и т.п. Такие сервисы работают на доменах, которые принадлежат им: @gmail.com, @yandex.ru и прочие.

Иногда можно встретить кликабельные ссылки с email, они организуются за счёт специальных атрибутов на уровне HTML-кода – <a href="mailto:ЗДЕСЬ-EMAIL">Тут текст ссылки</a>.

Для email-адресов даже есть сборник специальных стандартов, которые описывают все технические детали и ограничения – это серия RFC-стандартов, касающихся DNS, POP3, SMTP и IMAP-протоколов.

Соответственно, чтобы найти на странице все email-адреса, нужно проанализировать текст (или исходный HTML-код) страницы и вычленить подходящие участки по специальному паттерну.

Как можно заметить, самый яркий атрибут email – это символ @. Не менее интересна привязка домена. Например, все слова, включающие знак @ можно анализировать на включение известных доменных зон, например, .com, .ru, .net и пр. Найденные строки и будет email-адресами. Но это уже высший пилотаж. Чаще всего достаточно просто проверки регулярным выражением.

Но легко сказать, гораздо сложнее всё сделать на практике. Ведь, чтобы начать анализировать содержимое страниц, нужно ещё получить к ним доступ. А большинство современных сайтов использует продвинутые Ajax-технологии (с подгрузкой в ответ на действия пользователя) или вообще всё содержимое рисует с помощью JavaScript, то есть формирует итоговый HTML непосредственно в браузере (из разных кусков и скриптов).

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

Ну и ещё камень вдогонку – некоторые сайты и web-приложения могут запрещать отладку, а также блокировать отображение исходного кода. Тут может потребоваться создание скриншотов и полноценное компьютерное зрение (про скрапинг экранов).

Крупные проекты не любят паразитной нагрузки и оперативно выявляют автоматически обращения к страницам. Это целая наука. Кто-то проверяет поддержку JavaScript, кто-то анализирует время между запросами, кто-то прогоняет IP по спам-базам и чёрным спискам, и т.п.

Отдельно: как избежать наиболее частых ошибок при парсинге и делать всё как профи.

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

Неудивительно, что разработчики создают специальные web-сервисы для вычленения email (онлайн-парсеры email), плагины для браузеров, самостоятельные десктопные программы, серверный софт, библиотеки, фреймворки, предоставляют отдельные API и прочее.

Ниже поговорим о типовых способах парсинга email.

Способ 1. Парсинг email-адресов с помощью готовых программ

К готовым нишевым решениям можно отнести следующий специализированный софт:

  • ePochta Extractor. Удачное ПО, гибко интегрируется с другими программами от того же разработчика. Распространяется платно, но имеет триал-версию. Умеет определять страну владельца email, сортировать найденную почту по доменам, выгружать списки в разных форматах. Но для проверки существования email, то есть для их валидации, требуется дополнительный софт или специальные сервисы.
  • LetsExtract Contact Extractor. Представляет собой утилиту из целого набора программ для email-маркетологов. Умеет искать и извлекать с сайтов не только email, но и другие контактные данные: номера телефонов, логины Skype и т.п. Тематику поиска можно определить с помощью поисковых запросов (то есть ключевых слов). В качестве программных платформ рассматривается только Windows (для десктопов или для серверов).
  • Email Extractor Pro. Продукт команды из Италии. Есть версия для Windows и для MacOS. Обеспечивает поиск и сбор email-адресов не только в сети, но и на локальных устройствах.
  • ScrapeBox. Уникальный «мегакомбайн», умеет парсить разную информацию, не только email-адреса. Работа с электронной почтой организуется за счёт специального бесплатного плагина.

И т.п. Список софта может быть очень большим. Мы привели продукты, которые упоминаются чаще других и регулярно получают обновления.

Основная проблема любого софта для парсинга – потеря совместимости с поисковой выдачей, чтобы подбирать ресурсы, подлежащие сканированию. Не менее насущный минус – отсутствие поддержки динамических сайтов. Почти всегда под капотом нет встроенного headless-браузера, что приводит к массе ошибок при попытке загрузки сайтов, использующих JavaScript.

Из очевидных плюсов: это быстрое и готовое решение, которое умеет искать email и выгружать их в удобном формате.

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

Способ 2. Готовые онлайн-сервисы

Тут можно выделить две дополнительные подкатегории: сервисы, которые уже собрали свою базу email-адресов и готовые поделиться ею с вами за дополнительную плату, а также сервисы, которые могут спарсить нужную вам информацию, чтобы потом отдать вам только обработанный результат.

К первому типу онлайн-сервисов можно отнести: hunter (это огромная база email-адресов корпоративной почты), zoominfo (аналог), skrapp, Findymail (позволяет проверять адреса по базе контактов LinkedIn), AeroLeads и т.п.

Почти всегда такие сервисы имеют кучу звёздочек и примечаний в условиях использования. Они работают по модели посредника и снимают с себя все потенциальные риски, связанные с незаконными рассылками. Их основная задача – проверить email на существование, то есть повысить шансы успешности вашего контакта. Какими бы большими ни были их базы, они не могут объять необъятное. Почти всегда это небольшой срез в определённом сегменте или по конкретному сайту/площадке.

Второй тип онлайн-парсеров email – это реальные парсеры, какими они и должны быть. Их преимущества очевидны: вам не нужно самому ничего устанавливать, настраивать, интегрировать, следить за ошибками, обходить системы защиты и т.п. Здесь даже прокси уже встроенные.

Наиболее доступный нам пример – набор парсеров Froxy. У нас в ассортименте есть решения для скрапинга популярных eCommerce-площадок, социальных сетей и поисковиков. Никаких блокировок по IP, любые локации и регионы. Можно создавать задания по расписанию и получать оперативные уведомления о завершении процесса по web-хукам.

Способ 3. Написание своего парсера

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

Из минусов только то, что потребуются профильные знания и навыки. Естественно, без прокси тут тоже никак не обойтись.

Ниже рассмотрим пример того, как парсить email с помощью своего собственного парсера, написанного на Python.

Веб-скрейпинг email с использованием Python

Как и упоминалось выше, email-адрес имеет определённую структуру. Она выглядит вот так: логин@домен.зона.

В ру-сегменте допускается использование кириллических символов. Но в примере ниже мы разберём использование только латиницы (для упрощения и для наглядности, чтобы не усложнять код).

Выявление текстовых паттернов лучше всего реализуется за счёт regex-выражений.

Для email на латинице регулярное выражение будет выглядеть следующим образом:

pattern_email = re.compile(r'([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})')

Кстати, web-разработчики часто используют его для предварительной проверки форм, чтобы пользователи не вводили туда непонятно что.

За подробностями по функции re.compile() можно обратиться к официальной документации Python.

Чтобы задействовать парсинг HTML-документа в Python, нам нужно добавить библиотеки BeautifulSoup4 и HTTPX.

Для этого используем установщик pip:

pip install httpx bs4

Как будет выглядеть код для поиска всех ссылок mailto:

matches_email = soup.findAll("a", attrs={"href": re.compile("^mailto:")})

А так будет выглядеть поиск по всему коду, без ссылок mailto:

pattern_email = re.compile(r'([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})')

matches_email = re.findall(email_pattern, page_html)

Обратите внимание: операция прямого поиска без привязки к ссылкам будет выполняться дольше и будет потреблять больше ресурсов.

Фактически, строки выше – это ядро всех последующих операций парсинга.

Вот так может выглядеть пример итогового скрипта на Python:

import httpx

from bs4 import BeautifulSoup

import re

import json

def parse_site(main_url: str):

links = []

response = httpx.get(url=main_url)

bssoup = BeautifulSoup(response.text, "html.parser")

# Собираем список всех страниц сайта

for link_box in bssoup.select("div.info-section.info-primary"):

# Извлекаем ссылки, найденные на каждой странице, и добавляем к главному URL сайта

link = "https://www.your-site.com" + link_box.select_one("a").attrs["href"]

links.append(link)

return links

def parse_emails(links: list):

emails = {}

for link in links:

# Отправляем GET запрос к каждой новой ссылке в списке

page_response = httpx.get(url=link)

bssoup = BeautifulSoup(page_response.text, "html.parser")

# Достаём название компании (имя контакта)

company_name = bssoup.select_one("h1.dockable.business-name").text

# Находим все ссылки mailto и копируем из них текст с мылом

for link in bssoup.findAll("a", attrs={"href": re.compile("^mailto:")}):

# Достаём email-адреса из тегов с mailto

email = link.get("href").replace("mailto:", "")

# проверяем наличие компании в списке адресов и если записи ещё нет, то создаём новую

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")

# Собираем все имейлы на странице

emails = parse_emails(links)

# выводим результат в JSON формате

print(json.dumps(emails, indent=4))

В данном случае собираются все адреса, имеющие ссылку с атрибутом mailto. В списке будет выводиться email с названием компании, которой принадлежит электронная почта. Это будет своего рода готовая база контактов.

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

В нашем скрипте анализом структуры тегов занимается библиотека BeautifulSoup (официальная документация к ней).

Вам могут понадобиться и другие библиотеки для парсинга на Python.

Лучшие практики email-парсинга

Команды разработчиков, которые знают о том, что их страницы будут парситься на предмет поиска email-адресов, могут предпринимать дополнительные попытки защиты. К ним относятся:

  • Обфускация email (они кодируются встроенной функцией обфускации).
  • Склеивание email с помощью JavaScript.
  • Токенизация email (все email подменяются токенами).
  • Полноценное шифрование и расшифровывание email по требованию.
  • Вставка email в виде изображений.
  • Защита доступа к email с помощью отдельных проверок, например, ввода капчи.

И это, не считая стандартных схем защиты от парсинга: динамический код (подгрузка при помощи Ajax), блокировка автоматических запросов с одного IP, использование ссылок-ловушек и прочего.

Но мало просто спарсить email, важно проверить качество и работоспособность почтовых ящиков. Какие ещё практики есть в email-парсинге?

  • Важно следить за периодичностью запросов к страницам и не делать задержки одинаковыми. Равное время между запросами – это первый признак автоматического трафика.
  • Полученные email нужно проверять на валидность. Сделать это можно за счёт проверки их через специальные базы. Более сложный и затратный путь – попытка тестовой отправки писем и обработка ответов сервера. Так как в общедоступных email часто присутствуют ящики-ловушки, мы рекомендуем в обязательном порядке проверять списки адресов по базам и ни в коем случае не вести рассылки с основных почтовых серверов. В противном случае их могут заблокировать или понизить им рейтинг.
  • Вместе с email-адресами старайтесь собирать дополнительную контактную информацию: имя, название компании, сайт, где был найден email, и т.п.
  • Задействуйте в парсинге headless-браузеры. Они помогают обойти многие системы защиты, плюс, поддерживают работу динамических сайтов и загрузку сложных JS-скриптов.
  • Для обеспечения многопоточности подключайте ротационные прокси-серверы. Модель ротации IP при каждом новом запросе надёжно защищает от блокировок по IP.

Итоги и рекомендации

Как можно было заметить, все программы (профильный софт), а также самописные скрипты парсинга требуют интеграции с прокси-серверами. Если не пускать запросы через IP посредников, очень быстро можно схватить бан и попасть в чёрный список. Соответственно, парсинг целевого сайта становится невозможным.

Найти качественные резидентные и мобильные прокси можно в сервисе Froxy. Оплачиваются не конкретные IP-адреса, а только потребляемый трафик. Соответственно, ротировать IP можно бесконечно, хоть при каждом новом запросе.

Пул адресов Froxy – свыше 8,5 млн. IP. Точность подбора – до нужного города и оператора связи.

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