Beautiful Soup 对象
BeautifulSoup
将复杂的 HTML 文档转换成一个复杂的树形结构。每个节点都是 Python
对象。有四种节点对象: Tag
、 NavigableString
、 BeautifulSoup
、 Comment
。
1. Tag
对象
Tag
对象与 XML 或者 HTML 原生文档中的 tag
相同,就是 HTML 中的标签。
Tag
对象有两个最重要的属性: name
和 attrs
属性:
name
:返回 HTML 标签的名字,通过Tag
对象.name
来获取。如果改变了Tag
对象name
,则会影响所有通过当前BeautifulSoup
生成的HTML
文档attrs
:返回 HTML 标签的属性。- 你可以用
Tag.attrs
访问修改属性,操作方法与字典相同 - 你可以用"Tag.key"直接取 HTML 标签属性
- 你可以用
HTML 标签中对于 class
等属性,它可能有多个值,那么 Tag
对象的 attrs
返回的是一个列表。HTML 标签中对于 id
这种属性它只能有一个值,但是如果看起来像是两个值,则 Tag
对象的 attrs
返回字符串。另外如果文档是 XML 格式,则 XML 标签中不包含多值属性,如果 class
等属性有多个值,则将它们拼接成字符串,按照字符串处理。
将 Tag
对象转换成字符串时,多个值属性会合成为一个值,而不是对一个列表执行 str()
。
2. NavigableString
对象
NavigableString
对象表示标签包围的 HTML 文字内容,通过 Tag
对象的 .string
属性可获得对应的 NavigableString
对象。
- 可以通过
str()
方法直接将NavigableString
对象转换成字符串。 NavigableString
对象的字符串内容不能编辑,但是可以整体替换掉,如tag.string.replace_with("text2")
。
如果想在 BeautifulSoup
之外使用 NavigableString
对象,则建议调用 str()
方法将它转换成普通的字符串,否则会浪费内存。
3. BeautifulSoup
对象
BeautifulSoup
对象表示的是一个文档的全部内容。大部分时候可以将它视为 Tag
对象进行遍历。但是它的 .name
属性固定为 '[document]'
,且 .attrs
属性为空。
4. Comment
对象以及其他特殊对象
Comment
对象是一个特殊类型的 NavigableString
对象。当它出现在 HTML 文档中时,其格式化输出的方式与普通的 NavigableString
对象不同。
CData
、 ProcessingInstruction
、 Declaration
、 Doctype
与 Comment
对象类似,他们都是 NavigableString
的子类,只是都有各自的格式化输出方式。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论