1.支持层级跳转
2.支持多个属性同时定位唯一值
-
/(开头) : 表示根路径
-
//(开头、中间): 表示任意层级
-
* :表示任意元素
-
@: 表示根据属性筛选
-
/(中间) : 表示下一级路径
-
. : 表示本级
-
..: 表示上一级
定义该元素:<a href="javascript:void(0);">+ 新建选项</a>
根据文本内容精确定位
# 精确匹配
Xpath=//a[text()='+ 新建选项']
根据模糊文本内容定位
# 模糊匹配
Xpath=//a[contains(text(),'新建')]
根据开头文本内容定位元素
# 定位以“新” 开头的元素
Xpath=//a[starts-with(text(),'新')]
根据tagName查找某个元素的父元素(使用 parent:: )
<span>新建选项</span>
//span[contains(text(),'新建')]/parent::li
//span[contains(text(),'新建')]/parent::*
寻找兄弟节点:
preceding-sibling:向上查找
following-sibling:向下查找
//*[@class='demo']/following-sibling::div[1] --》向下查找第一个兄弟节点
//*[@class='demo']/preceding-sibling::div[1] --》向上查找第一个兄弟节点
定义该元素:&lt;a href="javascript:void(0);"&gt;+ 新建选项&lt;/a&gt;Xpath=//a[text()='+ 新建选项']
text = get_html(url)
tree = etree.HTML(text)
bm = tree.xpath('//ul[@class=information_ul]/li/i[text()=别名:]/following-sibling::span/text()')
bw = tree.xpath('//ul[@clas
(1)可以通过获取的节点,定位到父节点,再找到想要定位 的元素 用到…来获取 父节点
(2)可以使用xpath提供的属性:preceding-sibling(当前节点之前的节点)或者following-sibling(当前节点之后的节点)属性来进行定位
(1)通过父节点进行定位
//table/tbody/tr[1]/td[1]/div/…/…/td[2]/div ###先获取到了40140值,在通过…获取到了父值td,再获取td的父值tr,再进行获取子节点
(2)使用prece
在定位页面元素时,有时候需要根据某个元素特征,去定位其相邻元素/兄弟元素,或者定位其父元素的兄弟元素(或叔伯元素的子元素)。这里引入xpath的两个定位方法:
preceding-sibling
following-sibling
如图,页面元素A,B,C,假设我不知道B和C的name,只知道A的name,我想根据A的name去其上一个元素的name和下一个元
XPath 中的 `./` 和 `//` 都是用来定位元素的,二者的区别在于定位的起点不同。
- `./` :表示从当前节点开始查找,即当前节点下的子节点。
- `//` :表示在整个文档中查找,即不论当前节点在文档中的位置,都会从文档的根节点开始查找。
举个例子,假设我们有以下 HTML 代码:
```html
<div id="parent">
<p>第一个段落</p>
<p>第二个段落</p>
<p>第三个段落</p>
如果我们要定位第一个段落的元素,可以使用以下两种方式:
- 使用 `./` :
```xpath
./p[1]
这个 XPath 表达式表示从当前节点(即 `div` 元素)开始查找子节点中的第一个 `p` 元素。
- 使用 `//` :
```xpath
//p[1]
这个 XPath 表达式表示在整个文档中查找第一个 `p` 元素。
因此,二者的区别在于定位的起点不同,使用 `./` 表示从当前节点开始查找,使用 `//` 表示在整个文档中查找。