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


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

    1. bs对象.节点名.next_sibling 获取后一个兄弟节点

    在这里插入图片描述

    sibling [ˈsɪblɪŋ]:兄弟。

    语法格式:bs对象.节点名.next_sibling
    返回值:节点对象。

    # 声明一个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对象.节点名p——获取第1个p节点:")
    print(bs_duixiang.p,'\n')
    
    print("步骤2.1:bs对象.节点名p.next_sibling——获取第2个p节点:")
    print(bs_duixiang.p.next_sibling,'\n')
    
    print("步骤2.2:获取到的数据类型为tag对象:")
    print(type(bs_duixiang.p.next_sibling),'\n')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    【终端输出】

    步骤1:bs对象.节点名p——获取第1个p节点:
    <p>试问卷帘人</p> 
    
    步骤2.1:bs对象.节点名p.next_sibling——获取第2个p节点:
    <p>却道海棠依旧</p> 
    
    步骤2.2:获取到的数据类型为tag对象:
    <class 'bs4.element.Tag'> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2. bs对象.节点名.next_siblings 获取后面的所有兄弟节点

    语法格式:bs对象.节点名.next_siblings
    返回值:生成器。
    取值方法:
    方法1:for循环从生成器中取值for i,child in enumerate(bs_duixiang.p.next_siblings)
    方法2:用list函数从生成器中取值list(enumerate(bs_duixiang.p.next_siblings))

    # 声明一个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对象.节点名p——获取第1个p节点:")
    print(bs_duixiang.p,'\n')
    
    print("步骤2.1:bs对象.节点名p.next_siblings——获取第1个p节点后面的所有兄弟节点:")
    print(bs_duixiang.p.next_siblings,'\n')
    
    print("步骤2.2:获取到的数据类型为生成器:")
    print(type(bs_duixiang.p.next_siblings),'\n')
    
    print("取值方法1:利用for循环从生成器中取值,i表示元素序号,child表示元素:")
    for i, child in enumerate(bs_duixiang.p.next_siblings) :
        print(i, child)
    
    print('\n')
    print("取值方法2:用list函数从生成器中取值,得到的是列表:")
    print(list(enumerate(bs_duixiang.p.next_siblings)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    【终端输出】

    步骤1:bs对象.节点名p——获取第1个p节点:
    <p>试问卷帘人</p> 
    
    步骤2.1:bs对象.节点名p.next_siblings——获取第1个p节点后面的所有兄弟节点:
    <generator object PageElement.next_siblings at 0x000001C8C4BD46D0> 
    
    步骤2.2:获取到的数据类型为生成器:
    <class 'generator'> 
    
    取值方法1:利用for循环从生成器中取值,i表示元素序号,child表示元素:
    0 <p>却道海棠依旧</p>
    1 <p>知否?知否?</p>
    2 <p>应是绿肥红瘦</p>
    
    
    取值方法2:用list函数从生成器中取值,得到的是列表:
    [(0, <p>却道海棠依旧</p>), (1, <p>知否?知否?</p>), (2, <p>应是绿肥红瘦</p>)]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3. bs对象.节点名.previous_sibling 获取前一个兄弟节点

    previous [ˈpriːviəs]:前面的。

    语法格式:bs对象.节点名.previous_sibling
    返回值:节点对象。

    # 声明一个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对象.节点名p——获取第1个p节点:")
    print(bs_duixiang.p,'\n')
    
    print("步骤2.1:bs对象.节点名.previous_siblingg——获取第p节点前面的h3节点:")
    print(bs_duixiang.p.previous_sibling,'\n')
    
    print("步骤2.2:获取到的数据类型为tag对象:")
    print(type(bs_duixiang.p.previous_sibling),'\n')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    【终端输出】

    步骤1:bs对象.节点名p——获取第1个p节点:
    <p>试问卷帘人</p> 
    
    步骤2.1:bs对象.节点名.previous_siblingg——获取第p节点前面的h3节点:
    <h3>李清照<span>(宋)</span></h3> 
    
    步骤2.2:获取到的数据类型为tag对象:
    <class 'bs4.element.Tag'> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4. bs对象.节点名.previous_siblings 获取前面的所有兄弟节点

    语法格式:bs对象.节点名.previous_siblings
    返回值:生成器。
    取值方法:
    方法1:for循环从生成器中取值for i,child in enumerate(bs_duixiang.p.previous_siblings)
    方法2:用list函数从生成器中取值list(enumerate(bs_duixiang.p.previous_siblings))

    # 声明一个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>
    """
    # 2.1 BeautifulSoup类(要解析的字符串,解析器)
    # 2.2 传入要解析的字符串html_str和解析器lxml,实例化类得到一个BeautifulSoup对象 
    bs_duixiang = BeautifulSoup(html_str, 'lxml')
    
    print("步骤1:bs对象.节点名p——获取第1个p节点:")
    print(bs_duixiang.p,'\n')
    
    print("步骤2.1:bs对象.节点名p.previous_siblings——获取第1个p节点前面的所有兄弟节点:")
    print(bs_duixiang.p.previous_siblings,'\n')
    
    print("步骤2.2:获取到的数据类型为生成器:")
    print(type(bs_duixiang.p.previous_siblings),'\n')
    
    
    print("取值方法1:利用for循环从生成器中取值,i表示元素序号,child表示元素:")
    for i,child in enumerate(bs_duixiang.p.previous_siblings) :
        print(i, child)
    
    print('\n')
    print("取值方法2:用list函数从生成器中取值,得到的是列表:")
    print(list(enumerate(bs_duixiang.p.previous_siblings)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    【终端输出】

    步骤1:bs对象.节点名p——获取第1个p节点:
    <p>试问卷帘人</p> 
    
    步骤2.1:bs对象.节点名p.previous_siblings——获取第1个p节点前面的所有兄弟节点:
    <generator object PageElement.previous_siblings at 0x000001C8C4B05900> 
    
    步骤2.2:获取到的数据类型为生成器:
    <class 'generator'> 
    
    取值方法1:利用for循环从生成器中取值,i表示元素序号,child表示元素:
    0 <h3>李清照<span>(宋)</span></h3>
    1 <h2>如梦令</h2>
    
    
    取值方法2:用list函数从生成器中取值,得到的是列表:
    [(0, <h3>李清照<span>(宋)</span></h3>), (1, <h2>如梦令</h2>)]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    5. 总结

    在这里插入图片描述

  • 相关阅读:
    C++设计模式-设计原则
    Redis入门
    『C语言进阶』指针进阶(二)
    SpringSecurity+jwt使用
    RDBMS 的历史回顾
    文字转语音播报模块(一):阿里云nls服务使用示例
    1.(vue3.x+vite)封装组件
    MAC电脑4个隐藏技巧
    SpringMVC06-SpringMVC的视图
    Java版本企业工程项目管理系统源码+spring cloud 系统管理+java 系统设置+二次开发
  • 原文地址:https://blog.csdn.net/weixin_63986098/article/details/125512136