当前位置:网站首页>17 `bs对象.节点名h3.parent` parents 获取父节点 祖先节点
17 `bs对象.节点名h3.parent` parents 获取父节点 祖先节点
2022-06-28 02:31:00 【安迪Python】
17 bs对象.节点名h3.parent
parents 获取父节点 祖先节点
1. bs对象.节点名h3.parent
获取父节点
parent [ˈpeərənt]:父亲。
语法格式:bs对象.节点名h3.parent
返回值:节点对象

# 声明一个html_str字符串变量,存储部分HTML代码
html_str = """
<html>
<head><meta charset="utf-8"><title>古诗2首</title></head>
<body>
<div class="poems" id="section1"><h2>如梦令</h2><h3>李清照<span>(宋)</span></h3><p>试问卷帘人</p><p>却道海棠依旧</p><p>知否?知否?</p><p>应是绿肥红瘦</p></div>
<div class="poems" id="section2"><h2>无题</h2><h3>佚名</h3>
<p>本是青灯不归客</p><p>却因浊酒留风尘</p><p>终是庄周梦了蝶</p><p>你是恩赐也是劫</p>
</div>
</body>
</html>
"""
# 1. 从bs4解析库导入BeautifulSoup类用于解析数据
from bs4 import BeautifulSoup
# 2.1 BeautifulSoup类(要解析的字符串,解析器)
# 2.2 传入要解析的字符串html_str和解析器lxml,实例化类得到一个BeautifulSoup对象
bs_duixiang = BeautifulSoup(html_str, 'lxml')
print("步骤1:bs对象.节点名h3——取到第1个h3节点:")
print(bs_duixiang.h3,'\n')
print("步骤2.1:bs对象.节点名h3.parent——取到第h3节点的父节点div节点:")
print(bs_duixiang.h3.parent,'\n')
print("步骤2.2 查看得到节点的数据类型:")
print(type(bs_duixiang.h3.parent),'\n')
【终端输出】
步骤1:bs对象.节点名h3——取到第1个h3节点:
<h3>李清照<span>(宋)</span></h3>
步骤2.1:bs对象.节点名h3.parent——取到第h3节点的父节点div节点:
<div class="poems" id="section1"><h2>如梦令</h2><h3>李清照<span>(宋)</span></h3><p>试问卷帘人</p><p>却道海棠依旧</p><p>知否?知否?</p><p>应是绿肥红瘦</p></div>
步骤2.2 查看得到节点的数据类型:
<class 'bs4.element.Tag'>
2. bs对象.节点名h3.parents
获取祖先节点
enumerate [ɪˈnjuːməreɪt]:罗列,在Python中加入enumerate可以输出元素索引。
语法格式:bs对象.节点名.parents
返回值:生成器
取值方法:
方法1:for循环从生成器中取值for i,child in enumerate(bs_duixiang.h3.parents)
方法2:用list函数从生成器中取值list(enumerate(bs_duixiang.h3.parents))
2.1 for循环从生成器中取值
# 声明一个html_str字符串变量,存储部分HTML代码
html_str = """
<html>
<head><meta charset="utf-8"><title>古诗2首</title></head>
<body>
<div class="poems" id="section1"><h2>如梦令</h2><h3>李清照<span>(宋)</span></h3><p>试问卷帘人</p><p>却道海棠依旧</p><p>知否?知否?</p><p>应是绿肥红瘦</p></div>
<div class="poems" id="section2"><h2>无题</h2><h3>佚名</h3>
<p>本是青灯不归客</p><p>却因浊酒留风尘</p><p>终是庄周梦了蝶</p><p>你是恩赐也是劫</p>
</div>
</body>
</html>
"""
# 1. 从bs4解析库导入BeautifulSoup类用于解析数据
from bs4 import BeautifulSoup
# 2.1 BeautifulSoup类(要解析的字符串,解析器)
# 2.2 传入要解析的字符串html_str和解析器lxml,实例化类得到一个BeautifulSoup对象
bs_duixiang = BeautifulSoup(html_str, 'lxml')
print("步骤1:bs对象.节点名h3——取到第1个h3节点:")
print(bs_duixiang.h3,'\n')
print("步骤2.1:bs对象.节点名h3.parents——取到第h3节点的祖先节点:")
print(bs_duixiang.h3.parents,'\n')
print("步骤2.2 查看得到节点的数据类型:")
print(type(bs_duixiang.h3.parents),'\n')
print("步骤3:for循环从生成器中取值:")
for i,child in enumerate(bs_duixiang.h3.parents) :
print(i, child)
【终端输出】
步骤1:bs对象.节点名h3——取到第1个h3节点:
<h3>李清照<span>(宋)</span></h3>
步骤2.1:bs对象.节点名h3.parents——取到第h3节点的祖先节点:
<generator object PageElement.parents at 0x0000017B0D5144A0>
步骤2.2 查看得到节点的数据类型:
<class 'generator'>
步骤3:for循环从生成器中取值:
0 <div class="poems" id="section1"><h2>如梦令</h2><h3>李清照<span>(宋)</span></h3><p>试问卷帘人</p><p>却道海棠依旧</p><p>知否?知否?</p><p>应是绿肥红瘦</p></div>
1 <body>
<div class="poems" id="section1"><h2>如梦令</h2><h3>李清照<span>(宋)</span></h3><p>试问卷帘人</p><p>却道海棠依旧</p><p>知否?知否?</p><p>应是绿肥红瘦</p></div>
<div class="poems" id="section2"><h2>无题</h2><h3>佚名</h3>
<p>本是青灯不归客</p><p>却因浊酒留风尘</p><p>终是庄周梦了蝶</p><p>你是恩赐也是劫</p>
</div>
</body>
2 <html>
<head><meta charset="utf-8"/><title>古诗2首</title></head>
<body>
<div class="poems" id="section1"><h2>如梦令</h2><h3>李清照<span>(宋)</span></h3><p>试问卷帘人</p><p>却道海棠依旧</p><p>知否?知否?</p><p>应是绿肥红瘦</p></div>
<div class="poems" id="section2"><h2>无题</h2><h3>佚名</h3>
<p>本是青灯不归客</p><p>却因浊酒留风尘</p><p>终是庄周梦了蝶</p><p>你是恩赐也是劫</p>
</div>
</body>
</html>
3 <html>
<head><meta charset="utf-8"/><title>古诗2首</title></head>
<body>
<div class="poems" id="section1"><h2>如梦令</h2><h3>李清照<span>(宋)</span></h3><p>试问卷帘人</p><p>却道海棠依旧</p><p>知否?知否?</p><p>应是绿肥红瘦</p></div>
<div class="poems" id="section2"><h2>无题</h2><h3>佚名</h3>
<p>本是青灯不归客</p><p>却因浊酒留风尘</p><p>终是庄周梦了蝶</p><p>你是恩赐也是劫</p>
</div>
</body>
</html>

