Содержание страницы
html.parser – простой парсер HTML и XHTML¶html.parser – Simple HTML and XHTML parser
Этот модуль определяет класс HTMLParser, который служит основой для разбора текстовых файлов в формате HTML (язык гипертекстовой разметки) и XHTML.
- class html.parser.HTMLParser¶
Класс HTMLParser создаётся без аргументов.
Экземпляр HTMLParser получает HTML-данные и вызывает функции-обработчики при начале и конце тегов. Класс HTMLParser предназначен для переопределения пользователем, чтобы реализовать нужное поведение.
Этот парсер не проверяет, соответствуют ли закрывающие теги открывающим, и не вызывает обработчик закрывающего тега для элементов, которые неявно закрываются при закрытии внешнего элемента.
Также определено исключение:
- exception html.parser.HTMLParseError¶
- Исключение, вызываемое классом HTMLParser при возникновении ошибки во время разбора. Это исключение предоставляет три атрибута: msg – краткое сообщение с описанием ошибки, lineno – номер строки, на которой была обнаружена ошибочная конструкция, и offset – количество символов от начала строки до начала конструкции.
Экземпляры HTMLParser имеют следующие методы:
- HTMLParser.reset()¶
- Сбрасывает экземпляр. Теряет все необработанные данные. Вызывается неявно при создании экземпляра.
- HTMLParser.feed(data)¶
- Передаёт парсеру некоторый текст. Текст обрабатывается по мере поступления полных элементов; неполные данные буферизуются до тех пор, пока не будут переданы новые данные или не будет вызван close().
- HTMLParser.close()¶
- Принудительно обрабатывает все буферизованные данные так, как если бы за ними следовал маркер конца файла. Этот метод может быть переопределён в производном классе для добавления обработки в конце входных данных, но переопределённая версия всегда должна вызывать метод базового класса HTMLParser – close().
- HTMLParser.getpos()¶
- Возвращает номер текущей строки и смещение.
- HTMLParser.get_starttag_text()¶
- Возвращает текст самого последнего открытого начального тега. Обычно это не требуется для структурированной обработки, но может пригодиться при работе с HTML «как есть» или при повторной генерации входных данных с минимальными изменениями (пробелы между атрибутами можно сохранить и т.д.).
- HTMLParser.handle_starttag(tag, attrs)¶
Этот метод вызывается для обработки начала тега. Предназначен для переопределения в производном классе; реализация базового класса ничего не делает.
Аргумент tag – это имя тега, приведённое к нижнему регистру. Аргумент attrs – это список пар (name, value), содержащий атрибуты, найденные внутри угловых скобок <> тега. Имя name переводится в нижний регистр, кавычки в значении value удалены, а ссылки на символы и сущности заменены. Например, для тега <A HREF="http://www.cwi.nl/"> этот метод будет вызван как handle_starttag('a', [('href', 'http://www.cwi.nl/')]).
Все ссылки на сущности из html.entities заменяются в значениях атрибутов.
- HTMLParser.handle_startendtag(tag, attrs)¶
- Аналогично handle_starttag(), но вызывается, когда парсер встречает пустой тег в стиле XHTML (<a .../>). Этот метод может быть переопределён подклассами, которым требуется эта конкретная лексическая информация; реализация по умолчанию просто вызывает handle_starttag() и handle_endtag().
- HTMLParser.handle_endtag(tag)¶
- Этот метод вызывается для обработки закрывающего тега элемента. Предназначен для переопределения в производном классе; реализация базового класса ничего не делает. Аргумент tag – это имя тега, приведённое к нижнему регистру.
- HTMLParser.handle_data(data)¶
- Этот метод вызывается для обработки произвольных данных. Предназначен для переопределения в производном классе; реализация базового класса ничего не делает.
- HTMLParser.handle_charref(name)¶
- Этот метод вызывается для обработки символьной ссылки вида &#ref;. Предназначен для переопределения в производном классе; реализация базового класса ничего не делает.
- HTMLParser.handle_entityref(name)¶
- Этот метод вызывается для обработки общей ссылки на сущность вида &name;, где name – это общая ссылка на сущность. Предназначен для переопределения в производном классе; реализация базового класса ничего не делает.
- HTMLParser.handle_comment(data)¶
- Этот метод вызывается при обнаружении комментария. Аргумент comment – это строка, содержащая текст между разделителями -- и --, но не сами разделители. Например, комментарий <!--text--> вызовет этот метод с аргументом 'text'. Предназначен для переопределения в производном классе; реализация базового класса ничего не делает.
- HTMLParser.handle_decl(decl)¶
- Метод, вызываемый, когда парсер читает SGML-объявление. Параметр decl содержит полное содержимое объявления внутри разметки <!...>. Этот метод предназначен для переопределения в производном классе; реализация базового класса ничего не делает.
- HTMLParser.handle_pi(data)¶
Метод, вызываемый при обнаружении инструкции обработки. Параметр data будет содержать всю инструкцию обработки. Например, для инструкции обработки <?proc color='red'> этот метод будет вызван как handle_pi("proc color='red'"). Предназначен для переопределения в производном классе; реализация базового класса ничего не делает.
Примечание
Класс HTMLParser использует синтаксические правила SGML для обработки инструкций. Инструкция обработки XHTML, использующая завершающий '?', приведёт к включению '?' в data.
Пример приложения парсера HTML¶Example HTML Parser Application
В качестве базового примера ниже представлен очень простой парсер HTML, который использует HTMLParser класс для вывода тегов по мере их обнаружения:
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print "Encountered the beginning of a %s tag" % tag
def handle_endtag(self, tag):
print "Encountered the end of a %s tag" % tag