Xpath 高级用法
xpath 高级用法
1. 匹配当前节点下的所有:
.//
. 表示当前
// 表示当前标签下的所有标签
注: 要配合使用
2. 匹配某标签的属性值: /@属性名称
这里以input里的value值为例:
例:xpath(//input/@value)
3. 匹配多个路径
在一个xpath中写的多个表达式用 | 分开, 每个表达式互不干扰。
xpath("//tr[6]/td[2]/text() | //tr[7]/td[2]/text()")
4. 按属性匹配:@获取所有id="test"的所有文本内容
xpath('//*[@id="test"]//text()')
5. 匹配不包含某个属性的标签 not
多用于表格中匹配中不包含表头信息的数据
xpath('//table/tr[not(@class="tbhead")]')
6. 匹配包含多个属性的标签: and匹配所有的tr中不包含 tbhead 属性 和包含 head 的tr标签
xpath('//table/tr[not(@class="tbhead") and @class="head"]')
7. 匹配包含不同属性的名称相同的标签
or匹配包含class="speedbar" 或者 class="content-wrap" 的标签
xpath('//div[@class="speedbar" or @class="content-wrap"]')
8. 将对象还原为字符串:
etree.tostring()将匹配到的对象,作为etree.tostring()的参数即可, 注: 返回字符串
sObj = xml.xpath('//*[@id="test"]')[0] #使用xpath定位一个节点
sStr = etree.tostring(sObj)
9. 按轴(Axes)匹配
9.1 选取当前节点的所有子元素: child获取div下的tr的标签
xpath('//div[@id="testid"]/child::tr/td/text()') # 感觉这种方法鸡肋,
//div[@id="testid"]//tr/td 也可以实现
9.2 选取当前节点的所有属性:attribute
获取div标签所有的属性值
xpath('//div/attribute::*') # 感觉这种方法鸡肋,//div/@* 同样能实现
9.3 ancestor:父辈元素 / ancestor-or-self:父辈元素及当前元素
获取父辈元素的div的所有属性值, 在不好定位的情况下,通过孩子标签定位,这种方法可以用
xpath('//div[@id="test"]/ancestor::div/@*')
xpath('//div[@id="test"]/ancestor-or-self::div/@*')
9.4 descendant:后代 / descendant-or-self:后代及当前节点本身
获取孩子元素的div的所有属性值,感觉鸡肋
xpath('//div[@id="test"]/descendant::div/@*')
xpath('//div[@id="test"]/descendant-or-self::div/@*')
9.5 选取当前节点的所有命名空间节点:namespace
xpath('//div[@id="test"]/namespace::*')
9.6 定位:position
和通过下标定位一样, 方法鸡肋
xpath('//*[@id="test"]/ol/li[position()=2]/text()')
10.Xpath 函数:
10.1统计数量:count
统计符合要求节点的数量, 注: 返回字符串
xpath('count(//tr[@info])')
10.2 字符串拼接 :concat
统计出来的两个内容的字符串进行“ + ”处理, 注: 返回字符串
xpath('concat(//li[@id="one"]/text(),//li[@id="three"]/text())')
10.3 解析当前节点下的字符:string
string()直解析匹配的第一个标签的值, 注: 返回字符串
xpath('string(//tr)')
10.4 获取当前节点的节点名称: local-name
返回当前属性的节点名称, 注: 返回字符串
xpath('local-name(//*[@id="test"])')
10.5 以指定的字符开头:starts-with
starts-with定位属性值以8开头的li元素
xpath('//tr[starts-with(@code,"one")]/text()')
10.6 小于:<
匹配所有tr标签属性info小于200的内容
xpath('//tr[@info<200]/text()')
11. 根据指定的文本内容选择
# 指定的文本内容可以是文本内容的部分, 也可以是全部
//div[2]/ul/li[contains(text(), "指定的文本内容")]/span/text()
12 . 获取在此节点下的所有内容
//*[@class="init-content"]/..
13 position:定位
选择偶数项:[position()=(position() mod 2 = 0)]
选择奇数项:[position()=(position() mod 2 != 0)]
14 其他
后面+:: 然后输入标签 或者数字
child:选取当前节点的子元素
parent:选取当前节点的父节点
attribute:选取当前节点的属性
ancestor:父辈元素 / ancestor-or-self:父辈元素及当前元素
descendant:后代 / descendant-or-self:后代及当前节点本身
方法同上
following :选取当前节点的结束标签之后的所有节点,包括节点的子孙节点
preceding:选取当前节点的开始标签之前的所有节点,包括节点的子孙节点
following-sibling:选取当前节点之后的所有同级节点
preceding-sibling:选取当前节点之前的所有同级节点
Xpath 高级用法的更多相关文章
- 【爬虫】Xpath高级用法
xpath速度比较快,是爬虫在网页定位中的较优选择,但是很多网页前端代码混乱难以定位,而学习定位也较为不易(主要是全面的教程较少),这里列出一点编程过程中可能有用的东西,欢迎共同学习批评指正.试验环境 ...
- XPath高级用法(冰山一角)
运算符+内置函数 使用XPath选择元素时,使用运算符+内置函数来进行筛选: .//div[contains(@class,"ec_desc") or contains(@clas ...
- Selenium WebDriver高级用法
Selenium GitHub地址 选择合适的WebDrvier WebDriver是一个接口,它有几种实现,分别是HtmlUnitDrvier.FirefoxDriver.InternetExplo ...
- Visual Studio 宏的高级用法
因为自 Visual Studio 2012 开始,微软已经取消了对宏的支持,所以本篇文章所述内容只适用于 Visual Studio 2010 或更早期版本的 VS. 在上一篇中,我已经介绍了如何编 ...
- SolrNet高级用法(分页、Facet查询、任意分组)
前言 如果你在系统中用到了Solr的话,那么肯定会碰到从Solr中反推数据的需求,基于数据库数据生产索引后,那么Solr索引的数据相对准确,在电商需求中经常会碰到菜单.导航分类(比如电脑.PC的话会有 ...
- sqlalchemy(二)高级用法
sqlalchemy(二)高级用法 本文将介绍sqlalchemy的高级用法. 外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增 ...
- Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)
上一篇,讲到了SolrNet的基本用法及CURD,这个算是SolrNet 的入门知识介绍吧,昨天写完之后,有朋友评论说,这些感觉都被写烂了.没错,这些基本的用法,在网上百度,资料肯定一大堆,有一些写的 ...
- 再谈Newtonsoft.Json高级用法
上一篇Newtonsoft.Json高级用法发布以后收到挺多回复的,本篇将分享几点挺有用的知识点和最近项目中用到的一个新点进行说明,做为对上篇文章的补充. 阅读目录 动态改变属性序列化名称 枚举值序列 ...
- Jquery remove 高级用法
Jquery remove 高级用法 html 代码 <div class="file-image">abc1111</div><div class= ...
随机推荐
- Web 前端实战:JQ 实现树形控件
前言 这是一篇个人练习 Web 前端各种常见的控件.组件的实战系列文章.本篇文章将介绍个人通过 JQuery + 无序列表 + CSS 动画完成一个简易的树形控件. 最终实现的效果是: 这样结构比较复 ...
- [Blender] Blender 获取 Instance 的信息
最近希望用 Blender 生成 Instance 的能力,将生成的导入游戏引擎中来渲染.Instance Rendering 是个好东西,特别是针对大场景,渲染成批的基本相同的物体的时候非常有用. ...
- from表单、css选择器、css组合器、字体样式、背景属性、边框设置、display设置
目录 一.form表单 1.form表单功能 2.表单使用原理 二.前端基础之css 1.关于css的介绍 2.css语法 3.三种编写CSS的方式 3.1.style内部直接编写css代码 3.2. ...
- python自学笔记10:while循环和for循环
条件控制和循环控制是两种典型的流程控制方法,前面我们写了 if 条件控制,这节讲 for 循环和 while 循环. 循环是另一种控制流程的方式,一个循环体中的代码在程序中只需要编写一次,但可能会连续 ...
- Ubuntu locale设置
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) 解决方法: 1 sudo locale-gen &q ...
- KingbaseES 并行查询
背景:随着硬件技术的提升,磁盘的IO能力及CPU的运算能力都得到了极大的增强,如何充分利用硬件资源为运算加速,是数据库设计过程中必须考虑的问题.数据库是IO和CPU密集型的软件,大规模的数据访问需要大 ...
- KingbaseES 如何查看应用执行的SQL的执行计划
通过explain ,我们可以获取特定SQL 的执行计划.但对于同一条SQL,不同的变量.不同的系统负荷,其执行计划可能不同.我们要如何取得SQL执行时间点的执行计划?KingbaseES 提供了 a ...
- KingbaseES R3 读写分离集群在线扩容案例
案例说明: 1. 通过sys_basebackup创建新备库. 2. 将备库加入到Cluster nodes管理,可以用kingbase_monitor.sh一键启停. 3. 主备复制切换测试. 此次 ...
- spark 写入数据到Geomesa(Hbase)
package com.grady.geomesa import org.apache.spark.sql.jts.PointUDT import org.apache.spark.sql.types ...
- HTTP 优缺点
HTTP 最凸出的优点是「简单.灵活和易于扩展.应用广泛和跨平台」. 1. 简单HTTP 基本的报文格式就是 header + body ,头部信息也是 key-value 简单文本的形式,易于理解, ...