2.2 用list函数从生成器中取值
# 声明一个html_str字符串变量,存储部分HTML代码
html_str = """
<html>
<head><meta charset="utf-8"><title>古诗2首</title></head>
<body>
<div class="poems" id="section1"><h2>如梦令</h2><h3>李清照<span>(宋)</span></h3><p>试问卷帘人</p><p>却道海棠依旧</p><p>知否?知否?</p><p>应是绿肥红瘦</p></div>
<div class="poems" id="section2"><h2>无题</h2><h3>佚名</h3>
<p>本是青灯不归客</p><p>却因浊酒留风尘</p><p>终是庄周梦了蝶</p><p>你是恩赐也是劫</p>
</div>
</body>
</html>
"""
# 1. 从bs4解析库导入BeautifulSoup类用于解析数据
from bs4 import BeautifulSoup
# 2.1 BeautifulSoup类(要解析的字符串,解析器)
# 2.2 传入要解析的字符串html_str和解析器lxml,实例化类得到一个BeautifulSoup对象
bs_duixiang = BeautifulSoup(html_str, 'lxml')
print("步骤1:bs对象.节点名h3——取到第1个h3节点:")
print(bs_duixiang.h3,'\n')
print("步骤2.1:bs对象.节点名h3.parents——取到第h3节点的祖先节点:")
print(bs_duixiang.h3.parents,'\n')
print("步骤2.2 查看得到节点的数据类型:")
print(type(bs_duixiang.h3.parents),'\n')
print("步骤3:用list函数从生成器中取值:")
print(list(enumerate(bs_duixiang.h3.parents)))
【终端输出】
步骤1:bs对象.节点名h3——取到第1个h3节点:
<h3>李清照<span>(宋)</span></h3>
步骤2.1:bs对象.节点名h3.parents——取到第h3节点的祖先节点:
<generator object PageElement.parents at 0x0000017B0D514580>
步骤2.2 查看得到节点的数据类型:
<class 'generator'>
步骤3:用list函数从生成器中取值:
[(0, <div class="poems" id="section1"><h2>如梦令</h2><h3>李清照<span>(宋)</span></h3><p>试问卷帘人</p><p>却道海棠依旧</p><p>知否?知否?</p><p>应是绿肥红瘦</p></div>), (1, <body>
<div class="poems" id="section1"><h2>如梦令</h2><h3>李清照<span>(宋)</span></h3><p>试问卷帘人</p><p>却道海棠依旧</p><p>知否?知否?</p><p>应是绿肥红瘦</p></div>
<div class="poems" id="section2"><h2>无题</h2><h3>佚名</h3>
<p>本是青灯不归客</p><p>却因浊酒留风尘</p><p>终是庄周梦了蝶</p><p>你是恩赐也是劫</p>
</div>
</body>), (2, <html>
<head><meta charset="utf-8"/><title>古诗2首</title></head>
<body>
<div class="poems" id="section1"><h2>如梦令</h2><h3>李清照<span>(宋)</span></h3><p>试问卷帘人</p><p>却道海棠依旧</p><p>知否?知否?</p><p>应是绿肥红瘦</p></div>
<div class="poems" id="section2"><h2>无题</h2><h3>佚名</h3>
<p>本是青灯不归客</p><p>却因浊酒留风尘</p><p>终是庄周梦了蝶</p><p>你是恩赐也是劫</p>
</div>
</body>
</html>), (3, <html>
<head><meta charset="utf-8"/><title>古诗2首</title></head>
<body>
<div class="poems" id="section1"><h2>如梦令</h2><h3>李清照<span>(宋)</span></h3><p>试问卷帘人</p><p>却道海棠依旧</p><p>知否?知否?</p><p>应是绿肥红瘦</p></div>
<div class="poems" id="section2"><h2>无题</h2><h3>佚名</h3>
<p>本是青灯不归客</p><p>却因浊酒留风尘</p><p>终是庄周梦了蝶</p><p>你是恩赐也是劫</p>
</div>
</body>
</html>
)]
运行代码后,得到一个列表。
列表最前面的数字0
,1
,2
,3
是元素的索引。
第1个元素是h3
节点的父节点div
节点。
第2个元素是div
节点的父body
节点。 第3个元素是body
节点的父节点html
节点。 第4个元素是所有节点。
for循环和list函数最终的输出内容是一样的,只是list函数输出的是列表形式。
3. 总结

