最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 三分钟读懂BeautifulSoup中的四大对象种类

    正文概述    2020-09-03   190

    三分钟读懂BeautifulSoup中的四大对象种类

    四大对象种类

    Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:

    (1)Tag

    (2)NavigableString

    (3)BeautifulSoup

    (4)Comment

    1. Tag

    Tag 通俗点讲就是 HTML 中的一个个标签,例如:

    from bs4 import BeautifulSoup
    html = """
    <div>
        <ul>
             <li class="item-0"><a href="link1.html">first item</a></li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-inactive"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
    """
    # 创建 Beautiful Soup 对象
    soup = BeautifulSoup(html, "lxml")
    print(soup.li)  # <li class="item-0"><a href="link1.html">first item</a></li>
    print(soup.a)  # <a href="link1.html">first item</a>
    print(soup.span)  # <span class="bold">third item</span>
    print(soup.p)  # None
    print(type(soup.li))  # <class 'bs4.element.Tag'>

    我们可以利用 soup 加标签名轻松地获取这些标签的内容,这些对象的类型是bs4.element.Tag。但是注意,它查找的是在所有内容中的第一个符合要求的标签。如果要查询所有的标签,后面会进行介绍。

    对于 Tag,它有两个重要的属性,是name和attrs。

    from bs4 import BeautifulSoup
    html = """
    <div>
        <ul>
             <li class="item-0"><a href="link1.html">first item</a></li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-inactive"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
    """
    # 创建 Beautiful Soup 对象
    soup = BeautifulSoup(html, "lxml")
    print(soup.li.attrs)  # {'class': ['item-0']}
    print(soup.li["class"])  # ['item-0']
    print(soup.li.get('class'))  # ['item-0']
    print(soup.li)  # <li class="item-0"><a href="link1.html">first item</a></li>
    soup.li["class"] = "newClass"  # 可以对这些属性和内容等等进行修改
    print(soup.li)  # <li class="newClass"><a href="link1.html">first item</a></li>
    del soup.li['class']  # 还可以对这个属性进行删除
    print(soup.li)  # <li><a href="link1.html">first item</a></li>

    相关推荐:《Python视频教程》

    2. NavigableString

    既然我们已经得到了标签的内容,那么问题来了,我们要想获取标签内部的文字怎么办呢?很简单,用 .string 即可,例如

    from bs4 import BeautifulSoup
    html = """
    <div>
        <ul>
             <li class="item-0"><a href="link1.html">first item</a></li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-inactive"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
    """
    # 创建 Beautiful Soup 对象
    soup = BeautifulSoup(html, "lxml")
    print(soup.li.string)  # first item
    print(soup.a.string)  # first item
    print(soup.span.string)  # third item
    # print(soup.p.string)  # AttributeError: 'NoneType' object has no attribute 'string'
    print(type(soup.li.string))  # <class 'bs4.element.NavigableString'>

    3. BeautifulSoup

    BeautifulSoup 对象表示的是一个文档的内容。大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称,以及属性来感受一下。

    from bs4 import BeautifulSoup
    html = """
    <div>
        <ul>
             <li class="item-0"><a href="link1.html">first item</a></li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-inactive"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
    """
    # 创建 Beautiful Soup 对象
    soup = BeautifulSoup(html, "lxml")
    print(soup.name)  # [document]
    print(soup.attrs)  # {}, 文档本身的属性为空
    print(type(soup.name))  # <class 'str'>

    4. Comment

    Comment 对象是一个特殊类型的 NavigableString 对象,其输出的内容不包括注释符号。

    from bs4 import BeautifulSoup
     
    html = """
    <div>
       <a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>
    </div>
    """
     
    # 创建 Beautiful Soup 对象
    soup = BeautifulSoup(html, "lxml")
    
    print(soup.a)  # <a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>
    print(soup.a.string)  # Elsie 
    print(type(soup.a.string))  # <class 'bs4.element.Comment'>

    a 标签里的内容实际上是注释,但是如果我们利用 .string 来输出它的内容时,注释符号已经去掉了。


    起源地下载网 » 三分钟读懂BeautifulSoup中的四大对象种类

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元