XPath

1. 简介

XPath即XML Path Language,是一门在 XML 文档中查找信息的语言。

2. XPath 语法 
2.1 选择结点

XPath 使用路径表达式来选取 XML 文档中的节点或节点集。

表达式描述
nodename选取此节点的所有子节点
/从根节点选取
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
.选取当前节点
选取当前节点的父节点。
@选取属性

示例:

作用路径表达式结果
所有结点//*所有结点
子节点//li/ali结点所有直接a子节点
子孙结点//li//ali结点所有子孙a结点
父节点+属性匹配//li[@href=“link”]/…/@class选取href属性为link的li结点,再选取的父节点的class属性
属性匹配//li[@class]
//li[@class=“item”]
选取拥有class属性的li结点
选取结点class属性为item的li结点
属性多值匹配<li class="li li-first"> ...</li>
//li[contains(@class,“li”)]
选取class属性包含li的li结点
多属性匹配<li class="li li-first" name="item"> ...</li>
//li[contains(@class,“li”) and @name=“item”]
选取class属性包含li,并且name属性为item的li结点
2.2 选择排序

在选择时可能同时匹配了多个结点,选择其中某个节点。

路径表达式结果
//li[1]选取第一个li结点,不是从0开始
//li[last()]选取最后一个li结点
//li[last()-1]选取倒数第二个li结点
//li[position()< 3]选取前两个li结点
//li[attr>35]选取attr属性大与35的li结点
2.3 节点轴选择
轴名称结果
self选取当前节点
parent选取当前节点的父节点
ancestor选取当前节点的所有先辈(父、祖父等)
ancestor-or-self选取当前节点以及当前节点本身
child选取当前节点的所有直接子元素
descendant选取当前节点的所有后代元素(子、孙等)
descendant-or-self选取当前节点的所有后代元素以及当前节点本身
following选取文档中当前节点的结束标签之后的所有节点
preceding选取文档中当前节点的开始标签之前的所有节点
preceding-sibling选取当前节点之前的所有同级节点
attribute选取当前节点的所有属性
namespace选取当前节点的所有命名空间节点

示例:

路径表达式结果
//li[1]/ancestor:: *选取li[1]的所有祖先节点
//li[1]/ancestor::div选取li[1]的div祖先节点
//li[1]/child::a[@href=“link”]选取i[1]的属性lhref为link的直接子节点
//li[1]/following:: *[2]选取li[1]的第二个后继结点
2.4 类型
from lxml import etree
html = etree.HTML(text) #type(html):lxml.etree._Element
result=html.xpath('//li') #type(result):list;
                          #type(result[0]):lxml.etree._Element
print(result[0]) #<Element li at 0x1b4335eafc8>
result=html.xpath('//li[1]') #type(result):list
print(result) #[<Element li at 0x1b4335eafc8>],与上个相同
result=html.xpath('//li/@class') #type(result):list
result=html.xpath('//li[1]/child::*')#type: list
"""
text()的用法:
<li class="item-5"><a href="0.html">item 0</a>	
</li>
"""
result=html.xpath('//li[1]/text()')
print(result) #['\t\n'],'/'为直接子节点,只有</a>与</li>之间的\t\n
result=html.xpath('//li[1]//text()')
print(result) #['item 0', '\t\n'],'//'为所有子孙结点,也包含了a节点的内容
2.5 XPath 运算符

常用有:

orandmod|:计算连个节点集+-*div
=!=<<=>>=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值