搜索html结点——xpath

Xpath 用于提取数据

谓语被嵌在方括号内,用来查找某个特定的节点

表达式 结果
@ 选取标签中属性的内容
xpath('/body/div[1]') 选取body下的第一个div节点
xpath('/body/div[last()]') 选取body下最后一个div节点
xpath('/body/div[last()-1]') 选取body下倒数第二个节点
xpath('/body/div[positon()<3]') 选取body下前两个div节点
xpath('/body/div[@class]') 选取body下带有class属性的div节点
xpath('/body/div[@class="main"]') 选取body下class属性为main的div节点
xpath('/body/div[price>35.00]') 选取body下price元素大于35的div节点
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> 标签下 href 为 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
复制代码