How can I insert a new tag into a BeautifulSoup object?

Posted on

Question :

How can I insert a new tag into a BeautifulSoup object?

Trying to get my head around html construction with BS.

I’m trying to insert a new tag:

self.new_soup.body.insert(3, """<div id="file_history"></div>""")   

when I check the result, I get:

&lt;div id="file_histor"y&gt;&lt;/div&gt;

So I’m inserting a string that being sanitised for websafe html..

What I expect to see is:

<div id="file_history"></div>

How do I insert a new div tag in position 3 with the id file_history?

Answer #1:

Use the factory method to create new elements:

new_tag = self.new_soup.new_tag('div', id='file_history')

and insert it:

self.new_soup.body.insert(3, new_tag)
Answered By: Birei

Answer #2:

See the documentation on how to append a tag:

soup = BeautifulSoup("<b></b>")
original_tag = soup.b

new_tag = soup.new_tag("a", href="")
# <b><a href=""></a></b>

new_tag.string = "Link text."
# <b><a href="">Link text.</a></b>
Answered By: Guy Gavriely

Answer #3:

Other answers are straight off from the documentation. Here is the shortcut:

from bs4 import BeautifulSoup

temp_soup = BeautifulSoup('<div id="file_history"></div>')
# BeautifulSoup automatically add <html> and <body> tags
# There is only one 'div' tag, so it's the only member in the 'contents' list
div_tag = temp_soup.html.body.contents[0]
# Or more simply
div_tag = temp_soup.html.body.div
your_new_soup.body.insert(3, div_tag)
Answered By: Hieu

Leave a Reply

Your email address will not be published. Required fields are marked *