Comment faire un extracteur de courrier électronique en Python

Construire un outil Python pour extraire automatiquement des adresses électroniques dans n’importe quelle page Web en utilisant la bibliothèque requests-html et les expressions régulières en Python.

Un extracteur ou une moissonneuse-néant est un type de logiciel utilisé pour extraire des adresses électroniques de sources en ligne et hors ligne, qui génèrent une large liste d’adresses. Même si ces extracteurs peuvent servir à de multiples fins légitimes, comme les campagnes de marketing, malheureusement, ils sont principalement utilisés pour envoyer des spamming et des phishings.

Puisque le web est aujourd’hui la principale source d’informations sur Internet, dans ce tutoriel, vous apprendrez comment construire un tel outil en Python pour extraire des adresses électroniques à partir de pages web en utilisant la bibliothèque requests-html.

Parce que de nombreux sites web chargent leurs données en utilisant JavaScript au lieu de rendre directement du code HTML, j’ai choisi la bibliothèque requests-html car elle supporte les sites web pilotés par JavaScript.

Connexes: Comment envoyer des courriels en Python.

Bon, commençons, nous devons d’abord installer requests-html :

pip3 install requests-html

Commençons à coder:

import re
from requests_html import HTMLSession

Obtenez: Construisez des scripts et des outils de piratage éthique de 35 icots avec Python Book

Nous avons besoin de re module ici parce que nous allons extraire des e-mails du contenu HTML en utilisant des expressions régulières. Si vous n’êtes pas sûr de ce qu’est une expression régulière, c’est essentiellement une séquence de caractères qui définit un modèle de recherche (cochez ce tutoriel pour plus de détails).

J’ai saisi l’expression régulière la plus utilisée et la plus précise pour les adresses e-mail à partir de cette réponse de pileoverflow :

url = "https://www.randomlists.com/email-addresses"
EMAIL_REGEX = r"""(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])"""

Je sais que c’est très long, mais c’est le meilleur à ce jour qui définisse la manière dont les adresses électroniques sont exprimées d’une manière générale.

url string est l’URL dont nous voulons saisir les adresses e-mail. J’utilise un site web qui génère des adresses électroniques aléatoires (qui les charge à l’aide de Javascript).

Initions la session HTML, qui est une session consommable pour la persistance des cookies et la mise en commun des connexions:

# initiate an HTTP session
session = HTMLSession()

Maintenant, envoyons la demande GET à l’URL :

# get the HTTP Response
r = session.get(url)

Si vous êtes sûr que le site web que vous attrapez des adresses e-mail utilise JavaScript pour charger la plupart des données, alors vous devez exécuter la ligne de code ci-dessous :

# for JAVA-Script driven websites
r.html.render()

Connexes: Construire des scripts et des outils de piratage éthique de 35 scripts avec Python Book

Cela rechargera le site Web dans Chromium et remplacera le contenu HTML par une version mise à jour, avec Javascript exécuté. Bien sûr, il faudra du temps pour le faire. C’est pourquoi vous n’avez besoin de l’exécuter que si le site web charge ses données en utilisant JavaScript.

Remarque: Exécuter la méthode render() la première fois téléchargera automatiquement Chromium pour vous, donc il faudra un certain temps pour le faire.

Maintenant que nous avons le contenu HTML et notre expression régulière d’adresses de messagerie, faisons-le:

for re_match in re.finditer(EMAIL_REGEX, r.html.raw_html.decode()):
    print(re_match.group())

re.finditer() méthode retourne un itérateur sur toutes les correspondances non chevauchantes dans la chaîne. Pour chaque match, l’itérateur retourne un objet de concordance. C’est pourquoi nous accédons à la chaîne correspondante (l’adresse e-mail) en utilisant la méthode group().

Voici un résultat de mon exécution :

msherr@comcast.net
miyop@yahoo.ca
ardagna@yahoo.ca
tokuhirom@att.net
atmarks@comcast.net
isotopian@live.com
hoyer@msn.com
ozawa@yahoo.com
mchugh@outlook.com
sriha@outlook.com
monopole@sbcglobal.net
monopole@sbcglobal.net

Génial, seulement avec quelques lignes de code, nous avons pu attraper des adresses e-mail à partir de n’importe quelle page web que nous voulions.

Vous pouvez étendre ce code pour construire un crawler pour extraire toutes les URL du site web et l’exécuter sur chaque page que vous trouvez, puis vous les sauvegardez dans un fichier. Cependant, certains sites web découvriront que vous êtes un robot et non un homme qui navigue sur le site, donc il bloquera votre adresse IP. Vous devez utiliser un serveur proxy dans ce cas.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *