5、position定位

    >>print tree.xpath('//*[@id="testid"]/ol/li[position()=2]/text()')[0]
>>2 6、条件 >>定位所有h2标签中text值为`这里是个小标题`
>>print tree.xpath(u'//h2[text()="这里是个小标题"]/text()')[0]
>>这里是个小标题 7、函数 count:统计 >>print tree.xpath('count(//li[@data])') #节点统计
>>3.0 concat:字符串连接 >>print tree.xpath('concat(//li[@data="one"]/text(),//li[@data="three"]/text())')
>>13 string:解析当前节点下的字符 >>#string只能解析匹配到的第一个节点下的值,也就是作用于list时只匹配第一个
>>print tree.xpath('string(//li)')
>>时间 local-name:解析节点名称 >>print tree.xpath('local-name(//*[@id="testid"])') #local-name解析节点名称
>>div contains(string1,string2):如果 string1 包含 string2,则返回 true,否则返回 false >>tree.xpath('//h3[contains(text(),"H3")]/a/text()')[0] #使用字符内容来辅助定位
>>百度一下 >>一记组合拳
>>#匹配带有href属性的a标签的先辈节点中的div,其兄弟节点中前一个div节点下ul下li中text属性包含“务”字的节点的值
>>print tree.xpath(u'//a[@href]/ancestor::div/preceding::div/ul/li[contains(text(),"务")]/text()')[0]
>>任务 not:布尔值(否) >>print tree.xpath('count(//li[not(@data)])') #不包含data属性的li标签统计
>>18.0 string-length:返回指定字符串的长度 >>#string-length函数+local-name函数定位节点名长度小于2的元素
>>print tree.xpath('//*[string-length(local-name())<2]/text()')[0]
>>百度一下 组合拳2 >>#contains函数+local-name函数定位节点名包含di的元素
>>print tree.xpath('//div[@id="testid"]/following::div[contains(local-name(),"di")]')
>>[<Element div at 0x225e108>, <Element div at 0x225e0c8>] or:多条件匹配 >>print tree.xpath('//li[@data="one" or @code="84"]/text()') #or匹配多个条件
>>['1', '84']
>>#也可使用|
>>print tree.xpath('//li[@data="one"]/text() | //li[@code="84"]/text()') #|匹配多个条件
>>['1', '84'] 组合拳3:floor + div除法 + ceiling >>#position定位+last+div除法,选取中间两个
>>tree.xpath('//div[@id="go"]/ul/li[position()=floor(last() div 2+0.5) or position()=ceiling(last() div 2+0.5)]/text()')
>>['5', '6'] 组合拳4隔行定位:position+mod取余 >>#position+取余运算隔行定位
>>tree.xpath('//div[@id="go"]/ul/li[position()=((position() mod 2)=0)]/text()') starts-with:以。。开始 >>#starts-with定位属性值以8开头的li元素
>>print tree.xpath('//li[starts-with(@code,"8")]/text()')[0]
>>84 8、数值比较 <:小于 >>#所有li的code属性小于200的节点
>>print tree.xpath('//li[@code<200]/text()')
>>['84', '104'] div:对某两个节点的属性值做除法 >>print tree.xpath('//div[@id="testid"]/ul/li[3]/@code div //div[@id="testid"]/ul/li[1]/@code')
>>2.65476190476 组合拳4:根据节点下的某一节点数量定位 >>#选取所有ul下li节点数大于5的ul节点
>>print tree.xpath('//ul[count(li)>5]/li/text()')
>>['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'] 9、将对象还原为字符串 >>> s = tree.xpath('//*[@id="testid"]')[0] #使用xpath定位一个节点
>>> s
<Element div at 0x2b6ffc8>
>>> s2 = etree.tostring(s) #还原这个对象为html字符串
>>> s2
'<div id="testid">\n\t\t<h2>ÕâÀïÊǸöС±êÌâ</h2>\n\t\t<ol>\n\t\t\t<li data="one">1</li>\n\t\t\t<li data="two">2</li>\n\t\t\t<li data="three">3</li>\n\t\t</ol>\n\t\t<ul>\n\t\t\t<li code="84">84</li>\n\t\t\t<li code="104">104</li>\n\t\t\t<li code="223">223</li>\n\t\t</ul>\n\t</div>\n\t' 10、选取一个属性中的多个值 举例:<div class="mp-city-list-container mp-privince-city" mp-role="provinceCityList">
选择这个div的方案网上有说用and的,但是似乎只能针对不同的属性的单个值
本次使用contains
>>.xpath('div[contains(@class,"mp-city-list-container mp-privince-city")]')
>>当然也可以直接选取其属性的第二个值
>>.xpath('div[contains(@class,"mp-privince-city")]')
>>重点是class需要添加一个@符号
本次验证否定了网上的and,使用了contains,验证环境在scrapy的response.xpath下

