Как сказал llasram, любой текст не в атрибуте text
будет в атрибутах tail
дочерних узлов.
В качестве примера, вот самый простой способ извлечь все из блоков текста (первый и в противном случае) в узле:
html = '<div>text1<span>childtext1</span>text2<span>childtext2</span>text3</div>'
import lxml.html # ...or lxml.etree as appropriate
div = lxml.html.fromstring(html)
texts = [div.text] + [child.tail for child in div]
# Result: texts == ['text1', 'text2', 'text3']
# ...and you are guaranteed that div[x].tail == texts[x+1]
# (which can be useful if you need to access or modify the DOM)
Если вы не хотите принести в жертву, что отношения в целях предотвращения texts
от потенциально содержащих пустые строк, вы можете использовать вместо этого:
texts = [div.text] + [child.tail for child in div if child.tail]
Я не проверял это с простым старым STDLIB ElementTree, но он должен работать с этим тоже. (Что-то, что только произошло со мной, когда я увидел решение, специфичное для lxml Шейна Холлоуэя), я просто предпочитаю LXML, потому что он получил лучшую поддержку идеографических схем HTML, и я обычно уже устанавливал его для lxml.html.clean
Это похоже на ошибку. Вы пытались использовать 'findtext (path)'? –
Поскольку мой ответ, по-видимому, не отвечает на ваш вопрос, не могли бы вы объяснить, что именно вы ищете? – llasram