темный логотип proxyscrape

Скраппинг адресов электронной почты с помощью Python - Ultimate Guide 2024

Python, Скрапинг, Дек-02-20225 минут чтения
Владение списком адресов электронной почты может помочь маркетологам расширить свой бизнес. Сокращая адреса электронной почты с помощью скриптов Python, бизнесмены могут улучшить работу со своей аудиторией. 
По данным MailButler.io, во всем мире насчитывается около 4,3 миллиарда пользователей электронной почты, а к 2025 году их число достигнет 4,6 миллиарда. Эта статистика говорит о том, что люди в основном полагаются на платформу электронной почты в качестве официального способа общения. В этой статье мы расскажем вам о том, как перебирать адреса электронной почты с помощью языка python. 

Оглавление

Скраппинг адресов электронной почты с помощью Python

Один из самых простых способов получить хорошую клиентуру - иметь как можно больше адресов электронной почты для бизнеса и раз за разом отправлять им информацию о своих услугах. В интернете существует множество инструментов для скраппинга, которые предоставляют эти услуги бесплатно, но имеют лимиты на извлечение данных. Они также предлагают неограниченные лимиты на извлечение данных, но они платные. Зачем платить, если можно создать такой инструмент своими руками? Давайте обсудим шаги по созданию качественного инструмента для скраппинга с помощью Python. 

Похожие статьи

Шаги по соскабливанию адресов электронной почты

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

Шаг 1: Импорт модулей

В нашем проекте мы будем использовать следующие шесть модулей.

импорт ре
импортировать запросы
from urllib.parse import urlsplit
из collections import deque
из bs4 import BeautifulSoup
import pandas as pd
из google.colab import files

Ниже приведена подробная информация об импортированных модулях:

  1. re - для сопоставления регулярных выражений.
  2. запросы для отправки HTTP-запросов.
  3. urlsplit для разделения URL на составные части.
  4. deque - это контейнер в виде списка, который используется для добавления и выгрузки с обоих концов.
  5. BeautifulSoup для извлечения данных из HTML-файлов различных веб-страниц.
  6. pandas для форматирования писем в DataFrame и для дальнейших операций.

Шаг 2: Инициализация переменных

На этом шаге мы инициализируем deque, в котором будут храниться отсканированные URL, неотсканированные URL и набор сохраненных электронных писем, успешно отсканированных с веб-сайтов.

# считывание url из ввода
original_url = input("Введите url сайта: ") 
 
# сохранить урлы для последующего скрапирования
unscraped = deque([original_url])
 
# для сохранения отскребленных урлов
scraped = set()
 
# для сохранения найденных писем
emails = set()  

Дублирование элементов в наборе не допускается, поэтому все они уникальны.

Шаг 3: Начало процесса скрапирования

  1. Первый шаг - отличить URL-адреса, подвергшиеся и не подвергшиеся обрезке. Для этого нужно перевести URL из разряда нескрепленных в разряд скрепленных.
while len(unscraped):
    # переместите unsraped_url в наборscraped_urls
    url = unscraped.popleft() # popleft(): Удаление и возврат элемента из левой части deque
    scraped.add(url)
  1. Следующий шаг - извлечение данных из разных частей URL. Для этого мы будем использовать urlsplit.
parts = urlsplit(url)

urlsplit() возвращает 5 кортежей: (схема адресации, сетевое расположение, путь, запрос, фрагмент, идентификатор).

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

Это позволит нам получить базовую часть и часть пути для URL-адреса веб-сайта.

base_url = "{0.scheme}://{0.netloc}".format(parts)
    if '/' in parts.path:
      path = url[:url.rfind('/')+1]
    else:
      path = url
  1. Это время для отправки HTTP GET-запроса на сайт.
пробовать:
        response = requests.get(url)
    except (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
        # игнорируем страницы с ошибками и продолжаем со следующего url
       продолжить
  1. Для извлечения адресов электронной почты мы воспользуемся регулярным выражением, а затем добавим их в набор адресов электронной почты.
# Вы можете изменить регулярное выражение в соответствии с вашими требованиями
    new_emails = set(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.com", 
                  response.text, re.I)) # re.I: (игнорируем регистр)
    emails.update(new_emails)
Регулярные выражения очень полезны, когда вы хотите извлечь информацию по своему усмотрению. Если вы еще не знакомы с ними, вы можете посмотреть на Python RegEx для получения более подробной информации.
  1. Следующий шаг - поиск всех URL-адресов, связанных с веб-сайтом.
