Проверьте это
По умолчанию единственными символами, которые экранируются при выводе, являются голые амперсанды и угловые скобки. Они превращаются в «&», «<» и «>», так что Beautiful Soup случайно не генерирует недопустимый HTML или XML:
soup = BeautifulSoup("<p>The law firm of Dewey, Cheatem, & Howe</p>")
soup.p
# <p>The law firm of Dewey, Cheatem, & Howe</p>
soup = BeautifulSoup('<a href="http://example.com/?foo=val1&bar=val2">A link</a>')
soup.a
# <a href="http://example.com/?foo=val1&bar=val2">A link</a>
Вы можете изменить это поведение, указав значение аргумента форматера prettify (), encode () или decode (). Beautiful Soup распознает шесть возможных значений форматера.
По умолчанию используется форматтер = "минимальный". Строки будут обрабатываться только для того, чтобы Beautiful Soup генерировал действительный HTML / XML:
french = "<p>Il a dit <<Sacré bleu!>></p>"
soup = BeautifulSoup(french)
print(soup.prettify(formatter="minimal"))
# <html>
# <body>
# <p>
# Il a dit <<Sacré bleu!>>
# </p>
# </body>
# </html>