当前位置:网站首页 > 技术博客 > 正文

用python解析xml的几种方法



lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高

XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索

XPath的选择功能十分强大,它提供了非常简明的路径选择表达式,另外,它还提供了超过100个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有我们想要定位的节点,都可以用XPath来选择

XPath于1999年11月16日成为W3C标准,它被设计为供XSLT、XPointer以及其他XML解析软件使用,更多的文档可以访问其官方网站:https://www.w3.org/TR/xpath/

windows系统下的安装:

linux下安装:

验证安装:

表达式 描述 nodename 选取此节点的所有子节点 / 从当前节点选取直接子节点 // 从当前节点选取子孙节点 . 选取当前节点 .. 选取当前节点的父节点 @ 选取属性 * 通配符,选择所有元素节点与元素名 @* 选取所有属性 [@attrib] 选取具有给定属性的所有元素 [@attrib='value'] 选取给定属性具有给定值的所有元素 [tag] 选取所有具有指定元素的直接子节点 [tag='text'] 选取所有具有指定元素并且文本内容是text节点

(1)读取文本解析节点

(3)获取所有节点

返回一个列表每个元素都是Element类型,所有节点都包含在其中

如要获取li节点,可以使用//后面加上节点名称,然后调用xpath()方法

(4)获取子节点

通过/或者//即可查找元素的子节点或者子孙节点,如果想选择li节点的所有直接a节点,可以这样使用

(5)获取父节点

我们知道通过连续的/或者//可以查找子节点或子孙节点,那么要查找父节点可以使用..来实现也可以使用parent::来获取父节点

(6)属性匹配

在选取的时候,我们还可以用符号进行属性过滤。比如,这里如果要选取为的节点,可以这样实现:

(7)文本获取

我们用XPath中的text()方法获取节点中的文本

(8)属性获取

使用@符号即可获取节点的属性,如下:获取所有li节点下所有a节点的href属性

(9)属性多值匹配

如果某个属性的值有多个时,我们可以使用contains()函数来获取

(10)多属性匹配

另外我们还可能遇到一种情况,那就是根据多个属性确定一个节点,这时就需要同时匹配多个属性,此时可用运用and运算符来连接使用:

(11)XPath中的运算符

运算符 描述 实例 返回值

or

或 age=19 or age=20 如果age等于19或者等于20则返回true反正返回false and 与 age>19 and age<21 如果age等于20则返回true,否则返回false mod 取余 5 mod 2 1 | 取两个节点的集合 //book | //cd 返回所有拥有book和cd元素的节点集合 + 加 6+4 10 - 减 6-4 2 * 乘 6*4 24 div 除法 8 div 4 2 = 等于 age=19 true != 不等于 age!=19 true < 小于 age<19 true <= 小于或等于 age<=19 true > 大于 age>19 true >= 大于或等于 age>=19 true

此表参考来源:http://www.w3school.com.cn/xpath/xpath_operators.asp

(12)按序选择

有时候,我们在选择的时候某些属性可能同时匹配多个节点,但我们只想要其中的某个节点,如第二个节点或者最后一个节点,这时可以利用中括号引入索引的方法获取特定次序的节点:

这里使用了last()、position()函数,在XPath中,提供了100多个函数,包括存取、数值、字符串、逻辑、节点、序列等处理功能,它们的具体作用可参考:http://www.w3school.com.cn/xpath/xpath_functions.asp

(13)节点轴选择

XPath提供了很多节点选择方法,包括获取子元素、兄弟元素、父元素、祖先元素等,示例如下:

以上使用的是XPath轴的用法,更多轴的用法可参考:http://www.w3school.com.cn/xpath/xpath_axes.asp

(14)案例应用:抓取TIOBE指数前20名排行开发语言

XPath的更多用法参考:http://www.w3school.com.cn/xpath/index.asp

python lxml库的更多用法参考:http://lxml.de/

  • 上一篇: 电脑如何阅读epub
  • 下一篇: v4l2架构
  • 版权声明


    相关文章:

  • 电脑如何阅读epub2024-12-24 09:30:05
  • 万成文库下载2024-12-24 09:30:05
  • 线程之间怎么通信2024-12-24 09:30:05
  • java线程池讲解2024-12-24 09:30:05
  • redis是干啥的2024-12-24 09:30:05
  • v4l2架构2024-12-24 09:30:05
  • iic的通信协议2024-12-24 09:30:05
  • 适配器模式例子2024-12-24 09:30:05
  • udp 编程2024-12-24 09:30:05
  • 黑夜汉化网站怎么进2024-12-24 09:30:05