当前位置: 首页 > news >正文

打卡学习Python爬虫第五天|Xpath解析的使用

什么是Xpath?是在XML文档中搜索内容的一门语言,HTML可以看作是xml的一个子集。

目录

1、安装lxml模块

2、导入lxml中的etree子模块

3、Xpath使用方法

3.1.选择节点

3.2.选择属性

3.3.选择文本内容

3.4.使用通配符*过滤节点

3.5.使用中括号[]索引

3.6.使用相对查找

3.7.使用函数

4、全部示例代码


1、安装lxml模块

# PyCharm终端输入
pip install lxml# 使用清华源
pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple

2、导入lxml中的etree子模块

from lxml import etree

etree.XML().xpath() 是Python中用于XML解析的库 lxml 中的一个函数。lxml 是一个高效的XML解析器。另外,可以使用etree.parse("文件名")读取文件进行解析。

具体来说:

  • etree 是 lxml 库中的一个模块,它提供了访问XML文档的接口。
  • XML() 是 etree 模块中的一个函数,用于解析XML字符串。
  • xpath() 是 etree 模块中的一个方法,用于执行XPath查询。

etree.XML().xpath() 的含义是将一个XML字符串解析为一个lxmletree对象,然后使用这个对象执行XPath查询。

3、Xpath使用方法

XPath表达式通常以 / 开头,/ 表示层级关系,第一个 / 是根节点。

XPath是一种用于在XML文档中定位元素的语言。可使用一系列的语法规则来指定哪些元素应该被选中。xpath() 方法接受一个XPath表达式作为参数,并返回一个包含匹配元素的列表。

若有以下xml文档内容:

xml = '''
<book><id>10010</id><name>蔬菜</name><price>33</price><author><nick id="1">萝卜</nick><nick id="2">豆腐</nick><nick class="a">土豆</nick><nick id="3">白菜</nick><div><nick>西红柿</nick></div><span><nick>番茄</nick></span></author><partner><nick id="4">火锅</nick><nick id="5">麻辣烫</nick></partner>
</book>
'''
3.1.选择节点

 使用///来选择节点。

  • /book/author/nick:选择/book/author的直接子节点nick
  • /book/author//nick:选择/book/author的所有名为nick子节点,不论它们在文档中的位置。
# text()为获取文本内容/book/author/nick/text()
/book/author//nick/text()

3.2.选择属性

使用 @来选择元素的属性,如nick节点中的id属性且值为1。

/book/author/nick[@id=1]/text()

 如果想要属性的值

# 得到第i个id的值
/book/author/nick[i]/@id# 得到全部id的值
/book/author/nick/@id

3.3.选择文本内容

使用 text() 来选择节点的文本内

//book/name/text()

3.4.使用通配符*过滤节点

使用通配符 * 表示任意的节点。

/book/author/*/nick/text()# 相当于*代替了div和span,也就是说author和span之间可以是任意字符
/book/author/div/nick/text()
/book/author/span/nick/text()

3.5.使用中括号[]索引

获取/book/author下众多nick中的第一个nick,最后一个nick[last()]

/book/author/nick[1]/text()# 最后一个
/look/author/nick[last()]/text()

3.6.使用相对查找

先提取/book中每一个partner的信息,然后在partner中继续查找,./为当前节点,即partner节点

# 相对路径查询
result = tree.xpath("/book/partner")
for i in result:result1 = i.xpath("./nick/text()") #print(result1)

3.7.使用函数

函数可以用于计算或提取信息。

/book/author/nick[position()=2]/text()
# nick[position()=2]相当于nick[2]
/book/author/nick[2]/text()

count(//nick) # 获取nick节点的数量

4、全部示例代码

from lxml import etree
xml = '''
<book><id>10010</id><name>蔬菜</name><price>33</price><author><nick id="1">萝卜</nick><nick id="2">豆腐</nick><nick class="a">土豆</nick><nick id="3">白菜</nick><div><nick>西红柿</nick></div><span><nick>番茄</nick></span></author><partner><nick id="4">火锅</nick><nick id="5">麻辣烫</nick></partner>
</book>
'''
tree = etree.XML(xml) # 解析xml
# result = tree.xpath("/book")  # 获取根节点
# result = tree.xpath("/book/name")  # 获取子节点name
# result = tree.xpath("/book/name/text()") # 获取子节点name的文本内容
# result = tree.xpath("/book/author/nick/text()")  # 获取author的子nick节点的文本内容
# result1 = tree.xpath("/book/author//nick/text()") # 获取author节点下名为的所有nick节点的文本内容
# result = tree.xpath("/book/author/nick[@id=1]/text()") # 获取id=1的nick节点的文本内容
# result = tree.xpath("/book/author/*/nick/text()") # 获取author节点下所有nick节点的文本内容
# result = tree.xpath("/book/author/nick[1]/text()") # 获取author节点下第一个nick节点的文本内容
# result = tree.xpath("/book/author/nick/@id") # 获取author节点下所有nick节点的id属性值# 相对路径查询
# result = tree.xpath("/book/partner")
# for i in result:
#     result1 = i.xpath("./nick/text()") #
#     print(result1)# result = tree.xpath("count(//nick)") # 获取nick节点的数量
result = tree.xpath("/book/author/nick[position()=2]/text()") # 获取author节点下第二个nick节点的文本内容
print(result)


http://www.mrgr.cn/news/8280.html

相关文章:

  • 面向对象05:什么是继承
  • 思科设备静态路由实验
  • 记录一次Android11系统证书安装失败
  • 《机器学习》 逻辑回归 大批量数据的下采样 <8>
  • Unity 资源 之 Photon Inventory 2 (Game Creator 2)
  • 【面试】jvm栈的大小通过什么参数设置?
  • Java 2.4 - JVM
  • WordPress简约响应式个人博客Kratos主题
  • 通过主成分分析实现检测金融中的异常交易模式
  • 游戏开发设计模式之状态模式
  • arm接口技术一--arm核总结
  • nas挂载到电脑上当文件夹使用(ubuntu 和windows电脑的挂载方式)
  • springboot如何解决跨域问题
  • 【Spring】Spring缺点是DI依赖注入功能依赖反射,影响性能。为什么反射会影响性能?
  • 【机器学习】以KNN为例的交叉验证 网格搜索
  • Java—Arrays api
  • iZotope Ozone 11 Advanced:专业音频制作与母带处理的巅峰之作
  • httpClient与openfeign
  • 联网可视化:引领智能出行新时代
  • day34(8/22)——Docker