#python #xpath #lxml
#python #xpath #lxml
Вопрос:
Я хочу получить 111111111
use xpath
из text
, я делаю это следующим образом ниже, но я не могу его получить.
import lxml
text = """<p class="tel">
<span class="dsTitle">tel:</span>
111111111
</p>
"""
doc = lxml.etree.fromstring(text, parser=lxml.etree.HTMLParser())
tel = doc.xpath('//p/text')
print(tel)
Вывод []
.Я думаю, что могу получить 111111111
.
Но почему? Что в этом плохого?
Ответ №1:
вы забыли о скобках.
doc.xpath('//p/text()')
будет работать.
Комментарии:
1. Чем этот ответ отличается от моего?
Ответ №2:
Используйте тест узла xpath text()
:
Он выбирает всех дочерних элементов типа text-node вашего контекстного узла p
.
Добавьте фильтр /text()[normalize-space()]
, чтобы удалить начальные и конечные узлы с пробелами, такие как новые строки и пробелы.
Завершить:
tel = doc.xpath('//p/text()[normalize-space()]')
Ответ №3:
вы можете использовать xpath следующим образом:
//span[contains(text(),'tel:')]/following-sibling::text()[1]