一、场景还原

现在假定有如下html代码:

<div class="content">
<p>输入只有一行半径r.</p>
</div>
<div class="content">
<p>输出有多行,每一行是跟输入对应面积.</p>
<p>输出保留6位小数</p>
</div>

我需要获取每个content下的所有子节点的文本。形如这样

['输入只有一行半径r.', '输出有多行,每一行是跟输入对应面积. 输出保留6位小数']

二、解决方案

代码如下:

from lxml import etree

txt = """
<div class="content">
<p>输入只有一行半径r.</p>
</div>
<div class="content">
<p>输出有多行,每一行是跟输入对应面积.</p>
<p>输出保留6位小数</p>
</div>
"""
html = etree.HTML(txt)
contents = html.xpath('//div[@class="content"]')
lst = []
for e in content:
lst.append(e.xpath('string(.)'))
print(lst)
'''
输出如下:
['\n 输入只有一行半径r.\n', '\n 输出有多行,每一行是跟输入对应面积.\n 输出保留6位小数\n']
'''

其实这已经和我们想要的结果差不多了,对字符串稍作处理就是我们想要的结果了

lst = []
for e in content:
lst.append(str(e.xpath('string(.)')).replace('\n','').strip())
print(lst)
'''
输出如下:
['输入只有一行半径r.', '输出有多行,每一行是跟输入对应面积. 输出保留6位小数']
'''

步骤1:找到父节点集合

contents = html.xpath('//div[@class="content"]')

这一句就是在匹配所有的class属性为content的div标签

步骤2:遍历父节点集合

lst = []
for e in content:
lst.append(e.xpath('string(.)'))
print(lst)

遍历这个集合,并且利用xpath的string()方法获取当前节点所有子节点的文本

三、补充解释

不难看出其实上述步骤的核心就是用了一个xpath中的string()方法,那么这是一个什么方法呢?和我们平使用的text()方法有什么区别呢?

名称 说明
string() 返回所指元素的所有子节点文本内容所拼接的一个字符串
text() 返回所指元素的文本内容

string(.)中的.就是指的是当前元素啦,那么逐个遍历父元素,然后对他进行xpath语法string(,),获得的不就是当前节点所有子节点的文本了吗~

捋一捋哦~

四、结语

感谢各位大大的耐心阅读~

创作不易,少侠请留步哇!人说,萍水相逢,你我遇见皆是缘分,不如点个赞再走呗。◕ᴗ◕。

lxml中xpath获取当前节点所有子节点的文本方法的更多相关文章

  1. mysql7笔记----遍历节点所有子节点

    mysql遍历节点的所有子节点 DELIMITER // CREATE FUNCTION `getChildrenList`(rootId INT) ) BEGIN ); ); SET sTemp = ...

  2. 通过xpath获取对应的整个子节点信息

    1.页面解析接口 package com.dajiangtai.djt_spider.service; import com.dajiangtai.djt_spider.entity.Page; /* ...

  3. selumium 中 xpath获取文本、属性正确写法

    报错“The result of the xpath expression is: [object Attr]. It should be an element” yutube爬虫动态加载,需要用到s ...

  4. 获取元素节点的子节点 & 获取文本节点

    1. 获取元素节点的子节点(**只有元素节点才有子节点):              ①. childNodes 属性获取全部的子节点, 但该方法不实用. 因为如果要获取指定的节点          ...

  5. treeview插件使用:根据子节点选中父节点

    鄙人公司没有专门的前端,所以项目开发中都是前后端一起抡.最近用bootstrap用的比较频繁,发现bootstrap除了框架本身的样式组件外,还提供了多种插件供开发者选择.本篇博文讲的就是bootst ...

  6. jacascript DOM节点——元素节点、属性节点、文本节点

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! DOM节点的三个种类:元素节点.文本节点.属性节点: 元素节点 元素节点就是 HTML 标签元素,元素节点 ...

  7. JavaScript的DOM编程--04--获取元素节点的子节点

    获取元素节点的子节点(**只有元素节点才有子节点!!) 1). childNodes 属性获取全部的子节点, 但该方法不实用. 因为如果要获取指定的节点 的指定子节点的集合, 可以直接调用元素节点的 ...

  8. python爬虫中XPath和lxml解析库

    什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...

  9. 使用python+xpath 获取https://pypi.python.org/pypi/lxml/2.3/的下载链接

    使用python+xpath 获取https://pypi.python.org/pypi/lxml/2.3/的下载链接: 使用requests获取html后,分析html中的标签发现所需要的链接在& ...

  10. python在lxml中使用XPath语法进行#数据解析

    在lxml中使用XPath语法: 获取所有li标签: from lxml import etree html = etree.parse('hello.html') print type(html) ...

随机推荐

  1. sql处理重复的列,更好理清分组和分区

    一.分组统计.分区排名 1.语法和含义: 如果查询结果看得有疑惑,看第二部分-sql处理重复的列,更好理清分组和分区,有建表插入数据的sql语句 分组统计:GROUP BY 结合 统计/聚合函数一起使 ...

  2. 解决Selenium元素拖拽不生效Bug

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/e8aa6c6f.html 你好,我是测试蔡坨坨. 前几天在使用Selenium进行元素拖拽操作时,发现Selenium自带的 ...

  3. MGF multivariate generating function 多变量生成函数

    目录 MGF多变量生成函数multivariate generating function 定义 例子 Extremal parameters III.8.1 largest components 例 ...

  4. java网络编程--3 TCP

    java网络编程--3 TCP 1.6.TCP 客户端 连接服务器 Socket 发送消息 package com.ssl.lesson02; import java.io.IOException; ...

  5. 谷歌浏览器配置Selenium,并配合python使用

    python环境准备 python 需要安装selenium ,这个直接pip安装即可 pip install selenium -i http://pypi.douban.com/simple -- ...

  6. Spring Data Solr 对 Solr 的增删改查实例

    Spring Data Solr 就是为了方便 solr 的开发研制的一个框架,其底层是对 SolrJ(官方 API)的封装 一.环境搭建 第一步:创建 Maven 项目(springdatasolr ...

  7. GO实现Redis:GO实现TCP服务器(1)

    本文实现一个Echo TCP Server interface/tcp/Handler.go type Handler interface { Handle(ctx context.Context, ...

  8. vue2双向绑定原理及源码解析

    首先我们要知道VUE实现双向绑定的步骤是什么: 实现一个监听器 Observer 对数据对象进行遍历,包括子属性对象的属性,利用 Object.defineProperty() 对属性都加上 sett ...

  9. 介绍一下js垃圾回收机制

    JavaScript中的垃圾回收机制负责自动管理内存,回收不再使用的对象所占用的内存空间.在JavaScript中,开发者不需要显式地分配和释放内存,垃圾回收器会自动完成这些操作.以下是关于JavaS ...

  10. Binder机制及底层实现

    <1>进程间的内存空间是进程私有的<2>进程间和内核的空间是互通的<3>进程1空间<--->内核空间<-->进程2空间Binder跨进程通信 ...