前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 抓取邮件中表格到Excel

Python 抓取邮件中表格到Excel

作者头像
Java架构师必看
发布2021-08-09 11:53:27
1.3K0
发布2021-08-09 11:53:27
举报
文章被收录于专栏:Java架构师必看

上代码

代码语言:javascript
复制
import imapclient
# 这个包导不进来,先导入 pyzmail36,下载好后再改回 pyzmail 即可
import pyzmail
from bs4 import BeautifulSoup
import pandas as pd
import xlsxwriter
import html5lib

# 提取邮件里面的表格
class my_eamil():
    """
        构造函数,创建一个类的入口
        self指的是类实例对象本身
        后面传入三个参数,即:邮箱地址、密码、邮件服务
        """
    def __init__(self, user, password, eamil_server):
        self.user = user
        # 此处密码是授权码,用于登录第三方邮件客户端
        self.password = password
        self.pop3_server = eamil_server

    # 获取邮件中的表格
    def get_taleStr(self):
        # 腾讯企业邮箱
        imapObj = imapclient.IMAPClient(eamil_server, ssl=True)
        # 邮箱和密码
        imapObj.login(user, password)
        # 默认收件箱
        imapObj.select_folder('INBOX', readonly=True)
        # 搜索未读邮件,打印未读邮件的UID
        UIDS = imapObj.search('UNSEEN')
        # print(UIDS)
        # UIDS = imapObj.search('ALL')#搜索全部的邮件
        if len(UIDS) >= 1:  # 存在未读邮件
            # 获得邮件内容
            rawMessage = imapObj.fetch(UIDS[0], [b'BODY[]'])
            # 选择第一封未读邮件
            messageObj = pyzmail.PyzMessage.factory(rawMessage[UIDS[0]][b'BODY[]'])
            # 打印邮件信息,可以根据这些信息进行筛选
            print('邮件主题', messageObj.get_subject())
            print('发件人', messageObj.get_addresses('from'))
            print('收件人', messageObj.get_addresses('to'))

            # 邮件内容不为空时
            if messageObj.html_part != None:
                messageContent = messageObj.html_part.get_payload().decode(messageObj.html_part.charset)
                # 设置邮件已读
                # imapObj.set_flags(rawMessage, b'\\Seen', silent=False)
            else:
                pass
        # 退出邮件
        imapObj.logout()
        # 如果邮件内容存在链接则返回链接,若不存在则直接下载邮件附件
        return messageContent

    # 邮件中的表格写入excel中
    def table_Excel(self, tableHtml, file_name):
        # 是指定Beautiful的解析器为“html.parser”
        soup = BeautifulSoup(tableHtml, 'html.parser')
        # 寻找所有的表格
        tables = soup.find_all('table')
        # excel 写入器
        writer = pd.ExcelWriter(file_name, engine='xlsxwriter')
        workbook = writer.book
        # 可遍历的数据对象
        for idx, table in enumerate(tables):
            # 定义sheet 名称
            sheet_name = 'Table-' + str(idx)
            # 获取 table 数据
            df_table = pd.read_html(str(table), header=0, flavor='bs4')[0]
            # table 数据 写入 Excel
            df_table.to_excel(writer, index=False, sheet_name=sheet_name)
            # 获取 sheet 对象
            worksheet = writer.sheets[sheet_name]
            # 设置表头样式
            header_fmt = workbook.add_format({'font_size': 14, 'bold': True, 'fg_color': '#D7E4BC', 'border': 1})
            # 写入表头
            for col_num, value in enumerate(df_table.columns.values):
                worksheet.write(0, col_num, value, header_fmt)
            # 调整列宽
            worksheet.set_column('A:Z', 25)
        # 保存文件
        writer.save()

# 开始执行
# 邮箱地址
user = ''
# 密码,若是163邮箱则使用客户端密码
password = ''
eamil_server = 'pop.exmail.qq.com'
file_name = "E:\\export.xlsx"
# 调用类
myEmail = my_eamil(user=user, password=password, eamil_server=eamil_server)
tableHtml = myEmail.get_taleStr()
myEmail.table_Excel(tableHtml, file_name)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯企业邮
腾讯企业邮(Tencent Exmail)是腾讯基于多年海量用户邮件系统研发和运营经验,为企业量身订造的一套办公用邮箱系统。稳定、简洁和快速,整合了丰富的企业应用,涵盖资源共享、消息发布、组织管理等方面。腾讯企业邮和微信生态深度整合,为您提供便捷高效的移动邮件解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档