简单说,xpath就是选择XML文件中节点的方法。

所谓节点(node),就是XML文件的最小构成单位,一共分成7种。

- element(元素节点)
- attribute(属性节点)
- text (文本节点)
- namespace (名称空间节点)
- processing-instruction (处理命令节点)
- comment (注释节点)
- root (根节点)

xpath可以用来选择这7种节点。不过,下面的笔记只涉及最常用的第一种element(元素节点),因此可以将下文中的节点和元素视为同义词。

一、xpath表达式的基本格式

xpath通过"路径表达式"(Path Expression)来选择节点。在形式上,"路径表达式"与传统的文件系统非常类似。

# 斜杠(/)作为路径内部的分割符。

# 同一个节点有绝对路径和相对路径两种写法。

# 绝对路径(absolute path)必须用"/"起首,后面紧跟根节点,比如/step/step/...。

# 相对路径(relative path)则是除了绝对路径以外的其他写法,比如 step/step,也就是不使用"/"起首。

# "."表示当前节点。

# ".."表示当前节点的父节点

二、选择节点的基本规则

- nodename(节点名称):表示选择该节点的所有子节点

- "/":表示选择根节点

- "//":表示选择任意位置的某个节点

- "@": 表示选择某个属性

三、选择节点的实例

先看一个XML实例文档。

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
    <title lang="eng">Harry Potter</title>
    <price>29.99</price>
  </book>

<book>
    <title lang="eng">Learning XML</title>
    <price>39.95</price>
  </book>

</bookstore>

[例1]

bookstore :选取 bookstore 元素的所有子节点。

[例2]

/bookstore :选取根节点bookstore,这是绝对路径写法。

[例3]

bookstore/book :选取所有属于 bookstore 的子元素的 book元素,这是相对路径写法。

[例4]

//book :选择所有 book 子元素,而不管它们在文档中的位置。

[例5]

bookstore//book :选择所有属于 bookstore 元素的后代的 book 元素,而不管它们位于 bookstore 之下的什么位置。

[例6]

//@lang :选取所有名为 lang 的属性。

四、xpath的谓语条件(Predicate)

所谓"谓语条件",就是对路径表达式的附加条件。

所有的条件,都写在方括号"[]"中,表示对节点进行进一步的筛选。

[例7]

/bookstore/book[1] :表示选择bookstore的第一个book子元素。

[例8]

/bookstore/book[last()] :表示选择bookstore的最后一个book子元素。

[例9]

/bookstore/book[last()-1] :表示选择bookstore的倒数第二个book子元素。

[例10]

/bookstore/book[position()<3] :表示选择bookstore的前两个book子元素。

[例11]

//title[@lang] :表示选择所有具有lang属性的title节点。

[例12]

//title[@lang='eng'] :表示选择所有lang属性的值等于"eng"的title节点。

[例13]

/bookstore/book[price] :表示选择bookstore的book子元素,且被选中的book元素必须带有price子元素。

[例14]

/bookstore/book[price>35.00] :表示选择bookstore的book子元素,且被选中的book元素的price子元素值必须大于35。

[例15]

/bookstore/book[price>35.00]/title :表示在例14结果集中,选择title子元素。

[例16]

/bookstore/book/price[.>35.00] :表示选择值大于35的"/bookstore/book"的price子元素。

五、通配符

# "*"表示匹配任何元素节点。

# "@*"表示匹配任何属性值。

# node()表示匹配任何类型的节点。

[例17]

//* :选择文档中的所有元素节点。

[例18]

