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

数据提取之lxml模块与xpath工具

目标:了解xpath的定义

           了解lxml

            掌握xpath的语法

lxml是一款高新能的python html/xml解析器,我们可以利用xpath,来快速的定位特定元素以及获取节点信息

响应内容:json格式的,所有的响应内容都是json格式的吗?

响应内容是html格式——json取值?

响应内容是html格式——应该怎么取值,xpath数据提取

1. 了解 lxml模块和xpath语法

对html或xml形式的文本提取特定的内容,就需要我 们掌握lxml模块的使用和xpath语法。

(1)lxml模块可以利用XPath规则语法,来快速的定位 HTML\XML 文档中特定元素以及获取节点信息(文本内容、属性值)

(2)XPath (XML Path Language) 是一门在 HTML\XML 文档中查找信息的语言,可用来在 HTML\XML 文档 中对元素和属性进行遍历。

        W3School官方文档: http://www.w3school.co m.cn/xpath/index.asp

(3)提取xml、html中的数据需要lxml模块和xpath语法 配合使用

xml:用来传输和存储数据

html:专门用来显示数据

需要做数据提取的是:html

借助第三方模块:lxml,使用xpath语法解析html数据

pip install lxml -i 清华源

2.xpath的节点关系

3.xpath语法-基础节点选择语法

(1)XPath使用路径表达式来选取XML文档中的节点或者节点集。

(2) 这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。
(3)使用chrome插件选择标签时候,选中时,选中的标签会添加属性class="xh-highlight"

(4) 安装

(5) 导入

相关示例代码

