使用 Python 抓取电子邮件地址 - 终极指南 2024

蟒蛇, 搜索, Dec-13-20225 分钟阅读

拥有电子邮件潜在客户名单可以帮助营销人员扩大业务。通过使用 Python 脚本搜索电子邮件地址,商务人士可以更好地与受众联系。 MailButler.io 表示,全球有近 43 亿电子邮件用户,预计到 2025 年将达到 46 亿。这些统计数据表明,人们

拥有电子邮件潜在客户名单可以帮助营销人员扩大业务。通过使用 Python 脚本搜索电子邮件地址,营销人员可以更好地拓展业务。 

MailButler.io 称,全球有近43 亿电子邮件用户,预计到 2025 年将达到 46 亿。这些统计数据表明,人们大多依赖电子邮件平台进行官方交流。本文将指导你如何使用 python 语言搜索电子邮件地址。 

目录

使用 Python 搜索电子邮件地址

拥有好客户的最简单方法之一就是拥有尽可能多的企业电子邮件地址,并一次又一次地向他们发送您的服务详情。互联网上有许多免费提供这些服务的刮擦工具,但它们有撤回数据的限制。它们也提供无限数据提取限制,但都是付费的。既然可以自己动手制作,为什么还要付费呢?让我们讨论一下使用 Python 构建高质量搜索工具的步骤。 

相关文章

最佳 Python 网络抓取工具 

如何用 Python 创建代理

抓取电子邮件地址的步骤

虽然对于初学者来说,这只是一个非常简单的示例,但它将是一个学习的过程,尤其是对于那些初次接触网络搜刮的人来说。这将是一个循序渐进的教程,帮助你无限制地获取电子邮件地址。让我们从智能网络搜刮器的构建过程开始。

步骤 1:导入模块

我们的项目将使用以下六个模块。

导入re
导入请求
fromurllib.parseimporturlsplit
fromcollectionsimportdeque
frombs4importBeautifulSoup
importpandasaspd
fromgoogle.colabimportfiles

进口模块详情如下:

re 用于正则表达式匹配;re requests 用于发送 HTTP 请求;urlsplit 用于将 URL 分割成不同的部分;deque 是一个列表形式的容器,用于在两端添加和弹出;BeautifulSoup 用于从不同网页的 HTML 文件中提取数据;pandas 用于将电子邮件格式化为 DataFrame 并进行进一步操作。

步骤 2:初始化变量

在这一步中,我们将初始化一个 deque,该 deque 将保存从网站成功抓取的已抓取 URL、未抓取 URL 和一组保存电子邮件。

# 从输入中读取网址
original_url= input("输入网站网址:") 
 
# 保存待抓取的网址
unscraped= deque([original_url])
 
# 保存已抓取的网址
scraped= set()
 
# 保存获取的电子邮件
电子邮件= set()  

集合中不允许有重复的元素,因此它们都是唯一的。

步骤 3:开始扫描过程

第一步是区分已抓取和未抓取的 URL。具体方法是将 URL 从未清零转为已清零。

whilelen(unscraped):
    # 将 unscraped_url移到scraped_urls设置中
    url = unscraped.popleft() # popleft():deque 左侧移除 返回一个元素
    scraped.add(url)

下一步是从 URL 的不同部分提取数据。为此,我们将使用 urlsplit。

部件 =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

此时向网站发送 HTTP GET 请求。

try:
        response = requests.get(url)
    except (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
        # 忽略错误的页面 继续 下一个url
       继续

为了提取电子邮件地址,我们将使用正则表达式,然后将它们添加到电子邮件集。

# 您可以根据需要编辑正则表达式
    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了解更多详情。

下一步是找到网站的所有链接 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 insoup.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

然后,我们将找到新的 URL,如果它们既不在已抓取队列中,也不在未抓取队列中,则将它们添加到未抓取队列中。

当你自己尝试这段代码时,你会发现并不是所有的链接都能被抓取,因此我们还需要将它们排除在外、

if not link.endswith(".gz"):
         if not link inunscrapedand not link inscraped:
              unscraped.append(link)

第 4 步:将电子邮件导出为 CSV 文件

为了更好地分析结果,我们将把电子邮件导出为 CSV 文件。

df = pd.DataFrame(emails,columns=["Email"]) # 替换您喜欢的列名
df.to_csv('email.csv',index=False)

如果您使用的是 Google Colab,可以通过以下方式将文件下载到本地计算机

google.colab 导入文件
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 提供高带宽代理服务器,能够搜索无限量数据,并全天候工作,确保功能不间断。他们的代理匿名级别很高,足以隐藏搜刮者的身份。 

常见问题

1.为什么需要搜索电子邮件地址?

创建一份包含合格电子邮件地址的潜在联系人名单,可以简化与目标受众联系的过程。由于大多数人都使用电子邮件作为沟通媒介,因此通过电子邮件地址联系他们会更加容易。 

2.我们是否需要代理来搜索电子邮件地址?

在从多个来源抓取电子邮件地址时,抓取者可能会面临一些挑战,如 IP 屏蔽或地理障碍。在这种情况下,代理服务器会用代理地址隐藏用户地址,消除访问被屏蔽网站的障碍。 

3.搜索电子邮件地址合法吗? 

收集公开数据始终是合法的。因此,搜刮者必须确保他们收集的数据在公共领域可用。如果不是,他们可以在事先获得许可的情况下收集数据,以保持刮擦的合法性。 

总结

在这篇文章中,我们通过展示一个搜索电子邮件地址的实用示例,探索了网络搜索的另一个奥秘。我们尝试了最智能的方法,使用 Python 制作网络爬虫,它是最简单但功能最强大的库,名为 BeautfulSoup。如果考虑到您的需求,网络爬虫可以为您提供巨大的帮助。虽然我们编写了非常简单的代码来抓取电子邮件地址,但这是完全免费的,而且你也不需要依赖其他服务。我尽力简化了代码,并增加了定制空间,以便您根据自己的要求进行优化。 

如果您正在寻找代理服务,请不要忘记查看ProxyScrape 住宅代理高级代理。