xpath教程-通过ID和Class检索 转
通过ID和Class检索
必备知识点
- 在html中,id是唯一的
- 在html中,class是可以多处引用的
工具
- Python3版本
- lxml库【优点是解析快】
- HTML代码块【从网络中获取或者自己杜撰一个】
- requests【推荐安装,从网页上获取网页代码练手,再好不过了】
Xpath学习
先定义html代码块【这次只从body开始】
<body>
<div class="container">
<div id="first">
<div class="one">都市</div>
<div class="two">德玛西亚</div>
<div class="two">王牌对王牌</div>
<a>
<div class="spe">特殊位置</div>
</a>
</div>
<div id="second">
<div class="three">水电费</div>
<div class="three">说的话房间不开封</div>
<div class="four">三顿饭黑客技术</div>
</div>
<div id="third">
<div class="three">水电费</div>
<div class="three">说的话房间开封</div>
</div>
</div>
</body>
"""
再准备python代码块
from lxml import etree
html = etree.HTML(html_str)
任务一:获取类名为one的文本值
解决这个问题,有非常简单的xpath路径,直接匹配html代码中的class,然后获取文本值就行
代码如下:
print(html.xpath('.//div[@class="one"]/text()'))
结果:['都市']
这里需要解释多个地方: - @的作用:表示属性,div属于标签,它有自己的属性,例如class、id等等。 - 点 . 的作用:表示当前位置;与其对应的是双点 .. :表示上一层级的位置 - 双斜杠 // 的作用:查找当前标签下所有子级中搜索;与其对应的是单斜杆 / ,这个标签标签下一层所有中搜索。【后面两个任务是这点的练习】
任务二:获取id为first下,第一层子级div标签的文本值
只需要获取第一层,使用单斜杆就足够了,xpath路径如下:
print(html.xpath('.//div[@id="first"]/div/text()'))
结果:['都市', '德玛西亚', '王牌对王牌']
任务三:获取id为first下,所有层级div标签的文本值
这个任务和上一个任务形成对比,一个是单斜杆一个是双斜杠,则xpath的代码如下:
print(html.xpath('.//div[@id="first"]//div/text()'))
结果:['都市', '德玛西亚', '王牌对王牌', '特殊位置']
任务四:获取id为second下,所有类为three的div标签的文本值
指定id为second,并且子级div的类名是three,然后是获取文本,则xpath如下
print(html.xpath('.//div[@id="second"]/div[@class="three"]/text()'))
结果:['水电费', '说的话房间不开封']
任务五:获取所有类为three的div标签的文本值
观察html代码块,会发现类为three的div标签在几个地方,所以这里最好的方法就是全局范围内的直接搜索,简单粗暴的xpath如下:
print(html.xpath('.//div[@class="three"]/text()'))
结果:['水电费', '说的话房间不开封', '水电费', '说的话房间开封']
任务六:获取文本等于水电费的标签,取出他们的class
通过文本值,获取他们的类名信息,就是把上一个任务反过来做就行,xpath如下:
print(html.xpath('.//div[text()="水电费"]/@class'))
结果:['three', 'three']
最终的代码和运行截图
html_str = """
<body>
<div class="container">
<div id="first">
<div class="one">都市</div>
<div class="two">德玛西亚</div>
<div class="two">王牌对王牌</div>
<a>
<div class="spe">特殊位置</div>
</a>
</div>
<div id="second">
<div class="three">水电费</div>
<div class="three">说的话房间不开封</div>
<div class="four">三顿饭黑客技术</div>
</div>
<div id="third">
<div class="three">水电费</div>
<div class="three">说的话房间开封</div>
</div>
</div>
</body>
"""
from lxml import etree
html = etree.HTML(html_str)
print(html.xpath('.//div[@class="one"]/text()'))
print(html.xpath('.//div[@id="first"]/div/text()'))
print(html.xpath('.//div[@id="first"]//div/text()'))
print(html.xpath('.//div[@id="second"]/div[@class="three"]/text()'))
print(html.xpath('.//div[@class="three"]/text()'))
print(html.xpath('.//div[text()="水电费"]/@class'))
xpath教程-通过ID和Class检索 转的更多相关文章
- xpath教程二 ---- 通过ID和Class检索
必备知识点 在html中,id是唯一的 在html中,class是可以多处引用的 工具 Python3版本 lxml库[优点是解析快] HTML代码块[从网络中获取或者自己杜撰一个] requests ...
- xpath教程三---逐层检索和全局检索
本节主要介绍用xpath来描述html的层级关系 主要使用到的知识点如下: 单独的一个点 .,表示当前位置 两个点 ..,表示上一级父标签的位置 单独的一个斜杠 /,表示只检索下面一级 单独的两个斜杠 ...
- 21.xpath定位中id 、starts-with、contains、text()和last() 的用法
xpath语法:id .starts-with.contains.text()和last() 的用法 <input id="su" class="bg s_btn ...
- xpath教程 2 - lxml库
xpath教程 2 - lxml库 这些就是XPath的语法内容,在运用到Python抓取时要先转换为xml. lxml库 lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HT ...
- xpath教程 1 - 什么是XPath
xpath教程 1 什么是XPath? XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历. W3School官方 ...
- 雷林鹏分享:Ruby XML, XSLT 和 XPath 教程
Ruby XML, XSLT 和 XPath 教程 什么是 XML ? XML 指可扩展标记语言(eXtensible Markup Language). 可扩展标记语言,标准通用标记语言的子集,一种 ...
- xpath教程一---简单的标签搜索
工具 Python3版本 lxml库[优点是解析快] HTML代码块[从网络中获取或者自己杜撰一个] requests[推荐安装,从网页上获取网页代码练手,再好不过了] 讲解 网页代码都是成对的标签, ...
- xpath教程-逐层检索和全局检索 转
逐层检索和全局检索 布啦豆 11203 本节主要介绍用xpath来描述html的层级关系 主要使用到的知识点如下: 单独的一个点 .,表示当前位置 两个点 ..,表示上一级父标签的位置 单独的一个 ...
- XPath教程
XPath 简介 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 是 W3C XSLT 标准的主要元素,并且 XQuery ...
随机推荐
- python实现多分类评价指标
1.什么是多分类? 参考:https://www.jianshu.com/p/9332fcfbd197 针对多类问题的分类中,具体讲有两种,即multiclass classification和mul ...
- J.U.C之Executor框架入门指引
1.Executor接口 This interface provides a way of decoupling task submission from the mechanics of how e ...
- 利用python简单实现unittest
python3的eval方法 eval() 函数用来执行一个字符串表达式,并返回表达式的值 # 例如 a = [1,2,3,4] b = "a" print(eval(b)) # ...
- Redis中有序列表(ZSet)相关命令
redis语序集合和集合set是一样内部value为string类型的集合,有序不允许重复元素 但是,zset的每个元素有一个double类型的分数(score).redis正是靠这个分数对元素从小到 ...
- java 并发线程池的理解和使用
一.为什么要用线程池 合理利用线程池能够带来三个好处. 第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 第二:提高响应速度.当任务到达时,任务可以不需要的等到线程创建就能立 ...
- IDEA环境配置里的一些error
1. idea添加edit configuration 没有tomcat图标 File->Setting->Build,Execution,Deployment-->Applicat ...
- 解决pycharm py文件运行后停止按钮变成了灰色的问题
- 使用TiDB把自己写分库分表方案推翻了
背景 在日益数据量增长的情况下,影响数据库的读写性能,我们一般会有分库分表的方案和使用newSql方案,newSql如TIDB.那么为什么需要使用TiDB呢?有什么情况下才用TiDB呢?解决传统分库分 ...
- spring @value和@@PropertySource注解简单使用
@Value注解:可以使用注入基本字符串 EL表达式,从配置文件读取数据@PropertySource用于引入单个配置文件 @PropertySources用于引入多个配置文件 @PropertySo ...
- CSS实现图片圆角显示
问题描述 在自定义博客园侧边栏公告时,想增加博客头像,但图片默认显示成是方形的,不是很好看,想着改成圆角显示会漂亮些 解决方案 增加css样式 border-radius:25px; 上面的像素值根据 ...