如何使用BeutifulSoup创建带有嵌套标签的新标签?
例如,给定以下HTML:
html = """
<div id="root">
</div>
"""
所需的输出例如:
html = """
<div id="root">
<div id="child">
<div id="grandchild">
</div>
</div>
</div>
"""
答案 0 :(得分:0)
这是一个非常复杂的代码,但这是可以做到的:
from bs4 import BeautifulSoup
html = """
<div id="root">
</div>
"""
# parse the root
root = BeautifulSoup(html)
# create the child
child = BeautifulSoup('<div id="child" />')
# create the grandchild under the child, and append grandchild to child
grandchild = child.new_tag('div', attrs={'id': 'grandchild'})
child.div.append(grandchild)
# create the child under the root, and append child to root
root.new_tag(child.html.contents[0].div)
root.div.append(child.html.contents[0].div)
请注意:
如果您打印root
:
[...]
print(root.prettify())
输出为:
<html>
<body>
<div id="root">
<div id="child">
<div id="grandchild">
</div>
</div>
</div>
</body>
</html>
意味着root
现在是完整的HTML文档。
因此,如果要将root
用作div,请确保使用root.div
来访问它。
最后一行(root.div.append
)空为child
,因此,如果您在执行最后一行后打印它:
[...]
print(child.prettify())
输出为:
<html>
<body>
</body>
</html>
答案 1 :(得分:0)
您可以将另一个soup
附加到标签。例如:
from bs4 import BeautifulSoup
html = """
<div id="root">
</div>
"""
to_append = '''
<div id="child">
<div id="grandchild">
</div>
</div>'''
soup = BeautifulSoup(html, 'html.parser')
soup.select_one('div#root').append(BeautifulSoup(to_append, 'html.parser'))
print(soup.prettify())
打印:
<div id="root">
<div id="child">
<div id="grandchild">
</div>
</div>
</div>