Документация Python неофициальный перевод
Содержание страницы

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. Объекты HTMLParserHTMLParser 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 – Определения общих сущностей HTMLhtmlentitydefs – 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.