XPATH语法总结与示例

XPATH简介

  • 以斜杠开始的称为绝对路径,表示从根开始。
  • 不以斜杠开始的称为相对路径,一般都是依照当前节点来计算。当前节点在上下文环境中,当前节点很可能已经补是根节点了。
  • 一般为了方便,往往xml如果层次很深,都会使用//来查找节点。

XPATH语法总结

路径表达式 含义
title 选取当前节点下所有title子节点
/book 从根节点找子节点是book的,找不到
book/title 当前节点下所有子节点book下的title节点
//title 从根节点向下找任意层中title的结点
book//title 当前节点下所有book子节点下任意层次的title节点
//@id 任意层次下含有id的属性,取回的是属性
//book[@id] 任意层次下含有id属性的book节点
//*[@id] 任意层下含有id属性的节点
//book[@id=“bk102”] 任意层次下book节点,且含有id属性为bk102的节点。
/bookstore/book[1] 根节点bookstore下第一个book节点,从1开始
/bookstore/book[1]/@id 根节点bookstore下的第一个book节点的id属性
/bookstore/book[last()-1] 根节点bookstore下倒数第二个book节点,
函数last() 返回最后一个元素索引
/bookstore/* 匹配根节点bookstore的所有子节点,不递归
//* 匹配所有子孙节点
//[@] 匹配所有有属性的节点
//book/title //price
//book[position()=2] 匹配book节点,取第二个
//book[position()<last()-1] 匹配book节点,取位置小于倒数第二个
//book[price>40] 匹配book节点,取节点值大于40的book节点
//book[2]/node() 匹配位置为2的book节点下的所有类型的节点
//book[1]/text() 匹配第一个book节点下的所有文本子节点
//book[1]/text() 匹配第一个book节点下的所有文本节点
//*[local-name()=“book”] 匹配所有节点且不带限定名的节点名称为book的所有节点。
local-name 函数取不带限定名的名称。相当于指定标签元素为…的节点
下面这三种表达式等价
//book[price<6]/price
//book/price[text()<6]
//book/child::node()[local-name()=“price” and text()<6] 获取book节点下的price节点,且price中内容小于6的节点
//book//*[self::title or self::price]
等价于//book//title //book/price
也等价于//book//*[local-name()=“title” or local-name()=“price”] 所有book节点下子孙节点,且这些节点是title或者price。
//*[@class] 所有有class属性的节点
//*[@class=“bookinfo even”] 所有属性为“bookinfo even”的节点
//*[contains(@class,‘even’) 获取所有属性class中包含even字符串的节点
//*[contains(local-name(),‘book’) 标签名包含book的节点

函数总结

函数 含义
local-name() 获取不带限定名的名称。相当于指定标签元素
text() 获取标签之间的文本内容
node() 所有节点。
contains(@class,str) 包含
starts-with(local-name(),“book”) 以book开头
last() 最后一个元素索引
position() 元素索引

示例:

//div[@id="newscontent"]/div[1]/ul/li/span[1]/a

在这里插入图片描述

//div[@id="newscontent"]/div[1]/ul/li/span[1]/a/@href

在这里插入图片描述
//*[contains(@class,'s3')]

获取所有属性class中包含s3字符串的节点

在这里插入图片描述

//@href
在这里插入图片描述

//*[local-name()="p"]
等同于
//*[local-name()="p"]/text()
在这里插入图片描述

Ps:虽然python解析xml的库很多,但是,由于lxml在底层是用C语言实现的,所以lxml在速度上有明显优势。除了速度上的优势,lxml在使用方面,易用性也非常好。这里将以下面的xml数据为例,介绍lxml的简单使用。

所有练习代码在:https://github.com/SaltNego/Web_Crawler_Notes

发布了61 篇原创文章 · 获赞 22 · 访问量 4237

猜你喜欢

转载自blog.csdn.net/yiqiushi4748/article/details/104030412