当前位置: 首页 > 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.dtcms.com/a/270078.html

相关文章:

  • 基于Java+SpringBoot 协同过滤算法私人诊所管理系统
  • 系统架构设计师论文分享-论系统安全设计
  • IoTDB:专为物联网场景设计的高性能时序数据库
  • 把word中表格转成excle文件
  • 基于GeoTools的根据Shp文件生成完全包围格网实战
  • Oracle 存储过程、函数与触发器
  • AI标注平台label-studio之二添加机器学习后端模型辅助标注
  • vue3官方文档学习心得
  • SpringCloud系列 - Gateway 网关功能(五)
  • 人体坐姿检测系统开发实战(YOLOv8+PyTorch+可视化)
  • 本地部署 R 语言环境运行软件 RStudio Server 并实现外部访问
  • 玩具语音方案选型决策OTP vs Flash 的成本功耗与灵活性
  • window wsl 环境下编译openharmony,HarmonyOS 三方库 FFmpeg
  • VLLM 调用有哪些超参数; clean_up_tokenization_spaces是什么
  • ubuntu24.04安装NFS网络文件系统/ARM开发板NFS挂载
  • 20250708-03-string结构及命令详解_笔记
  • CI/CD — DevOps概念之实现k8s持续交付持续集成(一)
  • NumPy-统计函数详解
  • UE5内置插件 AnimToTexture 简单入门
  • 一次编码,多端运行:HTML5多终端调用
  • Android 依赖注入框架详解
  • 2025年7月8日学习笔记——模式识别与机器学习绪论
  • bro code Interface
  • 社区云管家 - 智慧生活新方式 ——仙盟创梦IDE
  • 玩转Docker | 使用Docker部署HomeBox家庭库存管理工具
  • NestJS 系列教程(四):中间件、中断器与异常过滤器详解
  • JavaScript基础篇——第一章 JavaScript基础的认识
  • MySQL 【环境安装、基础认识】
  • OpenCV在Visual Studio 2022下的配置
  • 牛市来临之际,如何用期权抢占反弹先机?