Извлечение текста после тега в Python ElementTree

Вот часть XML:

<item><img src="cat.jpg" /> Picture of a cat</item>

Извлечь тег легко. Просто делать:

et = xml.etree.ElementTree.fromstring(our_xml_string)
img = et.find('img')

Но как получить текст сразу после него (изображение кота)? Выполнение следующих действий возвращает пустую строку:

print et.text

Ответ 1

Элементы имеют атрибут tail - поэтому вместо element.text вы запрашиваете element.tail.

>>> import lxml.etree
>>> root = lxml.etree.fromstring('''<root><foo>bar</foo>baz</root>''')
>>> root[0]
<Element foo at 0x145a3c0>
>>> root[0].tail
'baz'

Или для вашего примера:

>>> et = lxml.etree.fromstring('''<item><img src="cat.jpg" /> Picture of a cat</item>''')
>>> et.find('img').tail
' Picture of a cat'

Это также работает с простым ElementTree:

>>> import xml.etree.ElementTree
>>> xml.etree.ElementTree.fromstring(
...   '''<item><img src="cat.jpg" /> Picture of a cat</item>'''
... ).find('img').tail
' Picture of a cat'