从电子邮件中提取邮件,但返回草率的文本段落

时间:2016-10-31 04:25:11

标签: python html email beautifulsoup

所以我创建了一个方法去除电子邮件页面的html,样式/脚本标签和新行标签的源代码:

def extract_message(url):
    markup = open(url)
    soup = BeautifulSoup(markup, "html.parser")
    for script in soup(["script", "style"]): script.extract()
    text = soup.get_text()
    text_clean = re.sub(r"\n", " ", text)
    text_clean_more = text_clean.replace(u'\xa0', u' ')
    a = text_clean_more.find('From:')
    print (text_clean[a:])

然后,我从电子邮件中的“发件人:”实例返回所有内容,一直到电子邮件的结尾。然而,在经历了这个过程之后,我得到了一个非常分散的整体文字通道,例如:

enter image description here

我的目标是打印出干净的文字段落。无论如何我能做到这一点吗?我已经用这几个小时震撼了我的大脑,并且根本没有提出任何理性的东西。只是想朝着正确的方向努力,谢谢。

2 个答案:

答案 0 :(得分:1)

使用模块email提取邮件正文,而不是手动将它们分开。使用模块textwrap将消息文本格式化为漂亮的段落。这可能会奏效:

paras = rawtext.split("\n\n")  # Split into paragraphs, if any
formatted = "\n\n".join(textwrap.fill(p) for p in paras)

但请查看textwrap documentation您可以指定的关键字选项。

答案 1 :(得分:0)

正则表达式 - 剥离空格但保留新行(或CRLF)