说在前面:

由于目前一直在做爬虫,之前常使用requests模块,现在改用scrapy框架。在解析页面元素的时候,本人常常喜欢使用xpath,所以为了以后忘记语法,做一个总结,便于查看。

1.xpath介绍

XPath,全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。

  • XPath 使用路径表达式在 XML 文档中进行导航
  • XPath 包含一个标准函数库
  • XPath 是 XSLT 中的主要元素
  • XPath 是一个 W3C 标准

2.节点(Node)

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

看懂可能更加清楚。

2.2 xpath中节点的关系

2.3 xpath中节点选择的工具
Chrome插件 XPath Helper,下载地址:https://pan.baidu.com/s/1UM94dcwgus4SgECuoJ-Jcg 密码:337b

3.xpath语法

下面列出了最常用的表达式

表达式 描述
nodename 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
选取当前节点的父节点
@ 选取属性
text() 选取文本

实例

<?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>
路径表达式 解释
bookstore 选择bookstore元素。
/bookstore 选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
bookstore/book 选取属于 bookstore 的子元素的所有 book 元素。
//book 选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//book/title/@lang 选择所有的book下面的title中的lang属性的值。
//book/title/text() 选择所有的book下面的title的文本。

4.谓语 & 查找特定的节点

路径表达式 解释
/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()< 3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
/bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

注意点: 在xpath中,第一个元素的位置是1,最后一个元素的位置是last(),倒数第二个是last()-1

5.选取未知节点

通配符 描述
* 匹配任何元素节点。
@* 匹配任何属性节点。
node() 匹配任何类型的节点。

举例:

路径表达式 结果
/bookstore/* 选取 bookstore 元素的所有子元素。
//* 选取文档中的所有元素。
//title[@*] 选取所有带有属性的 title 元素。

6.选取若干路径

通过在路径表达式中使用“|”运算符,可以选取若干个路径。

路径表达式 结果
//book/title | //book/price 选取 book 元素的所有 title 和 price 元素。
//title | //price 选取文档中的所有 title 和 price 元素。
/bookstore/book/title | //price 选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。

7.常用函数

7.1 starts-with() 获取以xxx开头的元素

xpath(‘//div[stars-with(@class,”test”)]’)

7.2 ends_with() 以xxx结尾

xpath("//input[ends-with(@id,'fuck')]")

7.3 contains() 获取包含xxx的元素

xpath(‘//div[contains(@id,”test”)]’)

7.4 and 并且 同时

xpath("//input[@type='submit' and @name='fuck']")

7.5 or 或者

xpath("//input[@type='submit' or @name='fuck']")

7.6 not 非

xpath("//input[@type='submit' and not(contains(@name,'fuck'))]")

7.7 text()

xpath(‘//div[contains(text(),”test”)]’)
xpath(‘//div[@id=”“test]/text()’)

8.嗯呃呃讷讷

以上资料,都是来源网上,都是总结!以后,有知识,还会继续补充!!

python中的Xpath方法总结相关推荐

  1. python中xpath定位_xpath最新:关于python中的xpath解析定位_爱安网 LoveAn.com

    关于"xpath"的最新内容 聚合阅读 这篇文章主要介绍了关于python中的xpath解析定位,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧... 这篇文章主要 ...

  2. python汇率转换_利用Python中的Xpath实现一个在线汇率转换器

    前言 在之前的语法里面,我们记得有一个初识Python之汇率转换篇,在那个程序里面我们发现可以运用一些基础的语法写一个汇率计算,但是学到后面的小伙伴就会发现这个小程序有一定的弊端. 首先,它不可以实时 ...

  3. python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法

    python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录

  4. python使用方法-在Python中使用next()方法操作文件的教程

    next()方法当一个文件被用作迭代器,典型例子是在一个循环中被使用,next()方法被反复调用.此方法返回下一个输入行,或引发StopIteration异常EOF时被命中. 与其它文件的方法,如Re ...

  5. python中range 10 0_如何在python中使用range方法

    如何在python中使用range方法 发布时间:2021-01-05 16:55:23 来源:亿速云 阅读:94 作者:Leah 如何在python中使用range方法?很多新手对此不是很清楚,为了 ...

  6. Python中sys.argv方法的一些典型用法

    本文整理汇总了Python中sys.argv方法的典型用法代码示例. 示例1: weather_icons # 需要导入模块: import sys [as 别名] # 或者: from sys im ...

  7. python中函数和方法的区别

    本篇内容主要介绍从几个维度来介绍下python中函数和方法的区别: 首先,从分类的角度来分析. (1)函数的分类: 内置函数:python内嵌的一些函数. 匿名函数:一行代码实现一个函数功能. 递归函 ...

  8. python脚本怎么使用_在Python中使用next()方法操作文件的教程

    next()方法当一个文件被用作迭代器,典型例子是在一个循环中被使用,next()方法被反复调用.此方法返回下一个输入行,或引发StopIteration异常EOF时被命中. 与其它文件的方法,如Re ...

  9. Python 中的特殊方法(定制类):__str__、__cmp__、__len__、数学运算、类型转换、@property运用、__slots__和__call__函数

    Python中的特殊方法 Python的特殊方法定义在 class中,不需要直接进行显示调用,Python的某些操作符或者函数会自动调用对应的特殊方法.这些方法如:__str__().__len__( ...

最新文章

  1. 世界上最好的光刻机为什么来自荷兰?【物联网智商精选】
  2. Linux命令 -- ps
  3. ECMall如何在后台添加模板编辑页
  4. nssl1437-逮虾户【二分答案】
  5. HTML文件上传对象file
  6. 中间固定两边自适应 两边固定中间自适应 promise
  7. Unreal Engine 4 —— 版本兼容的工作原理以及一些可优化项
  8. Confluence自启动脚本
  9. 用txt写的mysql数据库_TXT怎么导入mySQL数据库
  10. vue-baidu-map + mapv 实现百度地图迁徙图动效
  11. 网页图片不能显示怎么办
  12. 学生党专用计算机,学生党平价笔记本电脑 最适合学生的高性价比电脑推荐
  13. oracle dul 扫描磁盘,案例:Oracle dul数据挖掘 磁盘损坏dul提取数据文件中表的数据及l...
  14. 查看IC卡芯片的位置
  15. 设置在桌面上显示计算机 回收站图标,我电脑属性自定义桌面,没有显示回收站的图标 怎么处理啊...
  16. [ Cesium ] 根据卫星位置,建立实时动态连线
  17. mysql练习-数据查询之嵌套查询
  18. 牧牛商学院,区块链技术在会计领域的应用
  19. 中国造富运动惊人 30年跃为全球钱最多国家
  20. Android开发五年,从月薪13K到年薪60W,我只用了三个月!

热门文章

  1. 桥接模式coding
  2. 设计模式之_Iterator_04
  3. 对象的多态(核心、困难、重点)
  4. zsh配置其显示当前文件路径
  5. MOS管的工作原理及常见的封装(看完必会)
  6. Linux下区分物理CPU、逻辑CPU和CPU核数
  7. docker-machine create -d generic 运行的波折过程及遇见的问题
  8. ElasticSearch6.5.0 【安装IK分词器】
  9. tab翻页导致的问题
  10. 人人网 6.0 版申请页面随着滚动条拖动背景图片滚动出现,具体使用 JavaScript 和 CSS 原理是什么?...