Jesvin Jose
Jesvin Jose

Reputation: 23088

Replacing the inner HTML with BeautifulSoup?

For a tag:

<div class="special_tag"></div>

I want a tag.replace_inner_html('inner') that results in:

<div class="special_tag">inner</div>

The best I know is replace_with('inner') which replaces the outer HTML.

Upvotes: 7

Views: 6029

Answers (1)

falsetru
falsetru

Reputation: 369064

If you want to replace inner text, set string attribute:

>>> from bs4 import BeautifulSoup
>>>
>>> soup = BeautifulSoup('''
... <div>
...     <div class="special_tag"></div>
... </div>
... ''')
>>> elem = soup.find(class_='special_tag')
>>> elem.string = 'inner'
>>> print(elem)
<div class="special_tag">inner</div>

If you want to add tag (or tags), you need to clear contents, and insert or append them (Use new_tag to create tags):

>>> elem = soup.find(class_='special_tag')
>>> elem.clear()
>>> elem.append('inner')
>>> print(elem)
<div class="special_tag">inner</div>

Upvotes: 11

Related Questions