Найти - Пользователи
Полная версия: Lxml+XPath 2.0 функции
Начало » Python для экспертов » Lxml+XPath 2.0 функции
1
dorian
Вопрос знатокам XPath
Есть строка вида
['8.07/8.12']
Задача получить подстроку до слеша (или после слеша). В спецификации XPath есть функции substring-before и substring-after, которые теоретически должны с успехом эту задачу выполнить. Есть XPath:
>>> page.xpath("./*//div[@class='currency_div']/div[@class='val'][1]/ul/li[3]/text()[1][substring-before(.,'/')]")
не работает, получаем тоже самое что и без substring-before(.,'/'). Пробовал по всякому - результат тот же.
reclosedev
То, что находится в скобках
[]
это дополнительное условие выборки.

Чтобы получить сам текст, нужно вызывать примерно так:
In [1]: import lxml.html
 
In [2]: content = '''<div class="val">8.07/8.12</div>'''
 
In [3]: doc = lxml.html.fromstring(content)
 
In [4]: doc.xpath('substring-before(//div[@class="val"],"/")')
Out[4]: '8.07'
 
In [5]: doc.xpath('//div[@class="val"]')[0].xpath('substring-before(.,"/")')
Out[5]: '8.07'
dorian
reclosedev
То, что находится в скобках
[]
это дополнительное условие выборки.

Чтобы получить сам текст, нужно вызывать примерно так:
In [1]: import lxml.html
 
In [2]: content = '''<div class="val">8.07/8.12</div>'''
 
In [3]: doc = lxml.html.fromstring(content)
 
In [4]: doc.xpath('substring-before(//div[@class="val"],"/")')
Out[4]: '8.07'
 
In [5]: doc.xpath('//div[@class="val"]')[0].xpath('substring-before(.,"/")')
Out[5]: '8.07'
спасибо, работает
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB