我正在尝试在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]这个脚本运行得很好,但是我得到一些随机的"=“和一个"<= /td>”插入到表中。这是一个包含黄色错误的数据框输出示例

以下是原始电子邮件表的示例:

我认为错误出在IMAPClient命令中(而不是BS解析或pandas中),因为如果我检查"body“变量中的超文本标记语言,我会发现错误已经存在。
我做错了什么?谢谢
发布于 2021-12-01 18:45:58
如果有人需要它,下面的代码运行得很好:
imap = imaplib.IMAP4_SSL('imap.gmail.com')
imap.login(username, password)
imap.select("inbox")
resp, items = imap.search(None, '(FROM "xxxx@xxxxxxxxx.com")')
for n, num in enumerate(items[0].split(), 1):
resp, data = imap.fetch(num, '(RFC822)')
body = data[0][1]
msg = email.message_from_bytes(body)
content = msg.get_payload(decode=True)
soup = BeautifulSoup(content)
table = soup.find_all('table')
df = pd.read_html(str(table))[0]https://stackoverflow.com/questions/70188636
复制相似问题