[XPath] XPath 与 lxml (三)XPath 坐标轴
本章我们将沿用上一章的 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 坐标轴的更多相关文章
- 12.Python爬虫利器三之Xpath语法与lxml库的用法
LXML解析库使用的是Xpath语法: XPath 是一门语言 XPath可以在XML文档中查找信息 XPath支持HTML XPath通过元素和属性进行导航 XPath可以用来提取信息 XPath比 ...
- Python爬虫11-XML与XPath概述及lxml库的应用
GitHub代码练习地址:用lxml解析HTML,文件读取,etree和XPath的配合使用:https://github.com/Neo-ML/PythonPractice/blob/master/ ...
- xpath教程 2 - lxml库
xpath教程 2 - lxml库 这些就是XPath的语法内容,在运用到Python抓取时要先转换为xml. lxml库 lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HT ...
- Xpath语法与lxml库的用法
BeautifulSoup 已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法. 1.安装 pip install lxml 2 ...
- 爬虫之lxml - etree - xpath的使用
# 解析原理: # - 获取页面源码数据 # - 实例化一个etree对象,并且将页面源码数据加载到该对象中 # - 调用该对象的xpath方法进行指定标签定位 # - xpath函数必须结合着xpa ...
- Xpath语法与lxml库
1. Xpath 1 )什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. 2) X ...
- Python爬虫 XPath语法和lxml模块
XPath语法和lxml模块 什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. X ...
- XPath语法和lxml模块
XPath语法和lxml模块 什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. X ...
- xpath教程 1 - 什么是XPath
xpath教程 1 什么是XPath? XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历. W3School官方 ...
- xpath如何使用正则、xpath定位svg标签、xpath常用集合
自己用到的xpath都收集下咯!!! 持续更新本页面 xpath查找svg图标 xpath('//*[local-name() = "svg" and @class="_ ...
随机推荐
- Mac 系统上安装Lua和SubmlimeText 编译器
第一步:安装命令 curl -R -O http://www.lua.org/ftp/lua-5.2.3.tar.gz tar zxf lua-5.2.3.tar.gz cd lua-5.2.3 ma ...
- C语言课程设计-保安值班系统支持任意输入保安值班时间
//.cpp : Defines the entry point for the console application. // #include "string.h" #incl ...
- 用python做数字油画或者从一幅画学习风格,去画另一幅画
1. 用python做数字油画 模块: pillow 2. 从一幅画学习风格,去画另一幅画 http://pytorch.org/tutorials/advanced/neural_style_tut ...
- (诊断)处理错误fatal error: Python.h: No such file or directory
安装与Python版本对应的 python-dev 即可,比如: $ -dev
- Intellij Idea反向生成Hibernate实体类
每次根据数据库的表反向生成实体类老不记得步骤...脑子不够用,这里特意记录一下.碰到的问题也及时更新到这里来. 1. 工程添加Hibernate支持 两种方式: 第一种:工程上右键选择 "A ...
- (个人)Linux基本指令收集
1. 删除文件 其中 -r为向下递归删除 -f为强行删除,不做提示 rm -rf name 1 1 rm -rf name 2. 目录跳转指令 cd .. --跳转到上一级 cd ../ - ...
- windows下winscp连接ubuntu
在ubuntu下安装ssh: sudo apt-get install openssh-server 即可解决.
- matlab中 %d,%f,%c,%s代表什么意思
1.%d就是输出整型:%3d就是说按照长度为3的整型输出,比如10,输出就是“_10”,“_”代表空格. 2.%f就是输出小数:%6.2f就是小数点后保留2位,输出总长度为6,比如3.14159,输出 ...
- browser process request
What really happens when you navigate to a URL Beginner’s Guide: How IIS Process ASP.NET Request Wha ...
- SOA及分布式
结合领域驱动设计的SOA分布式软件架构 Windows平台分布式架构实践 - 负载均衡(下) 分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载 我终于深入参与了一 ...