Python 抓取邮件中表格到Excel

上代码

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)

 

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值