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
