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('Extremely bold')
tag = soup.b
type(tag) #
Tag 对象有很多方法和属性,其中最重要的是 name 和 attributes
(1) name 属性
每个 tag 都有自己的名字,通过 .name 来获取
tag.name # u'b'
"""
由于这个 tag 对象是由b元素解析来的
soup = BeautifulSoup('Extremely bold')
所以这个 tag.name 是 b
"""
(2)Attributes 属性
一个 tag 可能有很多属性,tag 有一个"class"的属性,值为"boldest",tag 属性的操作方法与字典相同:
tag['class'] # # u'boldest'
也可以直接用(.)取属性,比如:.attrs
tag.attrs # {u'class': u'boldest'}
tag 的属性可以被添加,删除或修改. 再说一次, tag的属性操作方法与字典一样
tag['class'] = 'verybold'
tag['id'] = 1
tag # Extremely bold
del tag['class']
del tag['id']
tag # Extremely bold
tag['class'] # KeyError: 'class'
print(tag.get('class')) # None
2. NavigableString 对象
字符串常常被包含在 Tag 内,BeautifulSoup 用 NavigableString 类来包装 tag 中的字符串。
tag.string # u'Extremely bold'
type(tag.string) #
一个 NavigableString 字符串与 Python 中的 Unicode 字符串相同,并支持遍历文档树和搜索文档树中的大部分属性,通过 unicode() 方法可以直接将 NavigableString 对象转换成Unicode字符串
unicode_string = unicode(tag.string)
unicode_string # u'Extremely bold'
type(unicode_string) #
3. BeautifulSoup 对象
BeautifulSoup 对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象,它支持遍历文档树和搜索文档树中的大部分方法。
4. Comment 对象—— 注释及特殊字符串
Comment 对象是一个特殊类型的 NavigableString 对象。
markup = ""
soup = BeautifulSoup(markup)
comment = soup.b.string
type(comment) #
comment # u'Hey, buddy. Want to buy a used parser'