使用BeautifulSoup使用嵌套标签创建新标签

时间:2020-10-04 17:57:45

标签: python beautifulsoup

如何使用BeutifulSoup创建带有嵌套标签的新标签?

例如,给定以下HTML:

html = """
   <div id="root">
   </div>
"""

所需的输出例如:

html = """
   <div id="root">
      <div id="child">
         <div id="grandchild">
         </div>
      </div>
   </div>
"""

2 个答案:

答案 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>