当前位置:网站首页>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>
网页示例图

边栏推荐
- "Everyday Mathematics" serial 53: February 21
- Ten reasons for system performance failure
- Apache - Introduction à Apache
- __getitem__和__setitem__
- Tardigrade:Trino 解决 ETL 场景的方案
- R语言惩罚逻辑回归、线性判别分析LDA、广义加性模型GAM、多元自适应回归样条MARS、KNN、二次判别分析QDA、决策树、随机森林、支持向量机SVM分类优质劣质葡萄酒十折交叉验证和ROC可视化
- 业内首个!可运行在移动设备端的视频画质主观体验MOS分评估模型!
- Necessary software tools in embedded software development
- Tips for visiting the website: you are not authorized to view the recovery method of this page
- 同样是MB,差距怎么这么大呢?
猜你喜欢
![[iptables & ICMP] description of ICMP Protocol in iptables default policy](/img/9d/85027ea0b0bc9c6494ba41daed9f38.png)
[iptables & ICMP] description of ICMP Protocol in iptables default policy

idea自动生成代码
![Redis cluster setup [simple]](/img/20/9974a290f8c5d346e2b404b48b02e5.png)
Redis cluster setup [simple]

Tencent games released more than 40 products and projects, including 12 new games

多快好省,低门槛AI部署工具FastDeploy测试版来了!

R语言惩罚逻辑回归、线性判别分析LDA、广义加性模型GAM、多元自适应回归样条MARS、KNN、二次判别分析QDA、决策树、随机森林、支持向量机SVM分类优质劣质葡萄酒十折交叉验证和ROC可视化

mysql获取当前时间是一年的第多少天

CI & CD 不可不知!

文件的相对路径写法

A16z:元宇宙解锁游戏基础设施中的新机遇
随机推荐
Redis搭建集群【简单】
Domain Name System
剑指 Offer 53 - I. 在排序数组中查找数字 I(改进二分)
爱普生L3153打印机如何清洗喷头
TensorRT 模型推理优化实现
栈的基本操作(C语言实现)
nn.Parameter和torch.nn.init系列函数给模型参数初始化
windows 2003 64位系统php运行报错:1% 不是有效的 win32 应用程序
视频编解码性能优化与实现
空闲中断无法清除
導入Excel文件,解决跳過空白單元格不讀取,並且下標前移的問題,以及RETURN_BLANK_AS_NULL報紅
网上股票投资交流群安全吗?进群免费开户靠谱嘛?
Build your own website (17)
买股票通过券商经理的开户链接开户资金是否安全?想开户炒股
Dataloader参数collate_fn的使用
Is it reliable to invest in the inter-bank certificate of deposit fund? Is the inter-bank certificate of deposit fund safe
启牛开的证券账户是安全的吗?如何开账户呢
根据Explain查看sql执行计划,对SQL进行优化
剑指 Offer 47. 礼物的最大价值(DP)
[522. longest special sequence II]