16 bs对象.节点名div.属性contents children descendants 获取子节点 子孙节点

文章目录

  • 16 `bs对象.节点名div.属性contents` children descendants 获取子节点 子孙节点
    • 1. 关联选择
    • 2. `bs对象.节点名.属性contents` 获取子节点
    • 3. `bs对象.节点名.children` 获取子节点
    • 4. `bs对象.节点名.descendants ` 获取子孙节点

1. 关联选择

<p>本是青灯不归客</p>
<p>却因浊酒留风尘</p>
<p>终是庄周梦了蝶</p>
<p>你是恩赐也是劫</p>

上述HTML代码有4个p节点,我们之前的节点选择方法只能选取到第一个p节点。
要选取第2、3、4p节点,我们就需要利用关联选择方法。

2. bs对象.节点名.属性contents 获取子节点

contents [kənˈtents]:内容。

语法格式:bs对象.节点名.contents
返回值:列表
取值方法:列表[索引]

# 声明一个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 传入2个参数,实例化类得到一个BeautifulSoup对象
bs_duixiang = BeautifulSoup(html_str, 'lxml') print("步骤1:bs对象.节点名div——获取第1个div节点:")
print(bs_duixiang.div,'\n')print("步骤2.1:bs对象.节点名div.属性contents——获取第1个div节点的所有子节点:")
print(bs_duixiang.div.contents,'\n')print("步骤2.2 :属性contents得到的子节点的数据类型为列表:")
print(type(bs_duixiang.div.contents),'\n')print("步骤3:用列表[索引]——取值:",'\n')
print("div节点的第1个子节点:",bs_duixiang.div.contents[0],'\n')
print("div节点的第2个子节点:",bs_duixiang.div.contents[1],'\n')
print("div节点的第5个子节点:",bs_duixiang.div.contents[4],'\n')
print("div节点的第5个子节点的文本内容:",bs_duixiang.div.contents[4].string,'\n')

【终端输出】

步骤1:bs对象.节点名div——获取第1个div节点:
<div class="poems" id="section1"><h2>如梦令</h2><h3>李清照<span>(宋)</span></h3><p>试问卷帘人</p><p>却道海棠依旧</p><p>知否?知否?</p><p>应是绿肥红瘦</p></div> 步骤2.1:bs对象.节点名div.属性contents——获取第1个div节点的所有子节点:
[<h2>如梦令</h2>, <h3>李清照<span>(宋)</span></h3>, <p>试问卷帘人</p>, <p>却道海棠依旧</p>, <p>知否?知否?</p>, <p>应是绿肥红瘦</p>] 步骤2.2 :属性contents得到的子节点的数据类型为列表:
<class 'list'> 步骤3:用列表[索引]——取值: div节点的第1个子节点: <h2>如梦令</h2> div节点的第2个子节点: <h3>李清照<span>(宋)</span></h3> div节点的第5个子节点: <p>知否?知否?</p> div节点的第5个子节点的文本内容: 知否?知否?

3. bs对象.节点名.children 获取子节点

children[ˈtʃɪldrən]:孩子们。

语法格式:bs对象.节点名.children
返回值:列表迭代器。
取值方法:用for循环从列表迭代器中取值。
for i,child in enumerate(bs对象.节点名.children)

# 声明一个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 传入2个参数,实例化类得到一个BeautifulSoup对象
bs_duixiang = BeautifulSoup(html_str, 'lxml') print("步骤1:bs对象.节点名div——获取第1个div节点:")
print(bs_duixiang.div,'\n')print("步骤2.1:bs对象.节点名div.属性children——获取第1个div节点的所有子节点:")
print(bs_duixiang.div.children,'\n')print("步骤2.2 :属性children得到的子节点的数据类型为列表迭代器:")
print(type(bs_duixiang.div.children),'\n')print("步骤3.1:用for循环从列表迭代器中取值:")
for i,child in enumerate(bs_duixiang.div.children) :print(i, child)# '\n'的作用是输出一个空行,目的是为让输出内容美观,方便查看
print('\n')print("步骤3.2 从列表迭代器中取出的child的数据类型为tag对象:")
print(type(child),'\n')print("步骤4:输出第1个div节点最后一个子节点的文本内容:")
print(child.string,'\n')

