BeautifulSoup 用法详解 —— 对象的种类

Beautiful Soup 4.4.0 文档:  https://beautifulsoup.readthedocs.io/zh_CN/latest/

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

1. Tag 对象

soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
tag = soup.b
type(tag)        # <class 'bs4.element.Tag'>

Tag 对象有很多方法和属性,其中最重要的是 name 和 attributes

(1) name 属性

每个 tag 都有自己的名字,通过 .name 来获取

tag.name    # u'b'
"""
由于这个 tag 对象是由b元素解析来的 
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
所以这个 tag.name 是 b
"""

(2)Attributes 属性

一个 tag 可能有很多属性,tag <b class="boldest"> 有一个"class"的属性,值为"boldest",tag 属性的操作方法与字典相同:

tag['class']    # # u'boldest'

也可以直接用(.)取属性,比如:.attrs

tag.attrs        # {u'class': u'boldest'}

tag 的属性可以被添加,删除或修改. 再说一次, tag的属性操作方法与字典一样

tag['class'] = 'verybold'
tag['id'] = 1
tag    # <b class="verybold" id="1">Extremely bold</b>

del tag['class']
del tag['id']
tag    # <b>Extremely bold</b>

tag['class']    # KeyError: 'class'
print(tag.get('class'))    # None

2.  NavigableString 对象

字符串常常被包含在 Tag 内,BeautifulSoup 用 NavigableString 类来包装 tag 中的字符串。

tag.string    # u'Extremely bold'
type(tag.string)    # <class 'bs4.element.NavigableString'>

一个 NavigableString 字符串与 Python 中的 Unicode 字符串相同,并支持遍历文档树和搜索文档树中的大部分属性,通过 unicode() 方法可以直接将 NavigableString  对象转换成Unicode字符串

unicode_string = unicode(tag.string)
unicode_string    # u'Extremely bold'
type(unicode_string)    # <type 'unicode'>

3. BeautifulSoup 对象

BeautifulSoup 对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象,它支持遍历文档树和搜索文档树中的大部分方法。

4. Comment 对象—— 注释及特殊字符串

Comment 对象是一个特殊类型的 NavigableString 对象。

markup = "<b><!--Hey, buddy. Want to buy a used parser?--></b>"
soup = BeautifulSoup(markup)
comment = soup.b.string
type(comment)    # <class 'bs4.element.Comment'>
comment    # u'Hey, buddy. Want to buy a used parser'

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值