跳转到主要内容

BeautifulSoup4的包装器,恢复了处理HTML片段的能力

项目描述

这是一个BeautifulSoup4的薄包装器,恢复了处理HTML片段的能力。例如

from bs4 import BeautifulSoup
from fragmentsoup import FragmentSoup
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>', features='html5lib')
soup
# <html><head></head><body><b class="boldest">Extremely bold</b></body></html>
# Note that the fragment is wrapped to make it a valid html document

soup = FragmentSoup('<b class="boldest">Extremely bold</b>', features='html5lib')
soup
# <b class="boldest">Extremely bold</b>
# FragmentSoup keeps it as a fragment

在几乎所有情况下,FragmentSoup实例应该与BeautifulSoup实例完全相同。唯一值得注意的例外是,在Fragment上调用'wrap'将包装整个Fragment并返回自身

from fragmentsoup import FragmentSoup
soup = FragmentSoup('<b class="boldest">Extremely bold</b>', features='html5lib')
soup
# <b class="boldest">Extremely bold</b>

soup.wrap(soup.new_tag('div')
# <div><b class="boldest">Extremely bold</b></div>

如果您包装子元素,它将返回一个BeautifulSoup "Tag"实例。如果您想使用返回的包装子元素作为Fragment,您需要将返回的Tag实例包装起来以将其用作fragment

from fragmentsoup import FragmentSoup
soup = FragmentSoup('<div><b class="boldest">Extremely bold</b></div>', features='html5lib')
subdocument = soup.b.wrap(soup.new_tag('h1'))
subdocument
# <h1><b class="boldest">Extremely bold</b></h1>
type(subdocument)
# <class 'bs4.element.Tag'>

subdocument = FragmentSoup(subdocument)
type(subdocument)
# <class 'fragmentsoup.FragmentSoup'>

这也适用于从文档的一部分取消包装返回的Tags。

如果我传入一个格式良好的文档呢?

如果您传入一个完整的文档(定义为以<!DOCTYPE>或<html>标签开始),则FragmentSoup假定生成的树是格式良好的,并且它的行为与常规BeautifulSoup实例完全相同。它不会允许您使用标签包装格式良好的文档 - 它将引发ValueError(正如常规BeautifulSoup所做的那样)。

它是如何工作的?

FragmentSoup将传入的片段包装在虚拟的<fragmentsoup>标签中,并在渲染前将其移除(以及所有在<fragmentsoup>标签之外的内容。否则,它将任何属性访问推迟到内部BeautifulSoup实例。

错误

除了上述差异外,任何与常规BeautifulSoup4不同的行为都是错误。欢迎报告和补丁。

变更日志

版本历史

0.6.0
  • 首次发布到Github和PyPI

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

本发布没有可用的源分发文件。请参阅关于 生成分发存档 的教程。

构建分发

fragmentsoup-0.6.1-py3-none-any.whl (3.8 kB 查看哈希值)

上传时间 Python 3

支持者