Xpath表达式
Xpath(XML Path Language):XML路径语言,它是一门在XML文档中查找信息的语言,最初被用来搜寻XML文档,同时它也适用于搜索HTML文档。因此,在爬虫过程中可以使用XPath来提取相应的数据。
XML是一种遵守W3C标准的标记语言,类似于HTML,只是两者的设计目的不同,XML通常被用来传输和存储数据,而HTML常用来显示数据。
Xpath使用路径表达式来选取XML/HTML文档中的节点或节点集。Xpath的功能十分强大,它除了提供了简洁的路径表达式之外,还提供了100多个内建函数,包括处理字符串、数值、日期以及时间的函数。因此,Xptah路径表达式几乎可以匹配所有的元素节点。
Xpath节点
Xpath提供了多种类型的节点,常用的节点有:元素、属性、文本、注释以及文档节点,示例如下:
<?xml version="1.0" encoding="utf-8"?> <website> <site> <title lang="zh-CN">website name</title> <name>编程帮</name> <year>2010</year> <address>www.biancheng.net</address> </site> </website>
说明:
<website></website>(文档节点,也称根节点) <name></name>(元素节点) lang="zh-CN"(属性节点)
节点关系
<bookstore> <book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>
父(Parent)
每个元素以及属性都有一个父。上述示例中,book元素是title、author、year、price元素的父
子(Chirdren)
元素节点可以有零个、一个或多个子。上述示例中,title、author、year、price元素是book元素的子
同胞(Sibling)
拥有相同的父的节点。上述示例中,title、author、year、price元素都是同胞
后代(Descendant)
某个节点的子、子的子等。上述示例中,bookstroe的后辈是book、title、author、year、price元素。
先辈(Ancestor)
某节点的父、父的父等。上述示例中,title元素的先辈是:book、bookstore。
Xpath基本语法
1、基本语法使用
Xpath使用路径表达式在文档中选取节点,下表列出了常用的表达式规则:
表达式 | 描述 |
---|---|
node_name | 选取此节点的所有子节点 |
/ | 绝对路径匹配,从根节点选取 |
// | 相对路径匹配,从所有节点中查找当前选择的节点,包括子节点和后代节点,其第一个/表示根节点 |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性值,通过属性值选取数据。常用元素属性有@id、@name、@type、@class、@title、@herf |
使用如下xml文档来讲解Xpath表达式的基本应用
<ul class="BookList"> <li class="book1" id="book_01" href="http://www.biancheng.net/"> <p class="name">c语言小白变怪兽</p> <p class="model">纸质书</p> <p class="price">80元</p> <p class="color">红蓝色封装</p> </li> <li class="book2" id="book_02" href="http://www.biancheng.net/"> <p class="name">Python入门到精通</p> <p class="model">电子书</p> <p class="price">45元</p> <p class="color">蓝绿色封装</p> </li> </ul>
路径表达式以及相应的匹配内容如下:
xpath表达式://li/p[@class="name"] 匹配内容: c语言小白变怪兽 Python入门到精通 xpath表达式://li/p[@class="model"] 匹配内容: 纸质书 电子书 xpath表达式://ul/li/@href 匹配内容: http://www.biancheng.net/ http://www.biancheng.net/
注意:当需要查找某个特定的节点或者选取节点中包含的指定值时需要使用[]
方括号。如下所示:
xpath表达式://ul/li[@class="book2"]/p[@class="price"] 匹配结果:45元
2、xpath通配符
xpath表达式的通配符可以用来选取未知的节点元素,基本语法如下:
通配符 | 描述说明 |
---|---|
* | 匹配任意元素节点 |
@* | 匹配任意属性节点 |
node() | 匹配任意类型的节点 |
示例如下:
xpath表达式://li/* 匹配内容: c语言小白变怪兽 纸质书 80元 红蓝色封装 Python入门到精通 电子书 45元 蓝绿色封装
3、多路径匹配
多个Xpath路径表达式可以同时使用,其语法如下:
xpath表达式1 | xpath表达式2 | xpath表达式3
示例:
表达式://ul/li[@class="book2"]/p[@class="price"]|//ul/li/@href 匹配内容: 45元 http://www.biancheng.net/ http://www.biancheng.net/
Xpath内建函数
Xpath提供了100+的内建函数,给我们提供了很多便利,比如实现文本匹配、模糊匹配以及位置匹配等,以下为几个常用的内建函数。
函数名 | xpath表达式示例 | 示例说明 |
---|---|---|
text() | ./text() | 文本匹配,表示值取当前节点中的文本内容 |
contains() | //div[contains(@id,"stu")] | 模糊匹配,表示选择id中包含“stu”的所有div节点 |
last() | //*[@class='web'][last()] | 位置匹配,表示选择@class=web的最后一个节点 |
position() | //*[@class='site'][position()<=2] | 位置匹配,表示选择@class=site的前两个节点 |
start-with() | "//input[start-with(@id,'st')]" | 匹配id以“st”开头的元素 |
ends-with() | "//input[ends-with(@id,'st')]" | 匹配id以“st”结尾的元素 |
concat(string1,string2) | concat('Torres',.//*[@class='site']/@href) | Torres与标签类别属性为site的herf地址做拼接 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!