4. 附html代码
<html> <!--html节点是body节点的父节点,是h3节点的祖先节点-->
<head> <!--head节点和div节点平级,不是h3节点的祖先节点-->
<meta charset="utf-8">
<title>古诗2首</title>
</head>
<body> <!--body节点是div节点的父节点,是h3节点的祖先节点-->
<div class="poems" id="section1"> <!--div节点是h3节点的父节点-->
<h2>如梦令</h2>
<h3>李清照<span>(宋)</span></h3> <!--以h3节点为基准-->
<p>试问卷帘人</p>
<p>却道海棠依旧</p>
<p>知否?知否?</p>
<p>应是绿肥红瘦</p>
</div>
<div class="poems" id="section2">
<h2>无题</h2>
<h3>佚名</h3>
<p>本是青灯不归客</p>
<p>却因浊酒留风尘</p>
<p>终是庄周梦了蝶</p>
<p>你是恩赐也是劫</p>
</div>
</body>
</html>
网页示例图

边栏推荐
- Thesis reading: General advantageous transformers
- Simple elk configuration to realize production level log collection and query practice
- Inference optimization implementation of tensorrt model
- Why is the service implementation class always red
- A16z: metauniverse unlocks new opportunities in game infrastructure
- Tencent games released more than 40 products and projects, including 12 new games
- nn.Parameter和torch.nn.init系列函数给模型参数初始化
- 2022电工(初级)复训题库及在线模拟考试
- 没错,是水的一篇
- 2022年R1快開門式壓力容器操作特種作業證考試題庫及答案
猜你喜欢
ETCD数据库源码分析——集群间网络层服务端RaftHandler
爱普生L3153打印机如何清洗喷头
【PaddleDetection】ModuleNotFoundError: No module named ‘paddle‘
【活动早知道】LiveVideoStack近期活动一览
如何获取GC(垃圾回收器)的STW(暂停)时间?
Tencent games released more than 40 products and projects, including 12 new games
暴雨去哪儿?天气预报不准谁的锅?
Gateway微服務路由使微服務靜態資源加載失敗
idea自动生成代码
[iptables & ICMP] description of ICMP Protocol in iptables default policy
随机推荐
您的物联网安全性是否足够强大?
Is it safe to buy stocks and open an account through the account opening link of the broker manager? Want to open an account for stock trading
Heartless sword English Chinese bilingual poem 004 Meditation
JS clear the object and its value:
空闲中断无法清除
Idea auto generate code
被校园暴力,性格内向的马斯克凄惨而励志的童年
【iptables&icmp】iptables默认策略中关于icmp协议的说明
Apache - about Apache
元宇宙标准论坛成立
栈的基本操作(C语言实现)
Brief history and future trend of codeless software
业内首个!可运行在移动设备端的视频画质主观体验MOS分评估模型!
在牛客中使用JS编程题【split】
导致系统性能失败的十个原因
Built in functions for MySQL database operations
js清空对象和对象的值:
R1 Quick Open Pressure Vessel Operation Special Operation Certificate Examination Library and Answers in 2022
Build your own website (17)
RichView TRVStyle ParaStyles