必备知识点

  • 在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属于标签,它有自己的属性,例如classid等等。 - 点 . 的作用:表示当前位置;与其对应的是双点 .. :表示上一层级的位置 - 双斜杠 // 的作用:查找当前标签下所有子级中搜索;与其对应的是单斜杆 / ,这个标签标签下一层所有中搜索。【后面两个任务是这点的练习】

任务二:获取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下,所有类为threediv标签的文本值

指定id为second,并且子级div的类名是three,然后是获取文本,则xpath如下

print(html.xpath('.//div[@id="second"]/div[@class="three"]/text()'))

结果:['水电费', '说的话房间不开封']

任务五:获取所有类为threediv标签的文本值

观察html代码块,会发现类为threediv标签在几个地方,所以这里最好的方法就是全局范围内的直接搜索,简单粗暴的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检索的更多相关文章

  1. xpath教程-通过ID和Class检索 转

    通过ID和Class检索   必备知识点 在html中,id是唯一的 在html中,class是可以多处引用的 工具 Python3版本 lxml库[优点是解析快] HTML代码块[从网络中获取或者自 ...

  2. xpath教程三---逐层检索和全局检索

    本节主要介绍用xpath来描述html的层级关系 主要使用到的知识点如下: 单独的一个点 .,表示当前位置 两个点 ..,表示上一级父标签的位置 单独的一个斜杠 /,表示只检索下面一级 单独的两个斜杠 ...

  3. CRL快速开发框架系列教程二(基于Lambda表达式查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  4. 无废话ExtJs 入门教程二十一[继承:Extend]

    无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...

  5. 无废话ExtJs 入门教程二十[数据交互:AJAX]

    无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...

  6. Android高手进阶教程(二十八)之---Android ViewPager控件的使用(基于ViewPager的横向相册)!!!

      分类: Android高手进阶 Android基础教程 2012-09-14 18:10 29759人阅读 评论(35) 收藏 举报 android相册layoutobjectclassloade ...

  7. 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/16384009 作者:毛星云 ...

  8. SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1

    在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...

  9. Shell脚本系列教程二: 开始Shell编程

    Shell脚本系列教程二: 开始Shell编程 2.1 如何写shell script? (1) 最常用的是使用vi或者mcedit来编写shell脚本, 但是你也可以使用任何你喜欢的编辑器; (2) ...

随机推荐

  1. WIN10远程连接winserver2012 r2,连接失败

    背景:2012开启远程的时候,默认是勾选“仅允许运行使用网络级别身份验证的远程桌面的计算机连接”,这个选项据说比较安全,但是用win10远程的时候就报错,函数不受支持,最后通过修改win10的配置得以 ...

  2. Python系列之入门篇——python2.7.13安装

    Python2.7.13 安装 说明 以下所有操作都基于centos6.9 1. Issue zlib zlib-devel是安装setuptools依赖的模块,需要在安装python之前先安装这两个 ...

  3. 决策树&随机森林

    参考链接: https://www.bilibili.com/video/av26086646/?p=8 <统计学习方法> 一.决策树算法: 1.训练阶段(决策树学习),也就是说:怎么样构 ...

  4. java 写一个单例设计程序,打印出该对象的地址

    class Test{ public static void main(String[] args) { singleton s1=singleton.getinstance(); singleton ...

  5. BZOJ:2763-[JLOI2011]飞行路线(最短路分层图)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2763 解题心得: 第一次见到分层最短路.其实题中说选择k条路径免费,那怎么选k条路径并没 ...

  6. FPGA学习之路——PLL的使用

    锁相环(PLL)主要用于频率综合,使用一个 PLL 可以从一个输入时钟信号生成多个时钟信号. PLL 内部的功能框图如下图所示: 在ISE中新建一个PLL的IP核,设置四个输出时钟,分别为25MHz. ...

  7. 20145202马超 2016-2017-2 《Java程序设计》第11周学习总结

    20145202马超 2016-2017-2 <Java程序设计>第11周学习总结 教材学习内容总结 XX 教材学习中的问题和解决过程 教材学习有问题先去https://shimo.im/ ...

  8. C#实现窗口最小化到系统托盘

    先添加notifyicon控件notifyIcon1 using System; using System.Collections.Generic; using System.ComponentMod ...

  9. 北京Uber优步司机奖励政策(1月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  10. 广州Uber优步司机奖励政策(1月4日~1月10日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...