2014-01-07 81 views
0

在这里刮新手。我试图用BeautifulSoup编写一个刮板来从Gmail帐户中的电子邮件中删除html表格。使用IMAP,脚本会间歇性地检查收件箱。我不确定如何从电子邮件中提取HTML,这是抓取表所需的。目前,它提取正文,而不是原始HTML:通过IMAP刮邮件HTML

m.select("[Gmail]/All Mail") 

resp, items = m.search(None, "ALL") 
items = items[0].split() 
for emailid in items: 
    resp, data = m.fetch(emailid, "(RFC822)") 
    email_body = data[0][1] # getting the mail content 
    mail = email.message_from_string(email_body) 
    soup = BeautifulSoup(mail) 
    tables = soup.find_all("table", width=900) 
    ... 
+0

不能回答这个把我的头顶部,但你可能想http://docs.python.org/2/library/email.message.html#email.message.Message.get_payload和然后使用HTML-ish MIME类型查找列表中的项目。通常,HTML电子邮件是包含HTML和纯文本的多部分邮件,因此,如果BeautifulSoup使用当前代码查看“错误”格式,则需要查找正确的格式。 –

+0

你需要获取(BODY [1])或(BODY [2])左右,然后qp解码。在你的情况下,你可能只是从1开始并向上循环,直到你点击HTML。 – arnt

回答

1

谢谢你们!我发现一个非常简单的解决方案后,我意识到HTML仍然被提取,正文后。

for emailid in items: 
    resp, data = m.fetch(emailid, "(RFC822)") # fetching the mail, "`(RFC822)`" means "get the whole stuff", but you can ask for headers only, etc 
    email_body = data[0][1] # getting the mail content 
    start = email_body.find('<div'); 
    email = email_body[start:] 
    soup = BeautifulSoup(email) 
相关问题