dark proxyscrape logo

Scraping Email Addresses Using Python - Ultimate Guide 2024 (en anglais)

Python, Scraping, Déc-02-20225 minutes de lecture
La possession d'une liste d'adresses électroniques peut aider les spécialistes du marketing à développer leurs activités. En récupérant les adresses électroniques à l'aide de scripts Python, les professionnels peuvent mieux atteindre leur public. 
MailButler.io indique qu'il y a près de 4,3 milliards d'utilisateurs de courrier électronique dans le monde et qu'on estime qu'ils seront 4,6 milliards en 2025. Ces statistiques indiquent que les gens comptent principalement sur la plateforme de courrier électronique pour leur mode de communication officiel. Cet article vous guidera dans le processus de récupération d'adresses électroniques à l'aide du langage python. 

Table des matières

Récupération d'adresses électroniques à l'aide de Python

L'un des moyens les plus simples d'avoir une bonne clientèle est de disposer d'un maximum d'adresses électroniques professionnelles et de leur envoyer régulièrement les détails de vos services. Il existe de nombreux outils de scraping sur l'internet qui fournissent ces services gratuitement, mais ils ont des limites de données de retrait. Ils offrent également des limites d'extraction de données illimitées, mais ils sont payants. Pourquoi les payer alors que vous pouvez en construire un de vos propres mains ? Discutons des étapes pour construire un outil de scraping de qualité en utilisant Python. 

Articles connexes

Étapes pour récupérer des adresses électroniques

Bien qu'il s'agisse d'un exemple très simple pour les débutants, il s'agira d'une expérience d'apprentissage, en particulier pour ceux qui sont novices dans le domaine du web scraping. Il s'agit d'un tutoriel étape par étape qui vous aidera à obtenir des adresses électroniques sans aucune limite. Commençons par le processus de construction de notre scraper web intelligent.

Étape 1 : Importation des modules

Nous utiliserons les six modules suivants pour notre projet.

import re
import requests
from urllib.parse import urlsplit
from collections import de que
from bs4 import BeautifulSoup
import pandas as pd
from google.colab import files

Les détails des modules importés sont donnés ci-dessous :

  1. re correspond à la recherche d'expressions régulières.
  2. pour l'envoi de requêtes HTTP.
  3. urlsplit pour diviser les URL en plusieurs parties.
  4. deque est un conteneur qui se présente sous la forme d'une liste utilisée pour ajouter et retirer des éléments à chaque extrémité.
  5. BeautifulSoup pour extraire des données des fichiers HTML de différentes pages web.
  6. pandas pour le formatage des courriels en DataFrame et pour d'autres opérations.

Étape 2 : Initialisation des variables

Dans cette étape, nous allons initialiser un deque qui enregistrera les URL scrappés, les URL non scrappés et un ensemble d'emails de sauvegarde scrappés avec succès à partir des sites web.

# lire l'url à partir de l'entrée
original_url = input("Entrez l'url du site web : ") 
 
# pour sauvegarder les urls à gratter
unscraped = deque([original_url])
 
# pour sauvegarder les urls scrappées
scraped = set()
 
# pour sauvegarder les emails récupérés
emails = set()  

Les éléments en double ne sont pas autorisés dans un ensemble, de sorte qu'ils sont tous uniques.

Étape 3 : Démarrer le processus de récupération

  1. La première étape consiste à faire la distinction entre les URL raclées et les URL non raclées. Pour ce faire, il suffit de faire passer une URL de la catégorie "non scrapée" à la catégorie "scrapée".
while len(unscraped) :
    # déplacer unsraped_url vers scraped_urls set
    url = unscraped.popleft() # popleft() : Enlève et renvoie un élément du côté gauche du deque
    scraped.add(url)
  1. L'étape suivante consiste à extraire les données des différentes parties de l'URL. Pour ce faire, nous utiliserons urlsplit.
parts = urlsplit(url)

urlsplit() renvoie un 5-tuple : (schéma d'adressage, emplacement du réseau, chemin, requête, fragment, identifiant).

Je ne peux pas montrer d'exemples d'entrées et de sorties pour urlsplit() pour des raisons de confidentialité, mais une fois que vous aurez essayé, le code vous demandera d'entrer une valeur (l'adresse du site web). La sortie affichera le SplitResult(), et à l'intérieur du SplitResult() il y aura cinq attributs.

Cela nous permettra d'obtenir la base et le chemin d'accès de l'URL du site web.

base_url = "{0.scheme}://{0.netloc}".format(parts)
    if '/' in parts.path:
      path = url[:url.rfind('/')+1]
    else:
      path = url
  1. C'est le moment d'envoyer la requête HTTP GET au site web.
essayer :
        response = requests.get(url)
    except (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError) :
        # ignore les pages avec des erreurs et continue avec l' url suivante 
       continuer
  1. Pour extraire les adresses électroniques, nous utiliserons l'expression régulière, puis nous les ajouterons à l'ensemble d'adresses électroniques.