【终端输出】

步骤1:bs对象.节点名div——获取第1个div节点:
<div class="poems" id="section1"><h2>如梦令</h2><h3>李清照<span>(宋)</span></h3><p>试问卷帘人</p><p>却道海棠依旧</p><p>知否?知否?</p><p>应是绿肥红瘦</p></div> 步骤2.1:bs对象.节点名div.属性children——获取第1个div节点的所有子节点:
<list_iterator object at 0x0000012FAE97B160> 步骤2.2 :属性children得到的子节点的数据类型为列表迭代器:
<class 'list_iterator'> 步骤3.1:用for循环从列表迭代器中取值:
0 <h2>如梦令</h2>
1 <h3>李清照<span>(宋)</span></h3>
2 <p>试问卷帘人</p>
3 <p>却道海棠依旧</p>
4 <p>知否?知否?</p>
5 <p>应是绿肥红瘦</p>步骤3.2 从列表迭代器中取出的child的数据类型为tag对象:
<class 'bs4.element.Tag'> 步骤4:输出第1个div节点最后一个子节点的文本内容:
应是绿肥红瘦

for i,child in enumerate(bs_duixiang.div.children) 中enumerate的用法参考相关笔记。

4. bs对象.节点名.descendants 获取子孙节点

descendants [dɪˈsendənts]:后代。
generator [ˈdʒenəreɪtə]:生成器。

语法格式:bs对象.节点名.descendants
返回值:生成器。
取值方法:用for循环从生成器中取值。
for i,child in enumerate(bs对象.节点名.descendants)

# 声明一个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 传入2个参数,实例化类得到一个BeautifulSoup对象
bs_duixiang = BeautifulSoup(html_str, 'lxml') print("步骤1:bs对象.节点名div——获取第1个div节点:")
print(bs_duixiang.div,'\n')print("步骤2.1:bs对象.节点名div.属性descendants—获取第1个div节点的所有子孙节点:")
print(bs_duixiang.div.descendants,'\n')print("步骤2.2 :属性descendants得到的子孙节点的数据类型为生成器:")
print(type(bs_duixiang.div.descendants),'\n')print("步骤3:用for循环从生成器中取值:")
for i, desc in enumerate(bs_duixiang.div.descendants) :print(i, desc )

【终端输出】

步骤1:bs对象.节点名div——获取第1个div节点:
<div class="poems" id="section1"><h2>如梦令</h2><h3>李清照<span>(宋)</span></h3><p>试问卷帘人</p><p>却道海棠依旧</p><p>知否?知否?</p><p>应是绿肥红瘦</p></div> 步骤2.1:bs对象.节点名div.属性descendants—获取第1个div节点的所有子孙节点:
<generator object Tag.descendants at 0x0000012FAE8F0200> 步骤2.2 :属性descendants得到的子孙节点的数据类型为生成器:
<class 'generator'> 步骤3:用for循环从生成器中取值:
0 <h2>如梦令</h2>
1 如梦令
2 <h3>李清照<span>(宋)</span></h3>
3 李清照
4 <span>(宋)</span>
5 (宋)
6 <p>试问卷帘人</p>
7 试问卷帘人
8 <p>却道海棠依旧</p>
9 却道海棠依旧
10 <p>知否?知否?</p>
11 知否?知否?
12 <p>应是绿肥红瘦</p>
13 应是绿肥红瘦

