Содержание страницы
19.3. htmllib – Парсер HTML-документов¶htmllib – A parser for HTML documents
Устарело с версии 2.6: Модуль htmllib удалён в Python 3.
В Python 2 используйте HTMLParser, а в Python 3 – его аналог html.parser.
Этот модуль определяет класс, который может служить основой для разбора текстовых файлов, отформатированных на языке гипертекстовой разметки (HTML). Класс не занимается напрямую вводом-выводом – ему необходимо передавать входные данные в виде строки через метод, и он вызывает методы объекта «форматтер» для формирования вывода. Класс HTMLParser предназначен для использования в качестве базового класса для других классов с целью добавления функциональности и позволяет расширять или переопределять большинство своих методов. В свою очередь, этот класс наследуется от класса SGMLParser, определённого в модуле sgmllib, и расширяет его. Реализация HTMLParser поддерживает язык HTML 2.0, описанный в RFC 1866. В модуле formatter предоставлены две реализации объектов-форматтеров; обратитесь к документации этого модуля за информацией об интерфейсе форматтера.
Ниже приведена сводка интерфейса, определённого в sgmllib.SGMLParser:
Интерфейс для передачи данных экземпляру – метод
feed(), который принимает строковый аргумент. Его можно вызывать с любым объёмом текста за раз;p.feed(a); p.feed(b)имеет тот же эффект, что иp.feed(a+b). Когда данные содержат полные конструкции HTML-разметки, они обрабатываются немедленно; неполные конструкции сохраняются в буфере. Чтобы принудительно обработать все необработанные данные, вызовите методclose().Например, чтобы разобрать всё содержимое файла, используйте:
parser.feed(open('myfile.html').read()) parser.close()
Интерфейс для определения семантики HTML-тегов очень прост: создайте производный класс и определите методы с именами
start_tag(),end_tag()илиdo_tag(). Парсер будет вызывать их в соответствующие моменты:start_tag()илиdo_tag()вызывается, когда встречается открывающий тег вида<tag ...>;end_tag()вызывается, когда встречается закрывающий тег вида<tag>. Если открывающий тег требует соответствующего закрывающего тега, например<H1>…</H1>, класс должен определить методstart_tag(); если тег не требует закрывающего тега, например<P>, класс должен определить методdo_tag().
Модуль определяет класс парсера и исключение:
-
class
htmllib.HTMLParser(formatter)¶ Это базовый класс парсера HTML. Он поддерживает все имена сущностей, требуемые рекомендацией XHTML 1.0 (https://www.w3.org/TR/xhtml1). Он также определяет обработчики для всех элементов HTML 2.0 и многих элементов HTML 3.0 и 3.2.
-
exception
htmllib.HTMLParseError¶ Исключение, вызываемое классом
HTMLParserпри обнаружении ошибки во время разбора.Новое в версии 2.4.
См. также
- Модуль
formatter Определение интерфейса для преобразования абстрактного потока событий форматирования в конкретные события вывода для объектов записи.
- Модуль
HTMLParser Альтернативный парсер HTML, который предоставляет несколько более низкоуровневый взгляд на входные данные, но предназначен для работы с XHTML и не реализует некоторые синтаксические конструкции SGML, не используемые в «развёрнутом HTML» и недопустимые для XHTML.
- Модуль
htmlentitydefs Определение замещающего текста для сущностей XHTML 1.0.
- Модуль
sgmllib Базовый класс для
HTMLParser.
19.3.1. Объекты HTMLParser¶HTMLParser Objects
В дополнение к методам тегов, класс HTMLParser предоставляет некоторые дополнительные методы и переменные экземпляра для использования внутри методов тегов.
-
HTMLParser.formatter¶ Это экземпляр форматтера, связанный с парсером.
-
HTMLParser.nofill¶ Логический флаг, который должен быть истинным, когда пробельные символы не должны сжиматься, или ложным, когда должны. В общем случае это должно быть истинным только тогда, когда символьные данные должны обрабатываться как «предварительно отформатированный» текст, например внутри элемента
<PRE>. Значение по умолчанию – ложь. Это влияет на работуhandle_data()иsave_end().
-
HTMLParser.anchor_bgn(href, name, type)¶ Этот метод вызывается в начале области привязки (anchor). Аргументы соответствуют атрибутам тега
<A>с теми же именами. Реализация по умолчанию поддерживает список гиперссылок (определяемых атрибутомHREFдля тегов<A>) в документе. Список гиперссылок доступен как атрибут данныхanchorlist.
-
HTMLParser.anchor_end()¶ Этот метод вызывается в конце области привязки. Реализация по умолчанию добавляет текстовую метку сноски, используя индекс из списка гиперссылок, созданного
anchor_bgn().
-
HTMLParser.handle_image(source, alt[, ismap[, align[, width[, height]]]])¶ Этот метод вызывается для обработки изображений. Реализация по умолчанию просто передаёт значение alt методу
handle_data().
-
HTMLParser.save_bgn()¶ Начинает сохранение символьных данных в буфере вместо отправки их объекту-форматтеру. Извлеките сохранённые данные через
save_end(). Использование парыsave_bgn()/save_end()не может быть вложенным.
-
HTMLParser.save_end()¶ Завершает буферизацию символьных данных и возвращает все данные, сохранённые после предыдущего вызова
save_bgn(). Если флагnofillравен false, пробельные символы сжимаются до одиночных пробелов. Вызов этого метода без предшествующего вызоваsave_bgn()вызовет исключениеTypeError.
19.4. htmlentitydefs – Определения общих сущностей HTML¶htmlentitydefs – Definitions of HTML general entities
Примечание
Модуль htmlentitydefs в Python 3 переименован в html.entities. Инструмент 2to3 при преобразовании исходного кода в Python 3 автоматически адаптирует импорты.
Исходный код: Lib/htmlentitydefs.py
Этот модуль определяет три словаря: name2codepoint, codepoint2name и entitydefs. entitydefs используется модулем htmllib для предоставления атрибута entitydefs класса HTMLParser. Приведённое здесь определение содержит все сущности, определённые XHTML 1.0, которые можно обработать с помощью простой текстовой замены в наборе символов Latin-1 (ISO-8859-1).
-
htmlentitydefs.entitydefs¶ Словарь, сопоставляющий определения сущностей XHTML 1.0 с их замещающим текстом в ISO Latin-1.
-
htmlentitydefs.name2codepoint¶ Словарь, отображающий имена HTML-сущностей в кодовые точки Unicode.
Новое в версии 2.3.
-
htmlentitydefs.codepoint2name¶ Словарь, отображающий кодовые точки Unicode в имена HTML-сущностей.
Новое в версии 2.3.