Python BeautifulSoup 4.0b Markup按摩
我昨天安装了Beautifulsoup4.0b,现在我想添加一个正则表达式替换对,它将在预解析器阶段运行。在文档中,它说我可以简单地使用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中获得相同的功能?自述文件(有点)涵盖了这个问题,但必须通过阅读本节的两行文字来推断: 关于漂亮的汤= 这是一个几乎完整的重写,删除
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解析器
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())