2014-01-07 178 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) 
相關問題