# Vous pouvez modifier l'expression régulière en fonction de vos besoins
    new_emails = set(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.com", 
                  response.text, re.I)) # re.I : (ignorer la casse)
    emails.update(new_emails)
Les expressions régulières sont d'une aide précieuse lorsque vous souhaitez extraire les informations de votre choix. Si vous n'êtes pas à l'aise avec elles, vous pouvez consulter Python RegEx pour plus de détails.
  1. L'étape suivante consiste à trouver toutes les URL liées au site web.
# créer une belle soupe pour le document 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.

pour anchor dans soup.find_all("a") : 
        
       # extrait l'url liée de l'ancre
        if "href" in anchor.attrs :
          link = anchor.attrs["href"]
        else :
          link = ''
        
       # résoudre les liens relatifs (commençant par /)
        if link.startswith('/') :
            link = base_url + link
            
        elif not link.startswith('http') :
            link = path + link

Ensuite, nous trouverons les nouvelles URL et les ajouterons à la file d'attente des URL non raclées si elles ne se trouvent ni dans les URL raclées ni dans les URL non raclées.

Si vous essayez le code par vous-même, vous remarquerez que tous les liens ne peuvent pas être scannés, et que nous devons donc les exclure,

if not link.endswith(".gz" ) :
         si pas de lien dans unscraped et pas de lien dans scraped :
              unscraped.append(link)

Étape 4 : Exportation des courriels vers un fichier CSV

Pour mieux analyser les résultats, nous allons exporter les courriels vers un fichier CSV.

df = pd.DataFrame(emails, columns=["Email"]) # remplacer par le nom de colonne que vous préférez
df.to_csv('email.csv', index=False)

Si vous utilisez Google Colab, vous pouvez télécharger le fichier sur votre machine locale en procédant comme suit

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

Comme je l'ai déjà expliqué, je ne peux pas montrer les adresses électroniques supprimées pour des raisons de confidentialité. 

[Avis de non-responsabilité ! Certains sites web ne permettent pas de faire du web scraping et ont des robots très intelligents qui peuvent bloquer votre IP de façon permanente, donc faites du scrape à vos risques et périls].

Code complet

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

proxys dans Scraping Email Addresses

Les entreprises ayant besoin de nombreuses adresses électroniques pour constituer leur liste de contacts, il est nécessaire de collecter des données à partir de sources multiples. Un processus manuel de collecte de données peut être fastidieux et prendre beaucoup de temps. Dans ce cas, les scrappeurs optent généralement pour proxys afin d'accélérer le processus et de contourner les restrictions qui leur sont imposées. Proxyscrape fournit des proxys à large bande passante capables de collecter un nombre illimité de données et de fonctionner 24 heures sur 24, 7 jours sur 7, afin d'assurer un fonctionnement ininterrompu. Le niveau d'anonymat de leur proxy est suffisamment élevé pour dissimuler l'identité des "scrapers". 

Questions fréquemment posées

1. Pourquoi est-il nécessaire de rechercher des adresses électroniques ?

La création d'une liste de contacts potentiels contenant des adresses électroniques qualifiées facilitera le processus d'atteinte du public cible. Comme la plupart des gens utilisent le courrier électronique comme moyen de communication, il est plus facile de les atteindre par ce biais. 

2. Avons-nous besoin de proxys pour récupérer les adresses électroniques ?

Lorsqu'ils récupèrent les adresses électroniques de plusieurs sources, les scrappeurs peuvent être confrontés à des problèmes tels que des blocages d'IP ou des barrières géographiques. Dans ce cas, proxys cachera les adresses des utilisateurs avec l'adresse proxy et éliminera les obstacles à l'accès aux sites web bloqués. 

3. Est-il légal de récupérer des adresses électroniques ? 

Il est toujours légal de collecter des données accessibles au public. Les racleurs doivent donc s'assurer que les données qu'ils collectent sont disponibles dans le domaine public. Si ce n'est pas le cas, ils peuvent collecter des données avec une autorisation préalable afin de maintenir la légalité du scraping. 

Conclusion

Dans cet article, nous avons exploré une autre merveille du web scraping en montrant un exemple pratique de scraping d'adresses email. Nous avons essayé l'approche la plus intelligente en utilisant Python et la bibliothèque la plus simple et pourtant la plus puissante appelée BeautfulSoup. L'exploration du Web peut être d'une grande aide si elle est effectuée correctement en tenant compte de vos besoins. Bien que nous ayons écrit un code très simple pour récupérer les adresses email, il est totalement gratuit, et vous n'avez pas besoin de compter sur d'autres services pour cela. J'ai fait de mon mieux pour simplifier le code autant que possible et j'ai également ajouté de la place pour la personnalisation afin que vous puissiez l'optimiser en fonction de vos propres besoins. 

Si vous cherchez des services proxy à utiliser lors de vos projets de scraping, n'oubliez pas de consulter ProxyScrape residential et premium proxys