XPath语法
相信写过爬虫的同学,都知道XPath的存在。博主最近在学习 Scrapy 的时候,就了解了一下XPath语法,这里给大家简单地介绍一下: 首先我们需要了解几个 XPath 术语。 2017/3/3 16:02:29 在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。 以下面这xml文档为例: 上面例子的节点为: 父:每个元素以及属性都有一个父。例子中的父是; 子:元素节点可有零个、一个或多个子。例子中的子是; 兄弟:拥有相同的父的节点。例子中和是兄弟; 祖先:某节点的父、父的父,等等。 后代:某节点的子、子的子,等等。 基本值是无父或无子的节点。 上面例子的基本值为: 项目是基本值或者节点。 ok,接下来开始正式讲解 XPath 语法(注意,以下表达式当然可以混合使用): 选取此节点的所有子节点。 从根节点选取。 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 选取当前节点。 选取当前节点的父节点。 选取属性。 对于如下的xml文档(参照 http://www.tuicool.com/articles/iqQFBn ) 如果使用: data = selector.xpath('//div[@id="test2"]/text()').extract()[0] 只能提取到“美女,”; 如果使用: data = selector.xpath('//div[@id="test2"]/font/text()').extract()[0] 又只能提取到“你的微信是多少?” 到底我们要怎样才能把“美女,你的微信是多少”提取出来? 轻松搞定,没有后顾之忧!!
XPath语法
XPath的语法 我们在前面已经提到过 XPath是用来帮助XSLT在XML源文档中查找定位信息的语言 在实际使用过程中 XPath和XSLT总是混在一起使用 在上面一章的语法例子中我们已经有使用到XPath的语法 只是没有明确点出 但W C将它们分成两个标准 所以我们也将它们拆成两章来讲解 XPath的语法 当前位置 寻址操作 运算符 功能函数 当前位置 当我们使用XSLT处理XML源文档是 我们用Context来表示当前正在被模板处理的节点位置 比如xsl:template match= / 语句中表示Context在文档的根(root)节点 我不知道如何准确的翻译Context这个词 它类似于C语言里的指针 表示程序当前运行的位置 理解Context对于正确处理XSL模板非常重要 当您的XSL模板输出的文档和您想要的不一样 最先应该分析的就是Context在哪里 Location Paths是用于设定你想要寻找的Context节点位置 就类似DOS的目录命令 我们看个例子 其中child::PEOPLE/descendant::PERSON就是XPath语法 这个表达式就是一个Location Paths 代码说明要显示所有PEOPLE元素的子元素和所有PERSON元素的子元素 通常我们会采用更简单的写法 我们来解释path的两种表示方法 / 和 // / 是表示当前文档的节点 类似DOS目录分割符 例如 /PEOPLE表示选择根节点下的PEOPLE元素 PEOPLE/PERSON表示选择PEOPLE元素下所有的PESON子元素 // 则表示当前文档所有的节点 类似查看整个目录 例如 //PEOPLE表示选择文档中所有的PEOPLE元素 无论它在什么层次 PEOPLE//PERSON表示在PEOPLE元素下所有的PERSON元素 无论它的层次多深 寻址操作 Axis和Predicate是XPath语法中对Location Paths进行定位操作的语法 具体的用法列表如下 Axis语法表 表达式 简写 说明 self 选择当前的节点 例子 : 代码表示在当前位置插入当前的节点包含的文本(text)值 parent 选择当前节点的父节点 attribute @ 选择一个元素的所有属性 例子: 选择PERSON元素的所有属性 child 选择当前节点的所有子元素 ancestor 选择当前节点的所有父元素(包括父元素的父元素 类推) Axis帮助我们选择当前节点周围所有的节点 而Predicate则用来定位当前节点内部的元素 表示方法为方括号[]中加表达式 [ Expression ] 具体举例如下: PERSON[position()= ] 这句代码表示寻找第二个 PERSON 元素 PERSON[starts with(name B )] 这句代码表示寻找所有名称以 B 开头的PERSON元素 运算符 这一节介绍XPath的运算符(Expressions) 列表如下 运算符 说明 and or 就是普通意义的and or = 等于 != 不等于 > >= 大于 大于等于 < <= 小于 小于等于 注意 在XSL文件中 <符号要用< 表示 * div 加减乘除 mod 取模 | 两个节点一起计算 功能函数(Functions) 在XPath里有很多功能函数可以帮助我们精确寻找需要的节点 count()功能 作用 统计计数 返回符合条件的节点的个数 举例
说明 代码的用途是显示PERSON元素中姓名属性值为tom有几个 number()功能 作用 将属性的值中的文本转换为数值 举例
The number is:
说明 代码的用途是显示书的价格 substring() 功能 语法 substring(value start length) 作用 截取字符串 举例
说明 代码的用途是截取name元素的值 从第一个字母开始显示到第三个 sum()功能 作用 求和 举例
Total Price = 说明 代码的用途是计算所有价格的和 上面这些功能只是XPath语法中的一部分 还有大量的功能函数没有介绍 而且目前XPath的语法仍然在不断发展中 通过这些函数我们可以实现更加复杂的查询和操作 lishixinzhi/Article/program/ASP/201311/21862