Python BeautifulSoup 4.0b Markup按摩

Python BeautifulSoup 4.0b Markup按摩,python,python-3.x,beautifulsoup,Python,Python 3.x,Beautifulsoup,我昨天安装了Beautifulsoup4.0b,现在我想添加一个正则表达式替换对,它将在预解析器阶段运行。在文档中,它说我可以简单地使用MARKUP按摩参数来\uuuu init\uuuu,该参数分配给MARKUP\u按摩,但似乎4.0b不再具有这些属性,尽管在自述文件中没有提到它(除非我错过了它?) 所以我的问题是,有没有办法从BeautifulSoup 4.0b中获得相同的功能?自述文件(有点)涵盖了这个问题,但必须通过阅读本节的两行文字来推断: 关于漂亮的汤= 这是一个几乎完整的重写,删除

我昨天安装了Beautifulsoup4.0b,现在我想添加一个正则表达式替换对,它将在预解析器阶段运行。在文档中,它说我可以简单地使用
MARKUP按摩
参数来
\uuuu init\uuuu
,该参数分配给
MARKUP\u按摩
,但似乎4.0b不再具有这些属性,尽管在自述文件中没有提到它(除非我错过了它?)

所以我的问题是,有没有办法从BeautifulSoup 4.0b中获得相同的功能?自述文件(有点)涵盖了这个问题,但必须通过阅读本节的两行文字来推断:

关于漂亮的汤=

这是一个几乎完整的重写,删除了Beautiful Soup的自定义项 HTML解析器支持一个允许您编写一点胶水的系统 编码并插入所需的任何HTML或XML解析器

Beauty Soup 4.0为四个解析器提供了粘合代码:

  • Python的标准HTMLPasser
  • lxml的HTML和XML解析器
  • html5lib的HTML解析器
HTMLPasser是默认的,但我建议您安装一个 否则,您将无法处理真实世界的标记

旧的自定义解析器基于不推荐使用的模块(在Python 3中被删除)中的
SGMLParser
,而
markup按摩
功能主要用于修复
SGMLParser
无法处理的无效标记。因此,当旧的定制解析器消失时,
markup按摩
功能也随之消失

据推测,默认情况下不再提供的任何功能现在都必须通过子类化一个新解析器来添加

因此,如果安装了
lxml
,则需要执行以下操作:

from bs4.builder import LXMLTreeBuilder

class Builder(LXMLTreeBuilder):
    def __init__(self, *args, **kwargs):
        super(Builder, self).__init__(*args, **kwargs)

    def prepare_markup(self, *args, **kwargs):

        markup, user_enc, doc_enc = super(Builder, self).prepare_markup(*args, **kwargs)

        # do markup massaging ...

        return markup, user_enc, doc_enc

soup = BeautifulSoup(html, builder=Builder())