с html.parser - In HTML, the ampersand character (“&”) declares the beginning of an entity reference (a special character). If you want one to appear in text on a web page you should use the encoded named entity “&”
Таким образом, когда он анализирует его без тегов / как сущность, он увидит это как ссылку на сущность:
html = 'R&D'
soup = BeautifulSoup(html, features="html.parser")
print (soup)
Так что выдает результатRD
Однако, если это содержимое / текст внутри тега, он распознает & как закодированный символ:
html = '<span>R&D</span>'
soup = BeautifulSoup(html, features="html.parser")
print (soup)
Вывод равен <span>R&D</span>
, поэтому, когдавы делаете soup.text
, он будет правильно отображать R&D