README (в некотором роде) покрывает эту проблему, но ее следует вывести, прочитав между строк этого раздела:
= О Прекрасном Супе 4 =
Это почти полное переписывание, которое удаляет пользовательский Beautiful Soup
HTML-парсер в пользу системы, которая позволяет вам написать немного клея
код и подключите любой анализатор HTML или XML вы хотите.
Beautiful Soup 4.0 поставляется с кодом для четырех парсеров:
- Стандартный HTMLParser Python
- HTML и XML парсеры lxml
- HTML-парсер html5lib
HTMLParser используется по умолчанию, но я рекомендую установить один из
другие парсеры, иначе у вас возникнут проблемы с обработкой реальной разметки.
Старый пользовательский синтаксический анализатор был основан на SGMLParser
из устаревшего модуля sgmllib (который был удален в Python 3), и функциональность markupMassage
была в основном там, чтобы исправить неправильную разметку, которая SGMLParser
не мог справиться. Поэтому, когда ушел старый нестандартный парсер, функциональность markupMassage
пошла вместе с ним.
Предположительно, любую функциональность, которая больше не предоставляется по умолчанию, теперь нужно будет добавить путем подкласса одного из новых синтаксических анализаторов.
Итак, если установлена 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())