lxml中xpath获取当前节点所有子节点的文本方法
一、场景还原
现在假定有如下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获取当前节点所有子节点的文本方法的更多相关文章
- mysql7笔记----遍历节点所有子节点
mysql遍历节点的所有子节点 DELIMITER // CREATE FUNCTION `getChildrenList`(rootId INT) ) BEGIN ); ); SET sTemp = ...
- 通过xpath获取对应的整个子节点信息
1.页面解析接口 package com.dajiangtai.djt_spider.service; import com.dajiangtai.djt_spider.entity.Page; /* ...
- selumium 中 xpath获取文本、属性正确写法
报错“The result of the xpath expression is: [object Attr]. It should be an element” yutube爬虫动态加载,需要用到s ...
- 获取元素节点的子节点 & 获取文本节点
1. 获取元素节点的子节点(**只有元素节点才有子节点): ①. childNodes 属性获取全部的子节点, 但该方法不实用. 因为如果要获取指定的节点 ...
- treeview插件使用:根据子节点选中父节点
鄙人公司没有专门的前端,所以项目开发中都是前后端一起抡.最近用bootstrap用的比较频繁,发现bootstrap除了框架本身的样式组件外,还提供了多种插件供开发者选择.本篇博文讲的就是bootst ...
- jacascript DOM节点——元素节点、属性节点、文本节点
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! DOM节点的三个种类:元素节点.文本节点.属性节点: 元素节点 元素节点就是 HTML 标签元素,元素节点 ...
- JavaScript的DOM编程--04--获取元素节点的子节点
获取元素节点的子节点(**只有元素节点才有子节点!!) 1). childNodes 属性获取全部的子节点, 但该方法不实用. 因为如果要获取指定的节点 的指定子节点的集合, 可以直接调用元素节点的 ...
- python爬虫中XPath和lxml解析库
什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...
- 使用python+xpath 获取https://pypi.python.org/pypi/lxml/2.3/的下载链接
使用python+xpath 获取https://pypi.python.org/pypi/lxml/2.3/的下载链接: 使用requests获取html后,分析html中的标签发现所需要的链接在& ...
- python在lxml中使用XPath语法进行#数据解析
在lxml中使用XPath语法: 获取所有li标签: from lxml import etree html = etree.parse('hello.html') print type(html) ...
随机推荐
- sql处理重复的列,更好理清分组和分区
一.分组统计.分区排名 1.语法和含义: 如果查询结果看得有疑惑,看第二部分-sql处理重复的列,更好理清分组和分区,有建表插入数据的sql语句 分组统计:GROUP BY 结合 统计/聚合函数一起使 ...
- 解决Selenium元素拖拽不生效Bug
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/e8aa6c6f.html 你好,我是测试蔡坨坨. 前几天在使用Selenium进行元素拖拽操作时,发现Selenium自带的 ...
- MGF multivariate generating function 多变量生成函数
目录 MGF多变量生成函数multivariate generating function 定义 例子 Extremal parameters III.8.1 largest components 例 ...
- java网络编程--3 TCP
java网络编程--3 TCP 1.6.TCP 客户端 连接服务器 Socket 发送消息 package com.ssl.lesson02; import java.io.IOException; ...
- 谷歌浏览器配置Selenium,并配合python使用
python环境准备 python 需要安装selenium ,这个直接pip安装即可 pip install selenium -i http://pypi.douban.com/simple -- ...
- Spring Data Solr 对 Solr 的增删改查实例
Spring Data Solr 就是为了方便 solr 的开发研制的一个框架,其底层是对 SolrJ(官方 API)的封装 一.环境搭建 第一步:创建 Maven 项目(springdatasolr ...
- GO实现Redis:GO实现TCP服务器(1)
本文实现一个Echo TCP Server interface/tcp/Handler.go type Handler interface { Handle(ctx context.Context, ...
- vue2双向绑定原理及源码解析
首先我们要知道VUE实现双向绑定的步骤是什么: 实现一个监听器 Observer 对数据对象进行遍历,包括子属性对象的属性,利用 Object.defineProperty() 对属性都加上 sett ...
- 介绍一下js垃圾回收机制
JavaScript中的垃圾回收机制负责自动管理内存,回收不再使用的对象所占用的内存空间.在JavaScript中,开发者不需要显式地分配和释放内存,垃圾回收器会自动完成这些操作.以下是关于JavaS ...
- Binder机制及底层实现
<1>进程间的内存空间是进程私有的<2>进程间和内核的空间是互通的<3>进程1空间<--->内核空间<-->进程2空间Binder跨进程通信 ...