本章我们将沿用上一章的 XML 示例文档。

XPath 坐标轴

坐标轴用于定义当对当前节点的节点集合。

坐标轴名称 含义
ancestor 选取当前节点的所有先辈元素及根节点。
ancestor-or-self 选取当前节点的所有先辈以及当前节点本身。
attibute 选取当前节点的所有属性。
child 选取当前节点的所有子元素。
descendant 选取当前节点的所有后代元素。
descendant-or-self 选取当前节点的所有后代元素以及当前节点本身。
following 选取文档中当前节点的结束标签之后的所有节点。
following-sibling 选取当前节点之后的所有同级节点
namespace 选取当前节点的所有命名空间节点。
parent 选取当前节点的父节点。
preceding 选取当前节点的开始标签之前的所有节点。
preceding-sibling 选取当前节点之前的所有同级节点。
self 选取当前节点。

位置路径表达式

位置路径可以是绝对路径,也可以是相对路径。绝对路径以 "/" 开头。每条路径包括一个或多个步,每步之间以 "/" 分隔。

绝对路径:/step/step/...

相对路径:step/step/...

每步根据当前节点集合中的节点计算。

步(step)包括三部分:

  • 坐标轴(axis):定义所选节点与当前节点之间的关系。
  • 节点测试(node-test):识别某个坐标轴内部的节点。
  • 预判(predicate):提出预判条件对节点集合进行筛选。

步的语法:

坐标轴::节点测试[预判]

实例

# child::nodename 选取所有属于当前节点的 book 子元素,等价于 './nodename'
>>> root.xpath('child::book')
[<Element book at 0x2d888c8>, <Element book at 0x2d88878>]
>>> root.xpath('./book')
[<Element book at 0x2d888c8>, <Element book at 0x2d88878>]# attribute::lang 选取当前节点的 lang 属性,等价于 './@lang'
>>> root.xpath('//*[@lang]')[0].xpath('attribute::lang')
['eng']
>>> root.xpath('//*[@lang]')[0].xpath('@lang')
['eng']# child::* 选取当前节点的所有子元素,等价于 './*'
>>> root.xpath('child::*')
[<Element book at 0x2d88878>, <Element book at 0x2d88738>]
>>> root.xpath('./*')
[<Element book at 0x2d88878>, <Element book at 0x2d88738>]# attribute::* 选取当前节点的所有属性,等价于 './@*'
>>> root.xpath('//*[@*]')[0].xpath('attribute::*')
['eng']
>>> root.xpath('//*[@*]')[0].xpath('@*')
['eng']# child::text() 选取当前节点的所有文本子节点,等价于 './text()'
>>> root.xpath('child::text()')
['\n    ', '\n    ', '\n']
>>> root.xpath('./text()')
['\n    ', '\n    ', '\n']# child::node() 选取当前节点所有子节点,等价于 './node()'
>>> root.xpath('child::node()')
['\n    ', <Element book at 0x2d88878>, '\n    ', <Element book at 0x2d88738>, '\n']
>>> root.xpath('./node()')
['\n    ', <Element book at 0x2d88878>, '\n    ', <Element book at 0x2d88738>, '\n']# descendant::book 选取当前节点所有 book 后代,等价于 './/book'
>>> root.xpath('descendant::book')
[<Element book at 0x2d88878>, <Element book at 0x2d88738>]
>>> root.xpath('.//book')
[<Element book at 0x2d88878>, <Element book at 0x2d88738>]# ancestor::book 选取当前节点所有 book 先辈
>>> root.xpath('.//title')[0].xpath('ancestor::book')
[<Element book at 0x2d88878>]# ancestor-or-self::book 选取当前节点的所有 book 先辈以及如果当前节点是 book 的话也要选取
>>> root.xpath('.//title')[0].xpath('ancestor-or-self::book')
[<Element book at 0x2d88878>]
>>> root.xpath('.//book')[0].xpath('ancestor-or-self::book')
[<Element book at 0x2d88878>]
>>> root.xpath('.//book')[0].xpath('ancestor::book')
[]# child::*/child::price 选取当前节点的所有 price 孙节点,等价于 './*/price'
>>> root.xpath('child::*/child::price')
[<Element price at 0x2d88878>, <Element price at 0x2d88738>]
>>> root.xpath('./*/price')
[<Element price at 0x2d88878>, <Element price at 0x2d88738>]

