проверьте это:
import re
html = '''
<div>
<p>
I don't want this
<span>
span element
</span>
on it's one line.
</p>
</div>
'''
soup = bs4.BeautifulSoup(html)
## getting prettified output
html = soup.prettify()
# removing \n and space before and after <span> tag
html = re.sub('[ \n]+<span>[ \n]+','<span>', html)
# removing \n and space before and after </span> tag
html = re.sub('[ \n]+</span>[ \n]+','</span>', html)
выполнение print(html)
дает следующий вывод:
<div>
<p>
I don't want this<span>span element</span>on it's one line.
</p>
</div>
вы можете создать функцию, которая делает это для различных тегов:
import re
def prettify_output(html, tag):
html = re.sub(f'[ \n]+<{tag}>[ \n]+',f'<{tag}>', html)
html = re.sub(f'[ \n]+</{tag}>[ \n]+',f'</{tag}>', html)
return html
## call
html = prettify_output(html, 'span')