用于gumbo html解析器的python绑定
gumbo的Python项目详细描述
gumbo是HTML5 parsing algorithm实现的 作为一个没有外部依赖关系的纯C99库。它是为服务 作为其他工具和库(如linter)的构建块, 验证程序,模板语言,重构和分析工具。这个 包包含库本身、库的python cTypes绑定,以及 html5lib和beautifulsoup(3.2)的适配器,它们提供与那些适配器相同的api 诽谤。
目标和功能:
- 对不良输入具有鲁棒性和弹性。
- 简单的api,可以很容易地被其他语言包装。
- 支持源位置和指向原始文本的指针。
- 相对较轻,没有外部依赖关系。
- 全部通过html5lib-0.95 tests。
- 在超过25亿页的谷歌索引上进行了测试。
非目标:
- 执行速度。《秋葵》之所以能有这样的收获,是因为 但是对于预期的用例来说,这不是一个重要的考虑因素,并且 不是主要的设计因素。
- 支持UTF-8以外的编码。大部分情况下,客户端代码 之前可以使用其他库将输入流转换为UTF-8文本 处理。
- 安全。Gumbo最初是为与 仅受信任的输入文件。我们正在努力强化这一点并确保它 即使在恶意输入时也会按预期行为,但现在,gumbo应该只 在受信任的输入或沙盒内运行。
- C89支持。到目前为止,大多数主流编译器都支持c99;最大的例外是 (微软Visual Studio)应该能够在C++模式下编译此 变化相对较少。(欢迎使用错误报告。)
愿望列表(又名“我们无法将这些放入原始版本,但是 希望尽快添加“):
- 支持最近的HTML5规范更改以支持模板标记。
- 支持片段分析。
- 全功能错误报告。
- 其他语言的绑定。
安装
`pip install gumbo`应该这样做。如果有本地副本,请从根目录`python setup.py install`。
以及html5libBeautifulSoup适配器 要求各自的库单独安装才能工作。
基本用法
对于cTypes绑定:
importgumbowithgumbo.parse(text)asoutput:root=output.contents.root.contents# root is a Node object representing the root of the parse tree# tree-walk over it as necessary.
对于美化组绑定:
importgumbosoup=gumbo.soup_parse(text)# soup is a BeautifulSoup object representing the parse tree.
对于html5lib绑定:
fromgumboimporthtml5libdoc=html5lib.parse(text[,treebuilder='lxml'])
python使用的推荐最佳实践是使用一个适配器 一个现有的API(个人而言,我更喜欢漂亮的汤)并编写你的程序 在这些方面。应该考虑构建原始cTypes绑定 用于更高级别库的块,很少直接引用。
请参阅soup_适配器的源代码、pydoc和实现 HTML5lib_适配器了解更多信息。
关于API/ABI兼容性的说明
我们将尽最大努力保持版本之间的api兼容性。 最初的版本是一个0.9(beta版)的版本,用于征求早期的意见 采用者,但如果没有发现api的主要问题,则使用1.0版本 不久之后,它的api应该被认为是稳定的。如果 更改是必要的,我们遵循[语义版本控制][]。
我们对ABI没有这样的保证,很可能 后续版本可能需要重新编译客户端代码。为了这个 原因,我们建议不要在整个程序中使用gumbo数据结构, 相反,将它们限制在一个翻译层,该层可以挑选出 需要来自解析树的数据,然后将其转换为持久的 数据结构更适合应用程序。API是 为鼓励这种使用而构造的,只有一个delete函数用于 整个解析树,并没有考虑到变异。
大部分对python的使用是透明的,因为python适配器都是 用这个做的但是,由于cTypes需要ABI兼容性,因此 意味着您必须在以下情况下重新部署gumboc库和c扩展 正在升级到新版本。