python 3 beautifulsoup не удаётся получить значение элемента с атрибутом name

text = ('<offer id="14899" available="true">'
        '<param name="Бренд">Megavent</param>'
        '<manufacturer_warranty>true</manufacturer_warranty>'
        '</offer>'
       )
soup = BeautifulSoup(text, "lxml")
brend = soup.find('param', {'name': 'Бренд'})
warranty = soup.find('manufacturer_warranty')
# Найдем элементы
print(brend)
print(warranty)
print('****************')
# Пробуем вывести значение
print(brend.value)
print(warranty.value)
print('****************')
print(brend.text)
print(warranty.text)
print('****************')
print(brend.string)
print(warranty.string)
print('****************')
print(brend.contents)
print(warranty.contents)

введите сюда описание изображения

Что не так с элементом param?


Ответы (2 шт):

Автор решения: splash58

Решается проблема сменой

soup = BeautifulSoup(text, "lxml")

на

soup = BeautifulSoup(text, "lxml-xml")

просто в первом случае текст интерпретируется, как html, а во втором случае, как xml

а тег param имеет вполне определенный формат для html

→ Ссылка
Автор решения: Oopss

Может без супа?

from lxml import etree

text = ('<offer id="14899" available="true">'
        '<param name="Бренд">Megavent</param>'
        '<manufacturer_warranty>true</manufacturer_warranty>'
        '</offer>')


root = etree.fromstring(text)

print('root',root.tag)
print('attr',root[0].get('name'))
for el in root:
    print(el.tag,el.text)
root offer
attr Бренд
param Megavent
manufacturer_warranty true
→ Ссылка