/*/* :表示选择所有第二层的元素节点。

[例19]

/bookstore/* :表示选择bookstore的所有元素子节点。

[例20]

//title[@*] :表示选择所有带有属性的title元素。

六、选择多个路径

用"|"选择多个并列的路径。

[例21]

//book/title | //book/price :表示同时选择book元素的title子元素和price子元素。

【相关文章】

CSS选择器笔记

(完)

参考:

http://www.ruanyifeng.com/blog/2009/07/xpath_path_expressions.html

在线测试 :

http://mizar.dk/XPath/Default.aspx

xpath选择器使用的更多相关文章

  1. Python爬虫与数据分析之爬虫技能:urlib库、xpath选择器、正则表达式

    专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...

  2. 使用scrapy中xpath选择器的一个坑点

    情景如下: 一个网页下有一个ul,这个ur下有125个li标签,每个li标签下有我们想要的 url 字段(每个 url 是唯一的)和 price 字段,我们现在要访问每个li下的url并在生成的请求中 ...

  3. 常用xpath选择器和css选择器总结

    xpath选择器 表达式 说明 article 选取所有article元素的所有子节点 /article 选取根元素article article/a 选取所有属于article的子元素的a元素 // ...

  4. xpath选择器简介及如何使用

    xpath选择器简介及如何使用 一.总结 一句话总结:XPath 的全称是 XML Path Language,即 XML 路径语言,它是一种在结构化文档(比如 XML 和 HTML 文档)中定位信息 ...

  5. 在Scrapy中如何利用Xpath选择器从HTML中提取目标信息(两种方式)

    前一阵子我们介绍了如何启动Scrapy项目以及关于Scrapy爬虫的一些小技巧介绍,没来得及上车的小伙伴可以戳这些文章: 手把手教你如何新建scrapy爬虫框架的第一个项目(上) 手把手教你如何新建s ...

  6. Selenium(九):Xpath选择器

    1. Xpath选择器 1.1 Xpath语法简介 前面我们学习了CSS选择元素. 大家可以发现非常灵活.强大. 还有一种灵活.强大的选择元素的方式,就是使用Xpath表达式. XPath (XML ...

  7. 用Xpath选择器解析网页(lxml)

    在<爬虫基础以及一个简单的实例>一文中,我们使用了正则表达式来解析爬取的网页.但是正则表达式有些繁琐,使用起来不是那么方便.这次我们试一下用Xpath选择器来解析网页. 首先,什么是XPa ...

  8. 初始scrapy,简单项目创建和CSS选择器,xpath选择器(1)

    一 安装 #Linux: pip3 install scrapy #Windows: a. pip3 install wheel b. 下载twisted http://www.lfd.uci.edu ...

  9. 使用 XPath 选择器

    在前面的内容中,我们掌握了一些 CSS 选择器和它们的使用方法,以及 rvest 包中用于提取网页内容的函数.一般来说,CSS 选择器足够满足绝大部分的 HTML 节点匹配的需要.但是,当需要根据某些 ...

随机推荐

  1. Java 7 中 NIO.2 的使用——第四节 文件和目录

    Files类提供了很多方法用于检查在于你真正实际去操作一个文件或目录.这些方法强烈推荐,也非常有用,也能避免很多异常的发生.例如,一个很好的习惯就是在你试着移动一个文件从一个地方到另一个地方的时候,先 ...

  2. ansii、unicode、utf8 区别和关系

    本地化过程中涉及到源文件和目标文件的传输问题,这时候编码就显得很重要.中文的网页和操作系统中通常采用ANSI编码,这也是微软OS的一个字符标准.对于ANSI,不同的国家和地区制定了不同的标准,由此产生 ...

  3. bzoj 3293 数学整理

    和1045一模一样,找到这道题的时候还愣了下神,最后发现样例都是 一样的,直接粘了1045的代码,具体题解看 http://www.cnblogs.com/BLADEVIL/p/3468729.htm ...

  4. 【转载】让c++ 函数返回一个数组

    在c++中是不允许数组作为函数的返回值的 int [] someFunction( ); //ILLEGAL 要想实现函数返回一个数组,那返回对应数组里面类型的指针 you must return a ...

  5. 7 linux服务器程序规范

    1. Linux服务器程序一般以后台进程形式运行.后台进程又称守护进程(daemon),它没有控制终端,因而不会意外接收到用户输入.父进程通常为init(PID为1的进程)2. Linux服务器程序常 ...

  6. <context:annotation-config> 跟 <context:component-scan>诠释及区别

    <context:annotation-config> 是用于激活那些已经在spring容器里注册过的bean(无论是通过xml的方式还是通过package sanning的方式)上面的注 ...

  7. spring mvc Controller与jquery Form表单提交代码demo

    1.JSP表单 <% String basePath = request.getScheme() + "://" + request.getServerName() +&qu ...

  8. HDU 1869 六度分离

    六度分离 http://acm.hdu.edu.cn/showproblem.php?pid=1869 Problem Description 1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一 ...

  9. asp.net网站中添加百度地图功能

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...

  10. **apache环境下 禁止显示 index of/ 目录下(如何禁止访问网站根目录)

    比如: http://123.57.49.XX6// 当这样访问的时候,可能会列出网站的根目录 如何禁止列出网站目录,方法如下: 让别人知道你的网站目录结构直接查看你目录下的所有文件是很危险的一个事情 ...