欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据提取(一):Xpath - 语法

程序员文章站 2022-07-14 17:00:43
...

一、Xpath简述

xpath(XML Path Language)是一门在XML、HTML文档中查找信息的语言,可用来在XML HTML文档中对元素和属性进行遍历

二、Xpath Helper简述

xPath helper 是xpath的开发工具,是一款 Chrome 浏览器的开发者插件/Firefox插件为Try Xpath,安装了 xPath helper 后能轻松获取 HTML元素的 xPath,程序员不再需要通过搜索 html 源代码,定位一些 id 去找到对应的位置去解析网页了

三、Xpath节点

Xpath有七种类型的节点:
元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点
XML 文档是被作为节点树来对待的,树的根被称为文档节点或者根节点

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book>
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
</bookstore>


(1)上面的XML文档中的节点例子:
<bookstore> (文档节点)
<author>J K. Rowling</author> (元素节点)
lang="en" (属性节点)

(2)基本值的例子:J K. Rowling"en"
基本值(或称原子值,Atomic value):基本值是无父或无子的节点。

(3)项目(Item):项目是基本值或者节点。

(4)节点的关系:
父:每个元素以及属性都有一个父。
子:元素节点可有零个、一个或多个子
同胞:拥有相同的父的节点
先辈:某节点的父、父的父,等等。
后代:某个节点的子,子的子,等等。

四、Xpath语法

XPath 使用路径表达式来选取 XML 文档中的节点或节点集
节点通过沿着路径 (path) 或者步 (steps) 来选取

(1)选取结点

路径表达式 描述 示例 结果
nodename 选取此节点的所有子节点 bookstore 选取bookstore下所有的子节点
/ 如果是在最前面 代表从根节点开始选取 否则选择某结点下的某个节点 (1)/bookstore(2)bookstore/book (1)选取根结点下所有的bookstore结点(2)选取bookstore节点下所有的book结点 注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
// 从全局结点中中选择节点,随便在哪个位置 (1)//book (2)bookstore//book (1)从全局节点中找到所有的book结点,不管他们在哪个位置(2)选择 bookstore结点后代中的所有 book结点,不管它们位于 bookstore 之下的什么位置
@ 选取某个节点的属性 (1)//book[@price](2)//@lang (1)选取所有拥有price属性的book结点(2)选取名为 lang 的所有属性
. 选取当前节点
.. 选取当前节点的父节点

数据提取(一):Xpath - 语法

(1)查找book 
方法一:html/body/bookstore/book  
	注意head和body同级的,不是html/head/body/bookstore/book 
方法二://book
结果得到两个book

注意/获取子节点 //获取子孙节点

(2)查找lang属性
//book/title[@lang="eng"]  选取所有的title结点 且这些节点拥有属性值为eng的lang属性
结果得到 Harry Potter
//book/title[@lang]  选取所有的title结点 且这些节点拥有lang属性

	 注意有时候属性包含了多个值使用contains()函数,如
	 //title[contains(@lang,'eng')]

(3)上面例子中有两个book,如果只查找其中某一个book 就要用到谓语
	特别注意:第一个下标是从 1 开始 不是从 0 开始
所谓谓语,是用来查找某个特定的节点或者包含某个指定的值的节点,谓语被嵌在方括号中

/bookstore/book[price>35.00]	
选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title	
选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

(2)谓语/谓词
数据提取(一):Xpath - 语法
(3)通配符 *

通配符 描述 示例 结果
* 匹配任意节点 /bookstore/* 选取bookstore下的所有子元素
@* 匹配节点的任意属性 //book[@*] 选取所有带有属性的book元素

(4)运算符
数据提取(一):Xpath - 语法

特别注意逻辑或是or
| 是计算两个节点集 主要用来选取若干路径 如
//bookstore/book | //book/title
选取所有book元素以及book元素下所有的title元素
相关标签: 爬虫学习 爬虫