# lxml
from lxml import etree'''
xpath解析html网页内容
'''
# 获取的源码
html = '''
<li><div class="item"><div class="pic"><em class="">1</em><a href="https://movie.douban.com/subject/1292052/"><img width="100" alt="肖申克的救赎" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp" class=""></a></div><div class="info"><div class="hd"><a href="https://movie.douban.com/subject/1292052/" class=""><span class="title">肖申克的救赎</span><span class="title">&nbsp;/&nbsp;The Shawshank Redemption</span><span class="other">&nbsp;/&nbsp;月黑高飞(港)  /  刺激1995(台)</span></a><span class="playable">[可播放]</span></div><div class="bd"><p class="">导演: 弗兰克·德拉邦特 Frank Darabont&nbsp;&nbsp;&nbsp;主演: 蒂姆·罗宾斯 Tim Robbins /...<br>1994&nbsp;/&nbsp;美国&nbsp;/&nbsp;犯罪 剧情</p><div class="star"><span class="rating5-t"></span><span class="rating_num" property="v:average">9.7</span><span property="v:best" content="10.0"></span><span>3044286人评价</span></div><p class="quote"><span class="inq">希望让人自由。<a href=""></a></span></p></div></div></div>
</li>
'''# 解析 学习语法
# 数据提取
# 1. 创建对象html: 源码
html = etree.HTML(html)# 解析 语法字符串类型
'''
/: 规定了必须从根节点开始找
//: 不需要考虑节点位置
'''
# # span = html.xpath('//span')  # 返回的数据类型的列表,默认查找的是所有的span标签,如果没有定位到对应的标签数据,返回的是空列表
# img = html.xpath('//img')
# span = html.xpath('//p/span/a')
# span = html.xpath('//p/a')
# span = html.xpath('//p//a')
# print(span)'''
text(): 获取文本信息
<em class="">1</em>
1. 先定位到em的标签元素
2. 才能获取文本内容
数据获取
'''
# []
em = html.xpath('//em/text()')  # 列表 
print(em)

3.1xpath定位节点以及提取属性或文本内容的语法

表达式描述
nodename选中该元素。
/从根节点选取、或者是元素和元素间的过渡。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
..选取当前节点的父节点。
@

选取属性,获取对应的属性值

例如:<a href="https://www.baidu.com">百度</a>

@href    获取a标签的属性值:https://www.baidu.com

代码:html.xpath('//a/@harf')

text()选取文本。标签之间的内容,如:<a href="https://www.baidu.com">百度</a>的文本信息就是百度

表达式描述 nodename选中该元素。

html.xpath()返回的数据类型是列表,如果没有定位到对应的标签数据,返回的是空列表。返回的列表中的内容是元素对象。

4. xpath语法-节点修饰语法

可以根据标签的属性值、下标等来获取特定的节点

4.1根据标签的属性值做标签筛选

(1)标签[@属性名称="属性值"]

<span class="rating_num" property="v:average">9.7</span>

代码:star = html.xpath('//span[@class="rating_num"]/text()')

(2)没有提取到数据,不会报错,空列表 [ ]——[0]:报错 list index out of rangelxml.etree.XPathEvalError: Invalid predicate: xpath语法出现问题

(2)span 没有属性:直接获取所有的span标签?
span不能直接定位,可以定位上一级
敲属性值:复制

标签的位置定位
标签属性值一样,但只想获取其中某一个标签, 位置从1开始的

代码:

star = html.xpath('//div[@class="star"]/span[2]/text()')#获取class属性为star的div标签下的第2个span标签
print(star)

4.2模糊匹配,标签有共同属性

语法:[contains(@属性名称, '包含的属性值')]
代码:

qoute = html.xpath('//p[contains(@class, "quote")]/span/text()')
print(qoute)

5.谷歌浏览器xpath helper插件的安装和使用

(1)下载Chrome插件 XPath Helper 可以在chrome应用商城进行下载

(2)将rar压缩包解压到当前文件夹

(3) 打开谷歌浏览器---->右上角三个点---->更多工具----> 扩展程序

(4)在扩展程序界面,点击右上角的开关,进入开发者模 式后,将xpath文件夹拖进,释放鼠标即可

(5)安装完成,校验(ctrl+shift+x)(重启浏览器)

http://www.lryc.cn/news/582875.html

相关文章:

  • LLM探索的时代
  • 大学数字经济专业课程介绍
  • maven 发布到中央仓库之持续集成-03
  • 无缝矩阵支持音频分离带画面分割功能的全面解析
  • 【适合 Java 工程师的 AI 转型方向】
  • Shader面试题100道之(21-40)
  • 复杂任务攻坚:多模态大模型推理技术从 CoT 数据到 RL 优化的突破之路
  • 使用python的 FastApi框架开发图书管理系统-前后端分离项目分享
  • Linux操作系统:再谈虚拟地址空间
  • 【UE5】虚幻引擎的运行逻辑
  • 智能推荐社交分享小程序(websocket即时通讯、协同过滤算法、时间衰减因子模型、热度得分算法)
  • Tomcat与IIS:核心差异及接口调用实战解析
  • Spring中过滤器和拦截器的区别及具体实现
  • 26.安卓逆向2-frida hook技术-解密响应
  • LoRaWAN 有几种入网方式?
  • DMA技术与音频数据的存储和播放
  • LLM视觉领域存在模型视觉识别不准确、细粒度视觉任务能力不足等科学问题
  • (四)机器学习小白入门YOLOv :图片标注实操手册
  • C#中封装halcon函数的报错
  • 用基础模型构建应用(第七章)AI Engineering: Building Applications with Foundation Models学习笔记
  • Google AI 刚刚开源 MCP 数据库工具箱,让 AI 代理安全高效地查询数据库
  • 推荐系统中的相似度
  • JAVAEE 代理
  • 短视频电商APP源码开发技术栈解析:音视频、商品链路与互动设计
  • 怪物机制分析(有限状态机、编辑器可视化、巡逻机制)
  • DCL学习
  • SpringAI学习笔记-MCP客户端简单示例
  • C#Halcon从零开发_Day18_OCR识别
  • SpringAI系列 - 基于Spring AI 1.0.0 的AI助手实现示例
  • 图像梯度处理与边缘检测:OpenCV 实战指南