# создайте красивый суп для html-документа
   soup = BeautifulSoup(response.text, 'lxml')

The <a href=””> tag indicates a hyperlink that can be used to find all the linked URLs in the document.

for anchor in soup.find_all("a"): 
        
       # извлекаем связанный url из якоря
        if "href" в anchor.attrs:
          link = anchor.attrs["href"]
        else:
          link = ''
        
       # разрешаем относительные ссылки (начинающиеся с /)
        if link.startswith('/'):
            link = base_url + link
            
        elif not link.startswith('http'):
            link = path + link

Затем мы найдем новые URL и добавим их в очередь нескрепленных, если их нет ни в скрэппированных, ни в нескреппированных.

Когда вы попробуете код самостоятельно, вы заметите, что не все ссылки могут быть соскоблены, поэтому нам также нужно исключить их,

если не link.endswith(".gz" ):
         если нет ссылки в unscraped и нет ссылки в scraped:
              unscraped.append(link)

Шаг 4: Экспорт писем в файл CSV

Чтобы лучше проанализировать результаты, мы экспортируем письма в CSV-файл.

df = pd.DataFrame(emails, columns=["Email"]) # замените название столбца на то, которое вам больше нравится
df.to_csv('email.csv', index=False)

Если вы используете Google Colab, вы можете загрузить файл на свой локальный компьютер следующим образом

из google.colab import files
files.download("email.csv")

Как уже объяснялось, я не могу показать вычеркнутые адреса электронной почты по соображениям конфиденциальности. 

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

Полный код

import re
import requests
from urllib.parse import urlsplit
from collections import deque
from bs4 import BeautifulSoup
import pandas as pd
from google.colab import files
 
# read url from input
original_url = input("Enter the website url: ") 
 
# to save urls to be scraped
unscraped = deque([original_url])
 
# to save scraped urls
scraped = set()
 
# to save fetched emails
emails = set()  
 
while len(unscraped):
    url = unscraped.popleft()  
    scraped.add(url)
 
    parts = urlsplit(url)
        
    base_url = "{0.scheme}://{0.netloc}".format(parts)
    if '/' in parts.path:
      path = url[:url.rfind('/')+1]
    else:
      path = url
 
    print("Crawling URL %s" % url)
    try:
        response = requests.get(url)
    except (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
        continue
 
    new_emails = set(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.com", response.text, re.I))
    emails.update(new_emails) 
 
    soup = BeautifulSoup(response.text, 'lxml')
 
    for anchor in soup.find_all("a"):
      if "href" in anchor.attrs:
        link = anchor.attrs["href"]
      else:
        link = ''
 
        if link.startswith('/'):
            link = base_url + link
        
        elif not link.startswith('http'):
            link = path + link

Прокси-серверы при скрапинге адресов электронной почты

Поскольку компаниям требуется множество адресов электронной почты для составления списка контактов, необходимо собирать данные из нескольких источников. Процесс ручного сбора данных может быть утомительным и отнимать много времени. В этом случае скраперы обычно прибегают к помощи прокси, чтобы ускорить процесс и обойти ограничения, которые возникают на их пути. Proxyscrape предоставляет прокси с высокой пропускной способностью, которые способны собирать неограниченное количество данных и работают 24/7, чтобы обеспечить бесперебойную работу. Уровень анонимности их прокси достаточно высок, чтобы скрыть личность скреперов. 

Часто задаваемые вопросы

1. Почему необходимо собирать адреса электронной почты?

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

2. Нужны ли нам прокси-серверы для поиска адресов электронной почты?

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

3. Законно ли скрести адреса электронной почты? 

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

Подведение итогов

В этой статье мы рассмотрели еще одно чудо веб-скраппинга, показав практический пример соскребания адресов электронной почты. Мы попробовали самый разумный подход, создав наш веб-краулер с помощью Python и самой простой и в то же время мощной библиотеки под названием BeautfulSoup. Веб-скраппинг может принести огромную пользу, если он сделан правильно, с учетом ваших требований. Хотя мы написали очень простой код для сбора адресов электронной почты, он совершенно бесплатен, и вам не нужно полагаться на другие сервисы для этого. Я постарался максимально упростить код, а также добавил возможности для настройки, чтобы вы могли оптимизировать его в соответствии со своими требованиями. 

Если вы ищете прокси-сервисы для использования в своих скрап-проектах, не забудьте посмотреть на ProxyScrape жилые и премиум-прокси