【发布时间】:2022-01-08 07:20:51
【问题描述】:
我正在尝试在 python 中导入电子邮件中的 HTML 表格。
我尝试了以下脚本:
HOST = 'imap.gmail.com'
USERNAME = username
PASSWORD = password
ssl = True
server = IMAPClient(HOST, use_uid=True, ssl=ssl)
server.login(USERNAME, PASSWORD)
select_info = server.select_folder('INBOX')
messages = server.search(['FROM', sender_address])
if len(messages) > 0:
for mail_id, data in server.fetch(messages,['ENVELOPE','BODY[TEXT]']).items():
envelope = data[b'ENVELOPE']
body = data[b'BODY[TEXT]']
soup = BeautifulSoup(body)
table = soup.find_all('table')
df = pd.read_html(str(table))[0]
脚本运行良好,但我在表格中插入了一些随机“=”和“”。 这是带有黄色错误的数据帧输出示例
我认为错误在于 IMAPClient 命令(而不是 BS 解析或 pandas),因为如果我检查“body”变量中的 HTML,我会发现错误已经存在。
我做错了什么?谢谢
【问题讨论】:
-
您不是对消息进行 MIME 解码。电子邮件经过编码以便传输。这些额外的 = 是 Quoted Printable 编码的一部分,用于使其符合 7 位 ascii 和 78 个字符行的标准电子邮件限制。请参阅 python 中的电子邮件/MIME 模块,或者 IMAPClient 可能有帮助方法来为您进行解析和解码。
-
试试我的github.com/ikvk/imap_tools,让我知道结果
标签: python html imap imapclient