zoukankan      html  css  js  c++  java
  • python 第三方库BeautifulSoup4文档学习(2)

    bs4的四种对象

    Beautiful Soup对html文档进行处理后会生成一种树形结构的数据结构,每一个节点代表一个对象,对象大致归为四类:Tag、NavigableString、BeautifulSoup、comment;

    Tag对象

    也就是xml或者html格式文档中的一对对标签

    from bs4 import BeautifulSoup
    
    soup = BeautifulSoup("<p class="pra1">这是一个段落</p>")
    tag = soup.p
    type(tag)
    

    # 输出 <class 'bs4.element.Tag'>

    Tag的常用标签

    name

    输出当前tag对象的名字,例如上面的例子

    tag.name
    

    # 输出:'p'
    注意的是如果对同一个soup中的一个tag.name进行更改的话,那么将会更改整个文档

    Attributes

    与python字典类似,我们都知道python中的字典是以key:value的形式存在的,所以如果需要获取tag中的value,我们可以通过以下方式:

    1. tag['key'] = value
    2. tag.attrs

    我们可以像操作字典一样操作tag的属性

    • 增加属性:
      tag['id'] = 'pid'
      tag['name'] = 'pname'
    • 删除属性:
      del tag['id']
    • 修改属性:
      tag['id'] = 'new value'

    多值属性

    我们如果观察网站的html文档,会发现有的class具有多个值,每个值之间使用空格隔开,这就是多值属性,输出多值属性时会以list返回,只有被html规定为多值属性才会返回成list,否则会返回为字符串;如果将tag转换为字符串时,多值属性会合并为一个值。

    字符串通常包含在一对标签的中间,这样的字符串通常被NavigableString所包装

    soup = BeautifulSoup('<a>这是一个a标签</a>')
    tag = soup.a
    tag.string
    

    # 输出:'这是一个a标签'
    *注意:tag.string无法被修改,但是可以使用.replace_with()替换成其他字符串,如果想在Beautiful Soup之外使用 NavigableString 对象,需要调用 unicode() 方法,将该对象转换成普通的Unicode字符串,否则就算Beautiful Soup已方法已经执行结束,该对象的输出也会带有对象的引用地址,这样会浪费内存。

    BeautifulSoup对象

    BeautifulSoup对象大多数时候可以看成一个Tag对象,但是它不会像tag对象中的name与attribute属性,BeautifulSoup本来就是一个文档形式的存在,例如:

    soup = BeautifulSoup("<a>这是一个a标签</a>",features='lxml')
    print(soup)
    

    # <a>这是一个a标签

    注意:soup有一个固定值为[document]的name属性

    print(soup.name)
    

    # [document]

    comment对象

    顾名思义,comment就是用来处理html或xml格式文档中的注释的,例如:

    from bs4 import BeautifulSoup
    
    soup = BeautifulSoup( "<a><!--一段注释--></a>",features='lxml')
    comment = soup.a.string
    print(type(comment))
    print(comment)
    
    # <class 'bs4.element.Comment'>
    # 一段注释
    
  • 相关阅读:
    Linux rcp命令详解
    Linux patch命令详解
    Linux paste命令详解
    linux od命令详解
    linux mv命令详解
    Linux more命令详解
    Linux mktemp命令
    MySQL状态变量详解
    mysql性能分析show profile/show profiles
    MySQL执行计划
  • 原文地址:https://www.cnblogs.com/pufa/p/15506194.html
Copyright © 2011-2022 走看看