返回介绍

Beautiful Soup 修改文档树

发布于 2024-05-19 17:36:47 字数 4565 浏览 0 评论 0 收藏 0

1. 修改 Tag 的名字和属性

我们可以重命名一个 Tag ,改变属性的值,添加或者删除属性。

tag=soup.b
tag.name='a_new_name'# 修改名字
tag['class']='new_cls'#修改 class 属性
tag['id']='new_id'  #修改 ID 属性

修改 Tag 名字和属性

2. 修改 Tag.string

Tag.string 属性赋值,相当于用当前的内容体改了原来的内容。如 tag.string='New string here.'

如果当前 Tag 已经包含了其他的 Tag ,那么给他的 .string 属性赋值会覆盖掉原有的所有内容包括子 Tag

NavigableString 也有一个 .string 属性,它是一个 str 类型,代表了该 NavigableString 存储的字符串。 但是这个属性是只读的。无法通过 NavigableString.string 的赋值来修改这个属性值。

修改 Tag.string

3. 添加内容 Tag.append()

Tag.append() 方法向 Tag 中添加字符串内容。它类似于 Python 列表中的 .append() 方法。

  • 添加的字符串被初始化成 NavigableString 对象,然后添加到 Tag.contents 末尾。
  • 如果添加的字符串含有 HTML 标记,则将该标记转义然后初始化成 NavigableString 对象, 并不是将字符串解析成 Tag 结点。

    修改 Tag.appned()

.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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文