[XPath] XPath 与 lxml (三)XPath 坐标轴相关推荐

  1. python xpath语法-XPath语法和lxml模块(数据提取)

    XPath语法和lxml模块 XPath lxml库 1.什么是XPath? XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素 ...

  2. python xpath语法-Python爬虫之XPath语法和lxml库的用法

    本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 安装 为什么要用这个库 ...

  3. python xpath语法-Python爬虫基础之XPath语法与lxml库的用法详解

    前言 本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 XPath 即为 ...

  4. python爬虫基础(二)~工具包: 下载包requests、urllib和解析包BeautifulSoup(bs4)、lxml.etree.xpath

    目录 1. html下载工具包 1.1 urllib工具包 1.1.1 urllib错误一 1.2 Requests工具包 1.2.1 requests错误一 2. html解析工具包 2.1 Bea ...

  5. Python3 爬虫实战 — 猫眼电影TOP100【requests、lxml、Xpath、CSV 】

    爬取时间:2019-09-23 爬取难度:★☆☆☆☆☆ 请求链接:https://maoyan.com/board/4 爬取目标:猫眼电影 TOP100 的电影名称.排名.主演.上映时间.评分.封面图 ...

  6. Python 中 xpath 语法 与 lxml 库解析 HTML/XML 和 CSS Selector

    The lxml.etree Tutorial :https://lxml.de/tutorial.html python3 解析 xml:https://www.cnblogs.com/deadwo ...

  7. Python常用插件类举,lxml+Xpath实现爬虫,使用Xpath爬取链家二手房源信息

    目录 一.XPath 二.XPath 常用规则 三.在谷歌浏览器安装XPath插件 四.Python爬虫常用插件 五.使用Xpath解析 六.Xpath匹配示例 1.查看所有的标签(如p.a.li标签 ...

  8. python 使用lxml中的xpath 和 scrpay中的xpath的区别

    1.scrapy中的xpath:直接是response.xpath 就是可以,例如: result = response.xpath('//span[@class="packaging-de ...

  9. Python操作lxml库(Xpath篇)

    ​ 活动地址:CSDN21天学习挑战赛 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩:迟一天就多一天平庸的困扰. 学习日记 目录 学习日记 一.Xpath概述 1.Xpath简介 2. Xpa ...

  10. lxml与XPath

    XPath lxml装载HTML代码有如下两种方式: (1)从文件装载,通过parse函数指定HTML文件名. (2)从代码装载,通过HTML函数指定HTML代码. XPath语言的基本语法就是多级 ...

最新文章

  1. ECCV2020 | 北京大学提出RGB-D语义分割新网络,多模态信息融合
  2. Unix高级环境编程—进程控制(一)
  3. linux 系统相关服务解释
  4. Simulink仿真---SVPWM算法
  5. WCF基础 (续 暴露元数据交换节点)
  6. python连接mongo_Python连接MongoDB操作
  7. 开源助推进NFV发展,红帽为运营商“定制”NFV落地方案
  8. U-Mail邮件系统客户无需担心OpenSSL心脏出血漏洞
  9. java md5.computehash_c# – ObjectDisposedException使用MD5 ComputeHash时
  10. VS Code 1.40 发布!可自行搭建 Web 版 VS Code!
  11. 【Java】矩阵乘法的朴素算法
  12. 关于Jeecg互联网化dubbo改造方案(上)
  13. 数据库引索的简单了解
  14. spring不懂的applicationContext
  15. sersync+rsync多实例网站数据同步
  16. WIN10命令提示符/黑窗口/cmd打不开怎么办
  17. window8系统激活工具
  18. 安培-麦克斯韦定律修正-运动的电荷产生涡旋磁场(B=μεv×E)
  19. transformer通俗理解
  20. 处理各种压力(情绪、家庭)时,需要注意什么!

热门文章

  1. springboot项目中使用日志
  2. SpringSecurity remember功能基本实现
  3. zookeeper的设计猜想-Leader角色
  4. 偏向锁的获取和撤销逻辑
  5. TCC两阶段补偿方案
  6. TCP/IP的分层管理
  7. ActiveMQ入门-发送消息机制的介绍
  8. SpringMVC的请求-获得请求参数-获得数组类型参数
  9. 线程池原理与自定义线程池
  10. Log4j的组件和配置文件介绍