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())
    
  • 相关阅读:
    状态模式
    $和@的特殊处理
    Windows服务调试状态下用Console启动
    AutoResetEvent
    await和async
    计算a,b,c的排列组合
    百度地图:通过经纬度获得位置信息和距离
    装饰模式
    vue+h-ui+layUI完成列表页及编辑页
    为什么memset不能将数组元素初始化为1?
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11585754.html
Copyright © 2011-2022 走看看