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 查看哈希值)