如何在Python中制作电子邮件提取器?代码实现教程

2021年11月16日15:25:35 发表评论 968 次浏览

Python如何制作电子邮件提取器?本文教你构建一个 Python 工具,使用 Python 中的 requests-html 库和正则表达式自动提取任何网页中的电子邮件地址。

电子邮件提取器或收割机是一种用于从生成大量地址列表的在线和离线来源中提取电子邮件地址的软件。尽管这些提取器可以用于多种合法目的,例如营销活动,但不幸的是,它们主要用于发送垃圾邮件和网络钓鱼电子邮件。

如何在Python中制作电子邮件提取器?由于当今网络是 Internet 上的主要信息来源,因此在本教程中,你将学习如何使用 Python 构建这样一个工具,以使用requests-html库从网页中提取电子邮件地址。

由于许多网站使用JavaScript加载数据而不是直接呈现 HTML 代码,因此我选择了requests-html库,因为它支持 JavaScript 驱动的网站。

相关: 如何使用 smtplib 模块在 Python 中发送电子邮件。

Python制作电子邮件提取器示例:好的,让我们开始吧,我们需要先安装requests-html:

pip3 install requests-html

让我们开始编码:

import re
from requests_html import HTMLSession

我们在这里需要re模块,因为我们将使用正则表达式从 HTML 内容中提取电子邮件,如果你不确定正则表达式是什么,它基本上是定义搜索模式的字符序列(查看本教程了解详细信息)。

我从这个 stackoverflow answer 中获取了最常用和最准确的电子邮件地址正则表达式:

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])+)\])"""

我知道,它很长,但这是迄今为止最好的,它定义了电子邮件地址的一般表达方式。

url字符串是我们想要从中获取电子邮件地址的URL,我正在使用一个生成随机电子邮件地址的网站(使用 Javascript 加载它们)。

让我们启动 HTML 会话,它是一个用于 cookie 持久化和连接池的消耗性会话:

# initiate an HTTP session
session = HTMLSession()

现在让我们向URL发送GET请求:

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

Python如何制作电子邮件提取器?如果你确定要从中获取电子邮件地址的网站使用 JavaScript 加载大部分数据,那么你需要执行以下代码行:

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

这将在Chromium 中重新加载网站, 并用更新的版本替换 HTML 内容,并执行 Javascript。当然,这样做需要一些时间,这就是为什么只有当网站使用 JavaScript 加载其数据时才需要执行此操作。

注意:第一次执行render()方法会自动为你下载 Chromium,所以这需要一些时间。

Python制作电子邮件提取器示例 - 现在我们有了 HTML 内容和我们的电子邮件地址正则表达式,让我们开始吧:

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

如何在Python中制作电子邮件提取器?re.finditer()方法在字符串中的所有非重叠匹配项上返回一个迭代器。对于每个匹配项,迭代器返回一个匹配对象,这就是我们使用group()方法访问匹配字符串(电子邮件地址)的原因。

这是我执行的结果:

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

Python如何制作电子邮件提取器?只需几行代码,我们就可以从我们想要的任何网页中获取电子邮件地址!

你可以扩展此代码来构建一个爬虫来提取所有网站的网址小号,你会发现每一页上运行它,然后保存他们的文件。但是,有些网站会发现你是机器人而不是人类浏览网站,因此它会阻止你的 IP 地址,在这种情况下你需要使用代理服务器。在下面的评论中让我们知道你对此做了什么!

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: