2014-01-07 5 views
0

Скребок новичка здесь. Я пытаюсь написать скребок с BeautifulSoup, который удаляет html-таблицы из электронных писем в учетной записи Gmail. Используя IMAP, скрипт проверяет входящие входящие сообщения с перерывами. Я не уверен, однако, как извлечь HTML из письма, которое необходимо для очистки таблиц. В настоящее время он извлекает основной текст, а не необработанный HTML:Скремблирование электронной почты HTML через IMAP

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 и затем найдите элемент в списке с типом MIME HTML-ish. Как правило, 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) 
Смежные вопросы