用于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扩展 正在升级到新版本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我有一个(单个)类别和子类别树,现在我想在其中添加项目作为treeNode   java使用ICU将输出数字(字符串)拼写为整数   在Java中,检查字符是否为元音的最佳方法是什么?   如何解决这个问题。println Apache jkenvar SSL_CLIENT_DN从mod_SSL到java、javascript或html?   有没有办法比较两个Java war文件   java spark sql问题:第一个匹配行上的联接表:rank()不工作   数学模型   所有类文件中的java错误:无法解析R   在64位Windows上发送ctrlbreak到java进程,在32位Windows上发送信号   java是什么让spring boot控制台变得多彩?   java在当前时间和下周六之间还有剩余的分钟/小时吗?   java强制从控制台输入有效的If/Else扫描程序   用组成员显示组名的java   java MediaCodec编码dequeueInputBuffer返回信息\u稍后重试\u?   java是否可以为整个struts webapp配置统一的日期格式格式?   java无法更改#vbox:focused上的vbox边框   java如何解析没有标记的JSON对象   java组织。jsoup。选择选择器$SelectorParseException:无法分析查询“”:位于“”的意外标记