在BeautifulGroup中解析MS特定的html标记

2024-09-28 21:05:40 发布

您现在位置:Python中文网/ 问答频道 /正文

当试图解析使用msoutlook发送的电子邮件时,我希望能够去掉它添加的恼人的microsoftwalxml标记。一个这样的例子是o:p标记。当尝试使用Python的beauthoulsoup将电子邮件解析为HTML时,似乎找不到这些特殊标记。在

例如:

from bs4 import BeautifulSoup

textToParse = """
<html>
  <head>
    <title>Something to parse</title>
  </head>
  <body>
    <p><o:p>This should go</o:p>Paragraph</p>
  </body>
</html>
"""

soup = BeautifulSoup(textToParse, "html5lib")

body = soup.find('body')

for otag in body.find_all('o'):
  print(otag)

for otag in body.find_all('o:p'):
  print(otag)

这将不会向控制台输出文本,但是如果我切换了find_all调用来搜索p,那么它将按预期输出p节点。在

为什么这些自定义标记似乎不起作用?在


Tags: in标记fortitlehtmlbodyallfind
1条回答
网友
1楼 · 发布于 2024-09-28 21:05:40

这是一个命名空间问题。显然,当使用"html5lib"解析时,beauthoulsoup并不认为自定义命名空间有效。在

你可以用正则表达式来解决这个问题,奇怪的是,可以正确地工作!在

print (soup.find_all(re.compile('o:p')))
>>> [<o:p>This should go</o:p>]

但是“正确的”解决方案是将解析器改为"lxml-xml",并引入{}作为有效的名称空间。在

^{pr2}$

相关问题 更多 >