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'>
# 一段注释
原文地址:https://www.cnblogs.com/pufa/p/15506194.html