当前位置:网站首页>17 `bs对象.节点名h3.parent` parents 获取父节点 祖先节点
17 `bs对象.节点名h3.parent` parents 获取父节点 祖先节点
2022-06-28 21:21: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>
网页示例图

边栏推荐
- LeetCode560. 和为K的子数组
- Application of Andy s first dictionary (uva10815) Purple Book p112set
- LeetCode986. 区间列表的交集
- Pyechart drawing multiple Y-axis line graphs
- 什么是接口?什么是接口测试?
- The comprehensive application of the setstack computer (uva12096) Purple Book p116stl
- 精通数据分析能力,收入翻倍?什么才是最强竞争力
- Explanation and usage of sqrt() function
- Real time transformer: meituan's research on single image depth estimation
- [try to hack] cobalt strike (I)
猜你喜欢

力扣树的进一步应用

postman简介与安装步骤

Mongodb - replica set and sharding

Bitbucket failed to pull the warehouse Using SSH

RT thread thread synchronization and thread communication

MySQL system error occurred 1067

【笔记:模拟MOS集成电路】带隙基准(基本原理+电流模+电压模电路详解)

我也差点“跑路”

Alist+raidrive gives the computer a complete 8billion GB hard disk drive

【筆記:模擬MOS集成電路】帶隙基准(基本原理+電流模+電壓模電路詳解)
随机推荐
GlobalSign的泛域名SSL证书
rapid ssl通配符证书八百一年是正版吗
LeetCode123. 买卖股票的最佳时机III
Stability summary
Pie (poj3122) super detailed and easy to understand binary introduction
Query rewriting for opengauss kernel analysis
Leetcode 36. Effective Sudoku (yes, once)
关于不完全类型的认识
Flask——总结
Building web automation environment
开通股票炒股账号安全吗?是靠谱的吗?
LeetCode226. Flip binary tree
Ehcache配置资料,方便自己查
题解 Ananagrams(UVa156)紫书P113map的应用
LeetCode121. The best time to buy and sell stocks
Globalsign's Pan domain SSL certificate
ID access card copied to mobile phone_ How to turn a mobile phone into an access card mobile NFC copy access card graphic tutorial
RT thread thread synchronization and thread communication
软件watchdog和ANR触发memory dump讲解
with torch. no_ Grad(): reason for using