IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 10分钟带你掌握xpath解析器 -> 正文阅读

[大数据]10分钟带你掌握xpath解析器

xpath解析器

1. 什么是xpath

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

简而言之,xpath是在HTML/xml文档中,根据路径查找元素的语法。(效率很高,应用很广)

2. xpath语法

基础节点选择语法是啥?

在xpath中

  • /绝对路径 隔开节点
  • //相对路径
  • .当前节点
  • …当前父节点

3. xpath解析器详细使用

注意: xpath解析器 是属于lxml模块中的一个 文本解析器 因此使用xpath需要下载lxml模块

pip3 install lxml

xpath解析器可以做到一句话完成多步操作,下面开始核心操作演示

1. 导入xpath所在模块
from lxml import etree


# 设置段文本
doc = '''
<html>
 <head>
  <base href='http://example.com/' />
  <title id='t1'>Example website</title>
 </head>
 <body>
  <div id='images'>
   <a href='image1.html' a="xxx">Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
   <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
   <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
   <a href='image4.html' class='li'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
   <a href='image5.html' class='li li-item' name='items'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
   <a href='image6.html' name='items'><span><h5>test</h5></span>Name: My image 6 <br /><img src='image6_thumb.jpg' /></a>
  </div>
 </body>
</html>
'''

# 2. 将待匹配文本传入etree生成一个对象
html = etree.HTML(doc)

# 3. xpath主要功能

# 1. 所有节点
print(html.xpath("//*"))  # 匹配所有的标签 返回值是一个列表 列表里面是每一个元素都是一个标签元素

# 2. 指定节点
print(html.xpath("//head"))  # 匹配所有的head标签

# 3. 子节点和后代节点
print(html.xpath("//div/a"))  # 匹配div标签内部所有的儿子a标签
print(html.xpath("//body//a"))  # 匹配div标签内部所有的后代a标签

# 4. 父节点
print(html.xpath("//body//a[@href='image1.html']"))   # 属性查找 获取body内部所有的href=image1.html后代a
# 属性查找格式: [@属性名=‘属性值’]
print(html.xpath("//body//a[@href='image1.html']/.."))   # ..表示查找上一级父标签

print(html.xpath('//body//a[1]'))    # 从1开始取值
'''xpath选择器中中括号内部可以放属性也可以放位置数(索引) 从1开始'''
# 也可以这样获取父节点(了解即可)
print(html.xpath("//body//a[1]/parent::*"))

# 5. 属性匹配
# 属性查找格式: [@属性名=‘属性值’]
print(html.xpath("//body//a[@href='image1.html']"))

# 6. 文本获取
print(html.xpath("//body//a/text()"))   #  获取body内部所有后代a内部文本(一次性获取不需要循环),结果是个列表

# 7. 属性获取
# 格式在后面添加/@属性名
print(html.xpath("//body//a/@href"))   # 获取body内部所有后代a内部文本(一次性获取不需要循环)
print(html.xpath('//title/@id'))  # 获取title标签id属性值

# 8. 属性多值匹配
print(html.xpath('//body//a[@class="li"]'))  # 写等号就表示等于 不是包含
print(html.xpath('//body//a[contains(@class,"li")]/text()'))   # 包含需要使用关键字contains

# 9. 多属性匹配
print(html.xpath('//body//a[contains(@class,"li") or @name="items"]'))

# 10. 按序选择
print(html.xpath("//a[last()]/@href"))   # 取最后一个
print(html.xpath("//a[position()<3]/@href"))   # 位置小于3的(position()关键字  用于定位)
print(html.xpath("//a[position()>3]/@href"))   # 位置大于3的
print(html.xpath("//a[last()-2]/@href"))   # 倒数第三个
  • 了解操作
# 11. 节点轴选择
# ancestor: 祖先节点
print(html.xpath("//a/ancestor::*"))  # 使用了*  会获取所有的祖先节点
print(html.xpath('//a/ancestor::div'))   # 获取祖先节点中的div
print(html.xpath('//a[1]/attribute::*'))  # attribute:属性值  查找a标签内部所有的属性值
# child:直接子节点
print(html.xpath('//a[1]/child::*'))   
print(html.xpath('//a[6]/descendant::*'))   # descendant:所有子孙节点
print(html.xpath('//a[1]/following::*'))   # following:当前节点之后所有节点
# 获取第一个a标签之后所有节点的第一个节点的href属性的值
print(html.xpath('//a[1]/following::*[1]/@href'))
# following-sibling:当前节点之后同级节点
print(html.xpath('//a[1]/following-sibling::*'))  # 获取当前节点之后的所有同级节点
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:11:15  更:2022-02-16 13:12:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:52:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码