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