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. linux关于profile 、bashrc 、.bash_profile、.bashrc的区别

    linux关于profile .bashrc ..bash_profile..bashrc的区别 - /etc/profile /etc/bashrc ~/.bash_profile ~/.bashr ...

  2. mybatis零碎

    <           <    小于号 >          >    大于号 &     &        和 &apos;     '     单 ...

  3. Spring框架(第一天)

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

  4. 【PHP数据结构】二叉树的遍历及逻辑操作

    上篇文章我们讲了许多理论方面的知识,虽说很枯燥,但那些都是我们今天学习的前提,一会看代码的时候你就会发现这些理论知识是多么地重要了.首先,我们还是要说明一下,我们学习的主要内容是二叉树,因为二叉树是最 ...

  5. 微信公众号jssdk分享接口onMenuShareAppMessage自定义的参数无效,微信分享失败原因

    使用jssdk为jweixin-1.4.0.js updateTimelineShareData,安全域名接口也设置正确,可就是分享,转发朋友圈不成功. 解决方案:采用<script src=& ...

  6. 【PHP】数组按照字母排序

    /** * 将数组按字母A-Z排序 * @return [type] [description] */ private function chartSort($list) { // $user=$th ...

  7. Charles抓包工具过滤网络请求

    Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据.它允许一个开发者查看所有连接互联 ...

  8. CI框架 模糊查询,链表查询

    $data = $this->db->from('flash_news') ->select('xx,xx,xx,xx') ->limit(2) ->like('tags ...

  9. 深度理解JVM

      1. 环境搭建 安装jdk 2. 内存溢出场景模拟 public class Test01 { public static void main(String[] args) { //测试内存溢出 ...

  10. Linux下实现高可用软件-Keepalived基础知识梳理

    Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此,Keepali ...