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) ...
随机推荐
- 安装node.js教程------深入使用Vue
教程 1.下载nodejs引擎 网址:https://nodejs.org/en/download/ 选择32-bit或者64-bit都行 2.下载最新版npm.zip压缩包 网址:http://no ...
- BGF bivariate generating function 双变量生成函数
目录 定义 BGF bivariate generating function horizonal GF 和 vertical GF 例子 组合数 horizonal GF vertical GF ( ...
- 网页静态化技术 Freemarker
网页静态化解决方案在实际运用中比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道.对于电商网站的商品详细页(几百万的商品,同样的页面模板格局)来说,每个商品又有大量的信息,这样的情况同样也适 ...
- XCode汇编调试
开启Xcode汇编调试 选中Always Show Disassembly项. XCode -> Debug -> Debug Workflow -> Always Show Dis ...
- vue环境安装与配置
https://www.jb51.net/article/251371.htmhttps://www.yht7.com/news/193355 一.下载和安装Vue: https://nodejs.o ...
- 谁能真正替代你?AI辅助编码工具深度对比(chatGPT/Copilot/Cursor/New Bing)
写在开头 这几个月AI相关新闻的火爆程度大家都已经看见了,作为一个被裹挟在AI时代浪潮中的程序员,在这几个月里我也是异常兴奋和焦虑.甚至都兴奋的不想拖更了.不仅仅兴奋于AI对于我们生产力的全面提升,也 ...
- FileReader之获取文本文件内容为字符串
FileReader之获取文本文件内容为字符串 FileReader官网描述: FileReader 对象允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 Fil ...
- [设计模式/网络/WebServer/Nginx]设计模式之代理模式(网络代理 : 正向代理与反向代理)【7】
1 代理模式 1.1 模式定义 代理模式(Proxy Pattern):为其他对象提供一种代理服务以对这个被代理的对象进行控制访问.[ 设计模式.面向对象程序设计思想的鼻祖----GoF] Subje ...
- 【HALF】CSP-S2 2022 游记 - Dawn Eve?
相册放在 NOIP2022 游记 了 Day -2 周三.折腾了好几天,考场从深圳换到广州最后换到东莞.疫情爆炸... 只是希望自己最后两场比赛不会受到影响. 下午是高二体锻课,结果我们得去做核酸.四 ...
- 微信Token验证代码的实现
微信开放第三方API接口, 申请地址: https://mp.weixin.qq.com/advanced/advanced?action=interface&t=advanced/inter ...