Как я могу получить текст с использованием xpath из текста?

#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]