Поиск html-узлов — xpath

Python
Поиск html-узлов — xpath

Xpath для извлечения данных

Предикаты заключаются в квадратные скобки и используются для поиска определенного узла.

выражение результат
@ Выберите содержимое атрибута в теге
xpath('/body/div[1]') Выберите первый узел div под телом
xpath('/body/div[last()]') Выберите последний узел div под телом
xpath('/body/div[last()-1]') Выберите предпоследний узел под телом
xpath('/body/div[positon()<3]') Выберите первые два узла div под телом
xpath('/body/div[@class]') Выберите узел div с атрибутом класса под телом
xpath('/body/div[@class="main"]') Выберите узел div, чей атрибут класса является основным под телом
xpath('/body/div[price>35.00]') Выберите узел div, элемент цены которого больше 35 под телом
from lxml import etree

text='''
    <div>
        <ul>
             <li class="item-0"><a href="link1.html">first item</a></li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-inactive"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
        </ul>
 </div>
'''

html = etree.parse('hello.html') # 读取文件

html2=etree.HTML(text)

print(html2.xpath('//li/@class'))

Получать<li>Ссылка под тегом — link5.html.<a>содержание этикетки

res=html.xpath('//li/a[@href="link5.html"]/text()')

print(res)  # ['fifth item']

Получать<li>Значение href под тегом

res=html.xpath('//li/a/@href')
print(res)
['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']

Получить содержимое предпоследнего элемента

res=html.xpath('//li[last()]/a/text()')
print(res)
fourth item