zoukankan      html  css  js  c++  java
  • Beautiful Soup的简介(2)

    1) find_all( name , attrs , recursive , text , **kwargs )
     find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件
     可根据标签名、属性、内容查找文档

    html = """
    <div class="panel">
        <div class="panel-heading">
            <h4>Hello</h4>
        <div class="panel-body">
            <ul class="list" id="list-1">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
                <li class="element">Jay</li>
            </ul>
            <ul class="list list-small" id="list-2">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
            </ul>
        </div>
    </div>
    """
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html, 'html5lib')
    print(soup.find_all('ul'))      #find_all根据标签名'ul'都查找出来,放入列表当中
    print(type(soup.find_all('ul')[0]))
    
    [<ul class="list" id="list-1">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
                <li class="element">Jay</li>
            </ul>, <ul class="list list-small" id="list-2">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
            </ul>]
    <class 'bs4.element.Tag'>

    html = """
    <div class="panel">
        <div class="panel-heading">
            <h4>Hello</h4>
        <div class="panel-body">
            <ul class="list" id="list-1">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
                <li class="element">Jay</li>
            </ul>
            <ul class="list list-small" id="list-2">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
            </ul>
        </div>
    </div>
    """
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html, 'html5lib')
    for ul in soup.find_all('ul'):  #通过两次for循环表示出来  
        print (ul.find_all('li'))
    [<li class="element">Foo</li>, <li class="element">Bar</li>, <li class="element">Jay</li>]
    [<li class="element">Foo</li>, <li class="element">Bar</li>]

    attrs
    html = """
    <div class="panel">
        <div class="panel-heading">
            <h4>Hello</h4>
        <div class="panel-body">
            <ul class="list" id="list-1" name="elements">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
                <li class="element">Jay</li>
            </ul>
            <ul class="list list-small" id="list-2">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
            </ul>
        </div>
    </div>
    """
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html, 'html5lib')
    print(soup.find_all(attrs={'id':'list-1'}))
    print(soup.find_all(attrs={'name':'elements'}))
    
    [<ul class="list" id="list-1" name="elements">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
                <li class="element">Jay</li>
            </ul>]
    [<ul class="list" id="list-1" name="elements">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
                <li class="element">Jay</li>
            </ul>]
    html = """
    <div class="panel">
        <div class="panel-heading">
            <h4>Hello</h4>
        <div class="panel-body">
            <ul class="list" id="list-1" name="elements">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
                <li class="element">Jay</li>
            </ul>
            <ul class="list list-small" id="list-2">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
            </ul>
        </div>
    </div>
    """
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html, 'html5lib')
    print(soup.find_all(id='list-1'))
    print(soup.find_all(class_='element')) #因为class在python中有特别意义,所有加多一个下滑线
    
    [<ul class="list" id="list-1" name="elements">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
                <li class="element">Jay</li>
            </ul>]
    [<li class="element">Foo</li>, <li class="element">Bar</li>, <li class="element">Jay</li>, <li class="element">Foo</li>, <li class="element">Bar</li>]
     
    text
    html = """
    <div class="panel">
        <div class="panel-heading">
            <h4>Hello</h4>
        <div class="panel-body">
            <ul class="list" id="list-1" name="elements">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
                <li class="element">Jay</li>
            </ul>
            <ul class="list list-small" id="list-2">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
            </ul>
        </div>
    </div>
    """
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html, 'html5lib')
    print(soup.find_all(text='Foo'))
    ['Foo', 'Foo']

    2) find( name , attrs , recursive , text , **kwargs )

    基本和find_all一样,只不过只查找一个标签,第一个标签

    html = """
    <div class="panel">
        <div class="panel-heading">
            <h4>Hello</h4>
        <div class="panel-body">
            <ul class="list" id="list-1" name="elements">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
                <li class="element">Jay</li>
            </ul>
            <ul class="list list-small" id="list-2">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
            </ul>
        </div>
    </div>
    """
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html, 'html5lib')
    print(soup.find('ul'))
    print(type(soup.find('ul')))
    print(soup.find('page'))
    
    <ul class="list" id="list-1" name="elements">
                <li class="element">Foo</li>
                <li class="element">Bar</li>
                <li class="element">Jay</li>
            </ul>
    <class 'bs4.element.Tag'>
    None

    (3)find_parents()  find_parent()

    find_all() 和 find() 只搜索当前节点的所有子节点,孙子节点等. find_parents() 和 find_parent() 用来搜索当前节点的父辈节点,搜索方法与普通tag的搜索方法相同,搜索文档搜索文档包含的内容

    (4)find_next_siblings()  find_next_sibling()

    这2个方法通过 .next_siblings 属性对当 tag 的所有后面解析的兄弟 tag 节点进行迭代, find_next_siblings()方法返回所有符合条件的后面的兄弟节点,find_next_sibling() 只返回符合条件的后面的第一个tag节点

    (5)find_previous_siblings()  find_previous_sibling()

    这2个方法通过 .previous_siblings 属性对当前 tag 的前面解析的兄弟 tag 节点进行迭代, find_previous_siblings() 方法返回所有符合条件的前面的兄弟节点, find_previous_sibling() 方法返回第一个符合条件的前面的兄弟节点

    (6)find_all_next()  find_next()

    这2个方法通过 .next_elements 属性对当前 tag 的之后的 tag 和字符串进行迭代, find_all_next() 方法返回所有符合条件的节点, find_next() 方法返回第一个符合条件的节点

    (7)find_all_previous() 和 find_previous()

    这2个方法通过 .previous_elements 属性对当前节点前面的 tag 和字符串进行迭代, find_all_previous() 方法返回所有符合条件的节点, find_previous()方法返回第一个符合条件的节点

     
  • 相关阅读:
    nuxt项目打包上线,以及nuxt项目基础代码分享
    SVG学习之stroke-dasharray 和 stroke-dashoffset 详解
    从零开始使用mocha测试
    小程序开发,视频播放和下载
    小程序开发中遇到的坑
    记录一次面试中的HTTP请求相关问题
    css3 min-content,max-content,fit-content, fill属性
    GC的 算法和种类
    JVM 的运行机制
    各种同步控制工具的使用
  • 原文地址:https://www.cnblogs.com/ecwork/p/7597014.html
Copyright © 2011-2022 走看看