一日一技:XPath『不包含』应该怎么写?

简介: 一日一技:XPath『不包含』应该怎么写?

摄影:产品经理厨师:kingname

假设有这样一段HTML代码:

<html>
    <head>
        <title>测试XPath移除功能</title>
    </head>
    <body>
        <div class="post">
            <div class="quote">无关紧要的引用内容</div>
                你好啊
                <strong>产品经理</strong>,
                <span>很高兴认识你</span>
        </div>
    </body>
</html>

我想把其中的 你好啊产品经理,很高兴认识你提取出来。

如果我们把XPath写成:

//div[@class="post"]/text()

运行效果如下图所示:

这是因为 /text()只会获取当前标签下面的文本,不会获取子标签的文本。

为了解决这个问题,我们在 /text()前面再添加一根斜线:

//div[@class="post"]//text()

这样就可以抓取这个 div标签及其子标签下面的所有文本。运行效果如下图所示:

现在问题来了, 无关紧要的引用内容是我不想要的,但是却被无差别抓取进来了。

如果能够实现,抓取 class="post"这个 div标签下的文本和除了 class="quote"以外的所有子节点的文本就好了。

如果没有 你好啊这三个字,那么XPath可以这样写:

//div[@class="post"]//*[not(@class="quote")]/text()

这里的 //*[not(@class="quote")]的意思是说,这个 div标签下面的所有 class不为"quote"的子标签的文本。

运行效果如下图所示:

但比较麻烦的是, 你好啊这一句,它就是 div标签下的文本,它不属于任何子标签。所以上面的XPath无法获取到。

为了单独直接获取 div下面的内容,我们需要使用 |再拼接一个 XPath

//div[@class="post"]/text() | //div[@class="post"]//*[not(@class="quote")]/text()

运行效果如下图所示:

不过结果是一个列表,并且有很多换行符,看起来不够清晰,于是用Python再进行清洗。最终效果如下图所示:

目录
相关文章
|
监控 JavaScript 前端开发
影刀RPA(初级)(二)
影刀RPA(初级)(二)
8444 2
AutoJs Pro 7.0.4-1 实战教程 ---火热持续更新中
AutoJs Pro 7.0.4-1 实战教程 ---火热持续更新中
552 0
|
开发者
WinRAR 5.40 & 4.20 & 3.93 的注册码 - rarreg.key
把下面的数据复制到“记事本”中,用文件名“rarreg.key”命名该文件,保存到WinRAR安装文件夹即完成注册。以下4个Key随便选一个复制都可以。WinRAR 5.40 版Key,复制箭头中间内容,上下无空格。
14695 1
|
运维 算法 安全
异常检测算法及其在安全领域的应用
【6月更文挑战第4天】在数字化时代,数据安全至关重要,异常检测算法扮演着守护者角色。它能自动学习正常行为模式,及时发现网络攻击和欺诈行为。非监督式异常检测算法尤其重要,如基于距离的方法,通过计算数据点间距离识别偏离常规的点。Python的scikit-learn库可实现这一算法。异常检测不仅应用于金融领域的欺诈检测,还广泛用于工业监控、医疗诊断和社交媒体分析,为多领域数据安全提供保障。随着技术进步,异常检测将更智能、高效,成为数据安全的重要防线。
367 2
|
安全 网络安全 PHP
解决SSL routines:ssl3_get_server_certificate:certificate verify failed
解决SSL routines:ssl3_get_server_certificate:certificate verify failed
999 0
|
存储 Kubernetes 调度
在K8S中,是怎么实现数据持久化的?
在K8S中,是怎么实现数据持久化的?
|
Python
Fastapi进阶用法,路径参数,路由分发,查询参数等详解
Fastapi进阶用法,路径参数,路由分发,查询参数等详解
1002 1
|
关系型数据库 测试技术 数据处理
实时计算 Flink版产品使用合集之TaskManager宕机是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
机器学习/深度学习 运维 算法
从聚类(Clustering)到异常检测(Anomaly Detection):常用无监督学习方法的优缺点
从聚类(Clustering)到异常检测(Anomaly Detection):常用无监督学习方法的优缺点
494 0
|
安全 网络安全 数据安全/隐私保护
修复ICMP权限许可和访问控制漏洞
修复ICMP权限许可和访问控制漏洞
888 0