【问题标题】:How to parse HTML from eMail body - Python如何从电子邮件正文中解析 HTML - Python
【发布时间】:2013-07-12 13:33:27
【问题描述】:

我正在尝试在 python 中解析传入的电子邮件。 我收到的电子邮件是部分文本部分 HTML。 我想获取 HTML 部分并在 HTML 中找到一个表格。

我尝试使用 beatifulsoup。但是在尝试下一个代码时,bs 只得到第一个 "" 部分而不是所有 HTML 部分:

# connecting to the gmail imap server
m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login(user,pwd)
# use m.list() to get all the mailboxes, "INBOX" to get only inbox
m.select("INBOX")
resp, items = m.search(None, '(UNSEEN)') # you could filter using the IMAP rules here (check http://www.example-code.com/csharp/imap-search-critera.asp)
items = items[0].split() # getting the mails id

for emailid in items:
    # getting the mail content
    resp, data = m.fetch(emailid, '(UID BODY[TEXT])')
    text = str(data[0][1])
    soup = bs(text)

如何在整个 HTML 部分使用“bs”? 或者,有没有其他方法可以从邮件正文中解析出一个 html 表格?

'bs' 似乎对我来说是最好的,因为我想找到一个包含特定关键字的特定 HTML Body,而'bs' 搜索可以检索整个表格并让我在其中进行迭代。

【问题讨论】:

  • 查看文本变量。如果您不向 BeautifulSoup 提供 HTML 字符串,那么您就不能期望得到合理的结果。垃圾进,垃圾出。
  • 我知道如果我给 BS 部分文本和部分 HTML,它很难解析它,但我的问题是如何仅提取 html 部分。我尝试搜索第一个 html 标记并将字符串剪切到那里。我尝试只提取“text/html”部分。在这两种情况下,它只解析 html 的第一个
    部分,而不是所有 html。
  • 显然,我使用了错误的解析器。一旦我更改为“lxml”解析器,它就可以正常工作了。
  • 也许您应该将解决方案发布为您自己问题的答案,以供将来其他人参考。

标签: python html email beautifulsoup email-parsing


【解决方案1】:

显然,我使用了错误的解析器。

一旦我改成“lxml”解析器,它就可以正常工作了。

需要改下一行:

soup = bs(text,"lxml");

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签