简介
BeautifulSoup是一个解析HTML或XML文件的库。
对于HTML或XML文件,可以用DOM模型解释。DOM模型可看作节点的集合,它有三种节点:
- 元素节点
- 文本节点
- 属性节点
元素节点即HTML或XML的标签,文本节点即标签内部的文本内容,属性节点即每个标签的属性。
总的来说,BeautifulSoup库即是对上述三种节点的操作。
对象介绍
BeautifulSoup库有四类对象,这里介绍它们的常用方法和属性。
BeautifulSoup对象
该对象是这库的起点,它表示HTML或XML文档,该对象由BeautifulSoup()
实例化。
BeautifulSoup()
接受一个str
或byte
对象,由于该库自带编码自动检测,它会把当前文档编码并转换成Unicode
编码。
该对象除没有name和attribute属性,其用法基本和Tag
对象相同。
Tag对象
Tag.name
返回标签的名字。
Tag.attrs
返回标签的属性键值对,是一个dict
对象。
Tag[attr]
获取属性值。如果属性在HTML中是多值属性,则返回list
对象,否则返回str
对象。
Tag[attr] = value
为属性赋值。如果属性在HTML中是多值属性,则value是list
对象,否则是str
对象。
Tag.string
返回文本节点。如果标签内部文本节点不唯一,则返回Null。
Tag.strings
返回标签内所有文本节点。
Tag.contents
返回子节点列表,是list
对象。
NavigableString对象
该对象指Tag内部的文本节点, Tag.string
和Tag.strings
即返回该对象。
由于文本节点无法编辑,只能替换。我们可以通过NavigableString
对象的Tag.string.replace_with()
方法替换文本节点,该方法接受一个str
对象。
Comment对象
Comment
对象可以说是NavigableString
类的子类,它返回注释标签的文本节点。
文档树
搜索文档树
主要方法是find_all( name , attrs , recursive , text , **kwargs )
。
参数name
指标签名字,可以是字符串、正则表达式、列表、方法。如果传入正则表达式,BeautifulSoup会自动调用match()
匹配内容;如果传入列表,只要列表中某个成员匹配即返回;如果传入方法,它接受一个参数Tag
,只要返回True
即匹配。
attrs
是dict
对象,代表标签的属性键值对。它的属性值可以是字符串、正则表达式、列表、方法,可选关键字kwargs
其属性值同此一样。
text
参数可以搜搜文档中的字符串内容。与name
参数的可选值一样,text
参数接受字符串,正则表达式 ,列表,方法。
limit
参数限制返回的条目数量,即列表的长度。
recursive
是个开关,该方法默认放回所有子孙节点,如果recursive=False
,方法只返回儿子节点。
遍历文档树
Tag.children
,仅返回子节点。
Tag.descendants
,返回子孙节点
Tag.parent
,仅返回父节点。
Tag..parents
,返回父辈节点。
Tag.previous_sibling
,返回上个同级兄弟节点。
Tag.next_sibling
,返回下个同级兄弟节点。
Tag.previous_siblings
,返回上面同级兄弟节点。
Tag.next_siblings
,返回下面同级兄弟节点。
其他
Tag.get_text()
返回tag中包含的文本内容,包括子孙tag中的内容。
BeautifulSoup.original_encoding
获取原文档的编码。
BeautifulSoup
对象和Tag
的prettify()
方法可以格式化输出,该方法默认输出编码为UTF-8
。