Python神技能:六张表 搞定 Xpath 语法

作者:j_hao104

来源:见文末

一、选取节点

常用的路劲表达式:

表达式

描述

实例

nodename

选取nodename节点的所有子节点

xpath('//div')

选取了div节点的所有子节点

/

从根节点选取

xpath('/div')

从根节点上选取div节点

//

选取所有的当前节点,不考虑他们的位置

xpath('//div')

选取所有的div节点

.

选取当前节点

xpath('./div')

选取当前节点下的div节点

..

选取当前节点的父节点

xpath('..')

回到上一个节点

@

选取属性

xpath('//@calss')

选取所有的class属性

二、谓语

谓语被嵌在方括号内,用来查找某个特定的节点或包含某个制定的值的节点

实例:

表达式

结果

xpath('/body/div[1]')

选取body下的第一个div节点

xpath('/body/div[last()]')

选取body下最后一个div节点

xpath('/body/div[last()-1]')

选取body下倒数第二个div节点

xpath('/body/div[positon()<3]')

选取body下前两个div节点

xpath('/body/div[@class]')

选取body下带有class属性的div节点

xpath('/body/div[@class="main"]')

选取body下class属性为main的div节点

xpath('/body/div[price>35.00]')

选取body下price元素值大于35的div节点

三、通配符

Xpath通过通配符来选取未知的XML元素

表达式

结果

xpath('/div/*')

选取div下的所有子节点

xpath('/div[@*]')

选取所有带属性的div节点

四、取多个路径

使用“|”运算符可以选取多个路径

表达式

结果

xpath('//div|//table')

选取所有的div和table节点

五、Xpath轴

轴可以定义相对于当前节点的节点集

轴名称

表达式

描述

ancestor

xpath('./ancestor::*')

选取当前节点的所有先辈节点(父、祖父)

ancestor-or-self

xpath('./ancestor-or-self::*')

选取当前节点的所有先辈节点以及节点本身

attribute

xpath('./attribute::*')

选取当前节点的所有属性

child

xpath('./child::*')

返回当前节点的所有子节点

descendant

xpath('./descendant::*')

返回当前节点的所有后代节点(子节点、孙节点)

following

xpath('./following::*')

选取文档中当前节点结束标签后的所有节点

following-sibing

xpath('./following-sibling::*')

选取当前节点之后的兄弟节点

parent

xpath('./parent::*')

选取当前节点的父节点

preceding

xpath('./preceding::*')

选取文档中当前节点开始标签前的所有节点

preceding-sibling

xpath('./preceding-sibling::*')

选取当前节点之前的兄弟节点

self

xpath('./self::*')

选取当前节点

六、功能函数

使用功能函数能够更好的进行模糊搜索

函数

用法

解释

starts-with

xpath('//div[starts-with(@id,"ma")]')

选取id值以ma开头的div节点

contains

xpath('//div[contains(@id,"ma")]')

选取id值包含ma的div节点

and

xpath('//div[contains(@id,"ma") and contains(@id,"in")]')

选取id值包含ma和in的div节点

text()

xpath('//div[contains(text(),"ma")]')

选取节点文本包含ma的div节点

scrapy xpath文档:http://doc.scrapy.org/en/0.14/topics/selectors.html

作者:j_hao104 来源:https://my.oschina.net/jhao104/blog/639448

《Python人工智能和全栈开发》2018年07月23日即将在北京开课,120天冲击Python年薪30万,改变速约~~~~

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2018-06-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python学习指南

python生成式

本篇将介绍Python的列表生成式,更多内容请参考:Python列表生成式 列表生成式即List Comprehensions,是Python内置的非常简...

1918
来自专栏算法修养

线性DP总结(LIS,LCS,LCIS,最长子段和)

做了一段时间的线性dp的题目是时候做一个总结 线性动态规划无非就是在一个数组上搞嘛, 首先看一个最简单的问题: 一,最长字段和 下面为状...

2527
来自专栏xingoo, 一个梦想做发明家的程序员

cuda中的二分查找

  使用背景 通常,在做高性能计算时,我们需要随机的连接某些点。这些点都具有自己的度量值,显然,度量值越大的值随机到的概率就会越大。因此,采用加权值得方法: v...

1765
来自专栏IT笔记

京东2017校园招聘笔试真题(希尔排序)

对关键字{10,20,8,25,35,6,18,30,5,15,28}序列进行希尔排序,取增量d =5时,排序结果为( ) A. {6,18,8,5,15,10...

2935
来自专栏木子昭的博客

正则 (入门篇)简单来说写好正则表达式的两个要点:写在最后

如果你对正则感兴趣,读完这篇文章,一定会有收获~_^ 简单来说 正则一般代指正则表达式 正则表达式是从"复杂数据"中抽取"有用数据"的公式 ---- 写好正则...

2918
来自专栏青玉伏案

算法与数据结构(十七) 基数排序(Swift 3.0版)

前面几篇博客我们已经陆陆续续的为大家介绍了7种排序方式,今天博客的主题依然与排序算法相关。今天这篇博客就来聊聊基数排序,基数排序算法是不稳定的排序算法,在排序数...

1846
来自专栏Python小屋

Python符号计算入门及隐函数图像绘制

感谢国防科大刘万伟老师提供了隐函数图像绘制的原始问题以及完美答案,我又补充了一点符号计算的基础知识。 >>> from sympy import * #定义符号...

2845
来自专栏黄Java的地盘

正则表达式之进阶篇

本文主要通过介绍正则表达式中的一些进阶内容,让读者了解正则表达式在日常使用中用到的比较少但是又比较重要的一部分内容,从而让大家对正则表达式有一个更加深刻的认识。

673
来自专栏程序猿DD

第三章 正则表达式括号的作用

第三章 正则表达式括号的作用 不管哪门语言中都有括号。正则表达式也是一门语言,而括号的存在使这门语言更为强大。 对括号的使用是否得心应手,是衡量对正则的掌握水平...

2046
来自专栏数据结构与算法

1230 元素查找

1230 元素查找 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 给出...

1853

扫码关注云+社区