dark proxyscrape logotipo

Scraping Endereços de e-mail usando Python - Guia definitivo 2024

Python, Scraping, Dez-02-20225 minutos de leitura
Possuir uma lista de clientes potenciais de e-mail pode ajudar os profissionais de marketing a expandir seus negócios. Por meio de scraping endereços de e-mail usando scriptsPython, os empresários podem ter um alcance melhor para seu público. 
O MailButler.io afirma que há cerca de 4,3 bilhões de usuários de e-mail em todo o mundo, e estima-se que esse número chegue a 4,6 bilhões até 2025. Essas estatísticas dizem que as pessoas confiam principalmente na plataforma de e-mail para seu modo oficial de comunicação. Este artigo o guiará pelo processo de scraping endereços de e-mail usando a linguagem python. 

Índice

Scraping Endereços de e-mail usando Python

Uma das maneiras mais fáceis de ter uma boa clientela é ter o maior número possível de endereços de e-mail comerciais e enviar a eles os detalhes de seu serviço repetidamente. Existem muitas ferramentas scraping na Internet que fornecem esses serviços gratuitamente, mas elas têm limites de dados de retirada. Elas também oferecem limites ilimitados de extração de dados, mas são pagas. Por que pagá-las quando você pode criar uma com suas próprias mãos? Vamos discutir as etapas para criar uma ferramenta scraping de qualidade usando Python. 

Artigos relacionados

Etapas para Scrape Endereços de e-mail

Embora seja um exemplo muito simples para iniciantes, será uma experiência de aprendizado, especialmente para aqueles que são novatos na Web scraping. Este será um tutorial passo a passo que o ajudará a obter endereços de e-mail sem nenhum limite. Vamos começar com o processo de criação do nosso coletor de dados inteligente da Web.

Etapa 1: Importação de módulos

Usaremos os seis módulos a seguir em nosso projeto.

importar re
importar requests
from urllib.parse import urlsplit
from collections import deque
from bs4 import BeautifulSoup
importar pandas como pd
from google.colab import files

Os detalhes dos módulos importados são apresentados a seguir:

  1. re é para correspondência de expressões regulares.
  2. para o envio de solicitações HTTP.
  3. urlsplit para dividir os URLs em partes componentes.
  4. deque é um contêiner que tem a forma de uma lista usada para acrescentar e retirar em ambas as extremidades.
  5. BeautifulSoup para extrair dados de arquivos HTML de diferentes páginas da Web.
  6. pandas para formatação de e-mail em DataFrame e para outras operações.

Etapa 2: Inicialização de variáveis

Nesta etapa, inicializaremos um deque que salvará os URLs extraídos, os URLs não extraídos e um conjunto de e-mails salvos extraídos com êxito dos sites.

# ler a url da entrada
original_url = input("Enter the website url: ") 
 
# Para salvar as urls a serem extraídas
unscraped = deque([original_url])
 
# Para salvar as urls extraídas
scraped = set()
 
# Para salvar os e-mails obtidos
emails = set()  

Não são permitidos elementos duplicados em um conjunto, portanto, todos eles são exclusivos.

Etapa 3: Iniciando o processo Scraping

  1. A primeira etapa é distinguir entre os URLs raspados e os não raspados. A maneira de fazer isso é mover um URL de não raspado para raspado.
while len(unscraped):
    # move unsraped_url para scraped_urls set
    url = unscraped.popleft() # popleft(): Remove e retorna um elemento do lado esquerdo do deque
    scraped.add(url)
  1. A próxima etapa é extrair dados de diferentes partes do URL. Para isso, usaremos o urlsplit.
partes = urlsplit(url)

urlsplit() retorna uma tupla de 5: (esquema de endereçamento, local de rede, caminho, consulta, fragmento, identificador).

Não posso mostrar exemplos de entradas e saídas para urlsplit() por motivos de confidencialidade, mas, se você tentar, o código solicitará que você insira algum valor (endereço do site). A saída exibirá o SplitResult() e, dentro do SplitResult(), haverá cinco atributos.

Isso nos permitirá obter a base e a parte do caminho para o URL do site.

base_url = "{0.scheme}://{0.netloc}".format(parts)
    if '/' in parts.path:
      path = url[:url.rfind('/')+1]
    else:
      path = url
  1. Esse é o momento de enviar a solicitação HTTP GET para o site.
