Beautiful Soup 修改文档树
1. 修改 Tag
的名字和属性
我们可以重命名一个 Tag
,改变属性的值,添加或者删除属性。
tag=soup.b
tag.name='a_new_name'# 修改名字
tag['class']='new_cls'#修改 class 属性
tag['id']='new_id' #修改 ID 属性
2. 修改 Tag.string
给 Tag.string
属性赋值,相当于用当前的内容体改了原来的内容。如 tag.string='New string here.'
如果当前 Tag
已经包含了其他的 Tag
,那么给他的 .string
属性赋值会覆盖掉原有的所有内容包括子 Tag
。
NavigableString
也有一个.string
属性,它是一个str
类型,代表了该NavigableString
存储的字符串。 但是这个属性是只读的。无法通过NavigableString.string
的赋值来修改这个属性值。
3. 添加内容 Tag.append()
Tag.append()
方法向 Tag
中添加字符串内容。它类似于 Python
列表中的 .append()
方法。
- 添加的字符串被初始化成
NavigableString
对象,然后添加到Tag.contents
末尾。 - 如果添加的字符串含有
HTML
标记,则将该标记转义然后初始化成NavigableString
对象, 并不是将字符串解析成Tag
结点。
.append()
的原理就是在.contents
列表末尾添加元素。但是由于NavigableString
并没有.contents
属性,因此并不能执行NavigableString.append()
。
4. 创建内容 BeautifulSoup.new_string()
和 BeautifulSoup.new_tag()
BeautifulSoup.new_string()
:创建一个NavigableString
。你也可以将NavigableString
子类名作为第二个参数传入从而创建一个NavigableString
的子类。BeautifulSoup.new_tag()
:创建一个Tag
。
创建完这些节点之后你可以调用 Tag.append()
添加到文档树中。
3 中的
Tag.append()
只能直接添加NavigableString
,而不能添加Tag
对象
5. 插入内容
Tag.insert()
:将新元素插入到指定位置,而不是.contents
属性的最后Tag.insert_before()
或者NavigableString.insert_before()
:在当前Tag
或者文本节点之前插入内容Tag.insert_after()
或者NavigableString.insert_after()
:在当前Tag
或者文本节点之后插入内容
.insert()
的原理就是在.contents
列表指定位置添加元素。但是由于NavigableString
并没有.contents
属性,因此并不能执行NavigableString.insert()
。
6. 清除内容
Tag.clear()
会清除当前的 Tag
内容。(也就是清除了所有的子节点)
NavigableString
并没有.clear()
方法
7. 移除节点
Tag.extract()
或者NavigableString.extract()
:将本节点移除文档树并返回该节点。Tag.decompose()
将本Tag
移除文档树并销毁本节点(并不返回本节点)。NavigableString
并没有.decompose()
方法
8. 替换节点
Tag.replace_with()
或者 NavigableString.replace_with()
方法从文档树中移除本节点并用新的 Tag
或者 NavigableString
替代,它返回被替代的旧结点。
9. 包装与反包装节点
Tag.wrap()
或者NavigableString.wrap()
方法对本节点进行包装并返回包装后的新结点.Tag.unwrap()
方法与.wrap()
相反,它移除Tag
的标签,如<b>xxx</b>
经过.unwrap()
之后变成xxx
。NavigableString
没有.unwrap()
方法
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论