首页 > 解决方案 > 为什么 BeautifulSoup 的 unwrap 方法会删除标签内的文本而不是删除标签?

问题描述

Beautiful Soup 4's unwrapmethod的文档中,我希望下面的代码能够打印出来Lorem ipsum dolor sit amet。相反,它打印<p></p>. 不unwrap()应该“用该标签内的任何内容替换标签”(引用文档)?

#!/usr/bin/env python3
import bs4
markup = '<p>Lorem ipsum dolor sit amet</p>'
soup = bs4.BeautifulSoup(markup, "lxml")
p_tag = soup.p
p_tag.unwrap()
print(p_tag)

我想我误解了文档中的示例。我正在使用 Python 3.7.3 和 Beautiful Soup 4.7.1。

标签: pythonpython-3.xbeautifulsoup

解决方案


文档说:

Tag.unwrap() 与 wrap() 相反。它用标签内的任何内容替换标签。

因此,它将汤内的标签替换为标签内的内容。

考虑这个例子:

import bs4
markup = '<other_tag><p>Lorem ipsum dolor sit amet</p></other_tag>'
soup = bs4.BeautifulSoup(markup, "lxml")
p_tag = soup.p

print(p_tag.parent)     # <other_tag><p>Lorem ipsum dolor sit amet</p></other_tag>
p_tag.unwrap()
print(p_tag)            # <p></p>
print(p_tag.parent)     # None

print(soup.other_tag)   # <other_tag>Lorem ipsum dolor sit amet</other_tag>

使用.unwrap(),我们有效地从汤中删除标签,并将其替换为该标签内的内容。未包装的标签现在已将父级设置None为空 -> 它的内容已移至其他位置(到父级)。


推荐阅读