Объект found
не является строкой Python, это Tag
, который просто имеет хорошее представление строки. Вы можете проверить это, выполнив
type(found)
A Tag
является частью иерархии объектов, которую Beautiful Soup создает для того, чтобы вы могли взаимодействовать с HTML. Еще один такой объект - NavigableString
. NavigableString
очень похоже на строку, но может содержать только то, что входит в контентную часть HTML.
Когда вы делаете
found.replace_with('<div id="content">stuff here</div>')
вы просите заменить Tag
на NavigableString
, содержащий этот буквальный текст. Единственный способ для HTML, чтобы иметь возможность отображать эту строку, это экранировать все угловые скобки, как это происходит.
Вместо этого беспорядка вы, вероятно, захотите оставить свой Tag
и заменить только его содержимое:
found.string.replace_with('stuff here')
Обратите внимание, что правильная замена не пытается перезаписать теги.
Когда вы делаете found.replace_with(...)
, объект, на который ссылается имя found
, заменяется в родительской иерархии. Однако имя found
продолжает указывать на тот же устаревший объект, что и раньше. Вот почему печать soup
показывает обновление, а печать found
- нет.