tente:
        response = requests.get(url)
    exceto (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
        # ignore as páginas com erros e continue com a próxima url
       continuar
  1. Para extrair os endereços de e-mail, usaremos a expressão regular e, em seguida, os adicionaremos ao conjunto de e-mails.
# Você pode editar a expressão regular de acordo com sua necessidade
    new_emails = set(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.com", 
                  response.text, re.I)) # re.I: (ignorar caso)
    emails.update(new_emails)
As expressões regulares são de grande ajuda quando você deseja extrair as informações de sua própria escolha. Se não estiver familiarizado com elas, dê uma olhada em Python RegEx para obter mais detalhes.
  1. A próxima etapa é localizar todos os URLs vinculados ao site.
# criar uma sopa bonita para o documento 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"): 
        
       # extrair o URL vinculado da âncora
        if "href" in anchor.attrs:
          link = anchor.attrs["href"]
        else:
          link = ''
        
       # resolver links relativos (começando com /)
        if link.startswith('/'):
            link = base_url + link
            
        elif not link.startswith('http'):
            link = path + link

Em seguida, encontraremos os novos URLs e os adicionaremos à fila de não raspados se eles não estiverem na fila de raspados nem na de não raspados.

Ao testar o código por conta própria, você perceberá que nem todos os links podem ser extraídos, portanto, também precisamos excluí-los,

if not link.endswith(".gz" ):
         if not link in unscraped and not link in scraped:
              unscraped.append(link)

Etapa 4: Exportação de e-mails para um arquivo CSV

Para analisar os resultados de uma maneira melhor, exportaremos os e-mails para o arquivo CSV.

df = pd.DataFrame(emails, columns=["Email"]) # substitua pelo nome da coluna de sua preferência
df.to_csv('email.csv', index=False)

Se você estiver usando o Google Colab, poderá fazer o download do arquivo em seu computador local

from google.colab import files
files.download("email.csv")

Como já explicado, não posso mostrar os endereços de e-mail descartados devido a questões de confidencialidade. 

[Isenção de responsabilidade! Alguns sites não permitem a navegação na web scraping e possuem bots muito inteligentes que podem bloquear permanentemente seu IP, portanto, scrape por sua própria conta e risco].

Código completo

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

Proxies em Scraping Endereços de e-mail

Como as empresas precisam de vários endereços de e-mail para criar sua lista de contatos, é necessário coletar dados de várias fontes. Um processo manual de coleta de dados pode ser tedioso e demorado. Nesse caso, os raspadores geralmente optam pelo proxies para acelerar o processo e contornar as restrições que surgem em seu caminho. O Proxyscrape fornece proxies de alta largura de banda que são capazes de scraping dados ilimitados e funcionam 24 horas por dia, 7 dias por semana, para garantir funcionalidade ininterrupta. O nível de anonimato do proxy é alto o suficiente para ocultar a identidade dos scrapers. 

Perguntas frequentes

1. Por que é necessário scrape endereços de e-mail?

A criação de uma lista de contatos em potencial com endereços de e-mail qualificados facilitará o processo de contato com o público-alvo. Como a maioria das pessoas usa o e-mail como meio de comunicação, é muito mais fácil entrar em contato com elas por meio de endereços de e-mail. 

2. Precisamos de proxies para os endereços de e-mail scraping ?

Enquanto scraping os endereços de e-mail de várias fontes, os raspadores podem enfrentar alguns desafios, como bloqueios de IP ou barreiras geográficas. Nesse caso, o proxies ocultará os endereços dos usuários com o endereço proxy e removerá os bloqueios no acesso a sites bloqueados. 

3. É legal scrape endereços de e-mail? 

É sempre legal coletar dados disponíveis publicamente. Portanto, os scrapers devem se certificar de que os dados que estão coletando estão disponíveis em domínio público. Caso contrário, eles podem coletar dados com permissão prévia para manter a legalidade em scraping. 

Concluindo

Neste artigo, exploramos mais uma maravilha da Web scraping mostrando um exemplo prático de endereços de e-mail scraping . Tentamos a abordagem mais inteligente ao criar nosso rastreador da Web usando Python, que é a biblioteca mais fácil e, ainda assim, mais avançada, chamada BeautfulSoup. O site Scraping pode ser de grande ajuda se for feito corretamente, considerando seus requisitos. Embora tenhamos escrito um código muito simples para scraping endereços de e-mail, ele é totalmente gratuito e você não precisa depender de outros serviços para isso. Fiz o possível para simplificar o código o máximo possível e também adicionei espaço para personalização para que você o otimize de acordo com seus próprios requisitos. 

Se estiver procurando por serviços proxy para usar em seus projetos scraping , não se esqueça de dar uma olhada em ProxyScrape residential e premium proxies