16 `bs对象.节点名div.属性contents` children descendants 获取子节点 子孙节点相关推荐

  1. 18. `bs对象.节点名.next_sibling` previous_sibling 获取兄弟节点

    18. bs对象.节点名.next_sibling previous_sibling 获取兄弟节点 文章目录 18. `bs对象.节点名.next_sibling` previous_sibling ...

  2. BeautifulSoup的高级应用 之 contents children descendants string strings stripped_strings

    继上一节.BeautifulSoup的高级应用 之 find findAll,这一节,主要解说BeautifulSoup有关的其它几个重要应用函数. 本篇中,所使用的html为: html_doc = ...

  3. js基础总结——js 获取元素节点、js 绑定onclick事件、js 获取属性 修改属性值、js 获取子元素、js 改变css样式

    参考书籍:<JavaScript DOM编程艺术 第2版> 本博客代码的测试页面是:https://www.layui.com/ js dom操作 js 获取元素节点 一份document ...

  4. 14 bs对象.节点名称.name attrs string 获取节点名称 属性 内容

    14 bs对象.节点名称.name attrs string 获取节点名称 属性 内容 14.1 提取节点名称 属性 内容的方法 tag [tæɡ]:标签. attr:属性. string [strɪ ...

  5. 操作对象_DOM进阶——HTML属性操作(对象属性)

    上一节我们在"DOM基础"学习了对元素节点的操作,这两节介绍对属性节点的操作. 属性节点操作有两种方式,一种是使用"对象属性",另一种是"对象方法&q ...

  6. 从零开始学前端:中括号代替点操作,获取对象,自定义标签属性 --- 今天你学习了吗?(JS:Day3)

    从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(JS) 复习:从零开始学前端:初识函数,合法属性与自定义属性 - 今天你学习了吗?(JS:Day2) 文章目录 从零开始学前端:程序猿小白 ...

  7. JAVA-JSP内置对象之pageContext对象取得不同范围属性

    相关资料: <21天学通Java Web开发> pageContext对象取得不同范围属性 pageContextDemo.jsp 1 <%@ page language=" ...

  8. python查看类的属性和方法_Python 获取对象的属性和方法—dir 函数

    工作中,我们使用一些之前没用到过的模块,使用时需要了解一下这个模块中的一些类的方法或属性,怎么做呢?目前我比较常用的两款IDE"Pycharm"和"VSCode" ...

  9. 判断JavaScript对象为null或者属性为空

    http://blog.csdn.net/yiluoak_47/article/details/7766760 首先说下null与undefined区别: 对已声明但未初始化的和未声明的变量执行typ ...

最新文章

  1. 和与余数的和同余理解_每日一题 | 第38期:数量关系之余数特性
  2. 使用git pull时,项目没有更新?
  3. 看完上汽制动的数字化,才发现以前的数据可视化大屏都白做了
  4. 二十五、JAVA多线程(四、生产者和消费者问题)
  5. JAVA 相关书籍推荐(全)
  6. html如何定义mime类型的作用,自定义mime类型、mime类型介绍
  7. php study pro,phpStudy Pro官方下载|
  8. Python微信自动回复脚本
  9. 远程访问内网监控摄像头【无公网IP】
  10. 开启更优网络的时代:Po.et迈入主网
  11. MES主要功能模块介绍
  12. android高仿微信表情输入与键盘输入详解-解决跳闪与表情切换问题
  13. 使用MultiPowerOnOffTool工具 测试拔插网线对路由器的影响
  14. omap-l138烧写程序之 - 启动模式选择及确认
  15. 枸杞子泡水喝有哪些功效
  16. qq 4 android,Android QQ HD v5.5.4 正式版发布
  17. 浅谈游戏中BOSS设计的思路
  18. 450g吐司烘烤温度_解决这24个问题,吐司面包想失败都难!
  19. JavaWeb-JavaScript API
  20. 北语计算机PHp试题,北语计算机基础模拟试卷和答案1~5.pdf

热门文章

  1. SVN: is scheduled for addition, but is missing
  2. 企业网盘让文件管理更轻松
  3. 矩形脉冲用matlab,矩形周期脉冲信号MATLAB实现.doc
  4. 蔬菜信息配送系统c语言编程,c语言大作业物流配送系统程序文件.doc
  5. 北京供销大数据集团参与撰写的《数据管理实践白皮书》正式发布
  6. matlab实现ROC曲线
  7. java写输出春夏秋冬,switch语句之“春夏秋冬”案例
  8. 01.模型的概念、UML概述
  9. 腾讯围棋AI技术PhoenixGo正式开源 1
  10. 基于PHP的二手车交易系统的设计与实现