zoukankan      html  css  js  c++  java
  • 基于bs4库的HTML标签遍历方法

    基于bs4库的HTML标签遍历方法

    import requests
    r=requests.get('http://python123.io/ws/demo.html')
    demo=r.text
    
    

    HTML基本格式

    HTML可以看做一棵标签树

    遍历方法

    !

    下行遍历

    属性 说明
    .contents 将该标签所有的儿子节点存入列表
    .children 子节点的迭代类型,和contents类似,用于遍历儿子节点
    .descendants 子孙节点的迭代类型,包含所有的子孙跌点,用于循环遍历
    import requests
    from bs4 import BeautifulSoup
    
    r=requests.get('http://python123.io/ws/demo.html')
    demo=r.text
    soup=BeautifulSoup(demo,'html.parser')
    print(soup.contents)# 获取整个标签树的儿子节点
    print(soup.body.content)#返回标签树的body标签下的节点
    print(soup.head)#返回head标签
    print(len(soup.body.content))#输出body标签儿子节点的个数
    print(soup.body.content[1])#获取body下第一个子标签
    
    

    遍历子孙节点

    import requests
    from bs4 import BeautifulSoup
    
    r=requests.get('http://python123.io/ws/demo.html')
    demo=r.text
    soup=BeautifulSoup(demo,'html.parser')
    
    for child in soup.body.children:#遍历儿子节点
        print(child)
        
    
    for child in soup.body.descendants:#遍历子孙节点
        print(child)
    

    上行遍历

    属性 说明
    .parent 节点的父亲标签
    .parents 节点的先辈标签的迭代类型,用于循环遍历先辈节点
    import requests
    from bs4 import BeautifulSoup
    
    r=requests.get('http://python123.io/ws/demo.html')
    demo=r.text
    soup=BeautifulSoup(demo,'html.parser')
    print(soup.title.parent)
    print(soup.title.parent)
    print(soup.parent)
    
    import requests
    from bs4 import BeautifulSoup
    
    r=requests.get('http://python123.io/ws/demo.html')
    demo=r.text
    soup=BeautifulSoup(demo,'html.parser')
    
    for parent in soup.a.parents:#遍历先辈的信息
        if parent is None:
            print(parent)
        else:
            print(parent.name)
    

    平行遍历

    属性 说明
    .next_sibling 返回HTML文本顺序的下一个平行标签
    .previous_sibling 返回HTML文本顺序的上一个平行标签
    .next_siblings 迭代类型,返回HTML文本顺序后续所有的平行标签
    .pervious_siblings 迭代类型,返回HTML文本顺序前面所有的平行标签

    注意

    1. 标签树的平行遍历是有条件的
    2. 平行遍历发生在同一个父亲节点的各节点之间
    3. 标签中的内容也构成了节点

    import requests
    from bs4 import BeautifulSoup
    
    r=requests.get('http://python123.io/ws/demo.html')
    demo=r.text
    soup=BeautifulSoup(demo,'html.parser')
    
    print(soup.a.next_sibling)#a标签的下一个标签
    print(soup.a.next_sibling.next_sibling)#a标签的下一个标签的下一个标签
    print(soup.a.previous_sibling)#a标签的前一个标签
    print(soup.a.previous_sibling.previous_sibling)#a标签的前一个标签的前一个标签
    

    平行遍历

    import requests
    from bs4 import BeautifulSoup
    
    r=requests.get('http://python123.io/ws/demo.html')
    demo=r.text
    soup=BeautifulSoup(demo,'html.parser')
    
    
    for sibling in soup.a.next_siblings:#遍历后续节点
        print(sibling)
        
        
    for sibling in soup.a.previous_sibling:#遍历之前的节点
        print(sibling)
    

    有层次感的输出-prettify()

    import requests
    from bs4 import BeautifulSoup
    
    r=requests.get('http://python123.io/ws/demo.html')
    demo=r.text
    soup=BeautifulSoup(demo,'html.parser')
    print(soup.prettify())
    
  • 相关阅读:
    cs ip 通过jmp转移命令间接赋值。无法直接对其赋值。
    8086 cpu为什么要把段地址*16+偏移量形成物理地址呢?
    保护模式和实模式的区别
    计算机的内存是以字节为单位的, 这个认知很重要。
    计算机的内存是以字节为单位的。
    一个字 word 是16位, 一个字由两个字节组成 , 字节=byte ,一个字节8位, 位=bit 如果没有特殊说明kb 就是指 k*bit
    物理地址为20位 如10000H 用段地址*16+偏移地址表示
    深入学习Java线程池
    在线考试系统镜像构建、推送、部署
    容器 变成镜像提交到阿里云镜像仓库
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11585754.html
Copyright © 2011-2022 走看看