作者:whaike
链接:https://www.jianshu.com/p/1575db75670f
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Xpath运算符的更多相关文章

  1. XPath 运算符

    XPath 表达式可返回节点集.字符串.逻辑值以及数字. XPath 运算符 下面列出了可用在 XPath 表达式中的运算符: 运算符 描述 实例 返回值 | 计算两个节点集 //book | //c ...

  2. [XPath] XPath 与 lxml (四)XPath 运算符

    XPath 中支持的运算符 # | 或: 返回所有 price 和 title 节点集合 >>> root.xpath('//price|//title') [<Element ...

  3. Python爬虫利器三之Xpath语法与lxml库的用法

    前面我们介绍了 BeautifulSoup 的用法,这个已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法.如果大家对 Beau ...

  4. HtmlAgilityPackage XPath学习

    最近的开发中要用到htmlAgilityPackage, 所以记录一下XPath相关知识! XPath 简介 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对 ...

  5. 初学XPath,其实很简单

    XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. (我的理解:XPath 就是一个用来查找xml节点的路径语言,一个路径字符串语法) XM ...

  6. XPath操作XML文档

    NET框架下的Sytem.Xml.XPath命名空间提供了一系列的类,允许应用XPath数据模式查询和展示XML文档数据. 3.1XPath介绍 主要的目的是在xml1.0和1.1文档节点树种定位节点 ...

  7. XPath <第四篇>

    .Net框架下的System.Xml.XPath命名空间提供了一系列的类,允许你应用XPath数据模式查询和展示XML文档数据. 一.XPath介绍 XPath有七种类型的节点:元素.属性.文本.命名 ...

  8. Dom4j和Xpath(转)

    1.DOM4J简介 DOM4J是 dom4j.org 出品的一个开源 XML 解析包.DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和JAXP. DOM4J使 ...

  9. 芝麻HTTP:Python爬虫利器之Xpath语法与lxml库的用法

    安装 ​pip install lxml 利用 pip 安装即可 XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPat ...

随机推荐

  1. Spring框架(第一天)

    一. 引言 a) 什么是Spring框架?(spring官网:www.springsource.org) 3.x  不提供第三发依赖jar 目前已经到了5.x版本. Spring轻量级(代码入侵性小) ...

  2. 一起学习PHP中GD库的使用(二)

    在日常的开发过程中,GD 库最常用的功能就是帮我们对图片进行一些处理,当然,除了处理已有的图片之外,它也可以直接来画图,就像我们最常见的图片验证码.今天的内容主要就是和画图有关,所以最后我们也会做一个 ...

  3. PHP多文件上传格式化

    文件上传是所有web应用中最常见的功能,而PHP实现这一功能也非常的简单,只需要前端设置表单的 enctype 值为 multipart/form-data 之后,我们就可以通过 $_FILES 获得 ...

  4. oracle 基础SQL语句 增删改

    一.SQL操作 查询已创建的数据库:SELECT datname FROM pg_database; 创建数据库:CREATE DATABASE wzxdb; 删除数据库:DROP DATABASE ...

  5. Jmeter目录分析

    通讯协议 最重要的基础知识. 性能测试的原理?通过协议模拟压力 jmeter目录结果解析 bin docs,文档 lib,存放库文件,所依赖的jar包 ext jmeter自己的jar包 jmeter ...

  6. cannot connect to chrome at 127.0.0.1:9222

    window10系统,先cmd打开chrome, chrome --remote-debugging-port=9222 执行脚本 from selenium import webdriver fro ...

  7. aws中centos登陆连接设置

    第一步:使用aws密钥文件(.pem)登陆(*在shell中需使用新建的会话,不能直接,使用原来的会话进行修改,否则无法进入) 点击浏览器,点添加,再点击导入,选择.pem 文件 第二步: 登陆后,使 ...

  8. sonar入门

    一.Sonar是什么? 根据我的了解,可以说Sonar包含三个部分: SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码味道.它可以与您现有的工作流程集成,以实现跨项目分支和提 ...

  9. 数据库管理软件navicate12的激活和安装

    前言   太多做测试或开发的小伙伴需要写sql语句,激活版navicat版本它来了 准备软件 navicat12安装包 navicat注册机 百度网盘下载链接(永久有效): 链接:https://pa ...

  10. 【死磕NIO】— 阻塞IO,非阻塞IO,IO复用,信号驱动IO,异步IO,这你真的分的清楚吗?

    通过上篇文章([死磕NIO]- 阻塞.非阻塞.同步.异步,傻傻分不清楚),我想你应该能够区分了什么是阻塞.非阻塞.异步.非异步了,这篇文章我们来彻底弄清楚什么是阻塞IO,非阻塞IO,IO复用,信号驱动 ...