Найти в Дзене
programmer's notes (python and more)

Программирование на языке Python. Парсинг html-страниц с помощью стандартного модуля html.parser

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео. Парсинг страниц html с помощью модуля html.parser Для парсинга web-страниц есть разные библиотеки. И мы будем к ним обращаться. Но есть и совершенно замечательный стандартный модуль html.parser. Вот сегодня мы им и займёмся. Чтобы разбирать html-страницу, необходимо создать объект класса HTMLParser. У него есть целый набор методов, часть из которых запускается автоматически при отправке объекту текста html-страницы. Лишний раз подчеркнём, что парсинг с помощью данных инструментов прост и незамысловат. Методы класса HTMLParser Переопределяемые методы класса HTMLParser Переопределяемые методы вызываются автоматически при обработке текста html. Переопределив указанные методы можно обрабатывать все объекты html. Ниже представлен пример программы, осуществляющей простой парсинг html-страницы. Страница считывается из файла. Обращаю внимани
Оглавление

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Парсинг страниц html с помощью модуля html.parser

Для парсинга web-страниц есть разные библиотеки. И мы будем к ним обращаться. Но есть и совершенно замечательный стандартный модуль html.parser. Вот сегодня мы им и займёмся.

Чтобы разбирать html-страницу, необходимо создать объект класса HTMLParser. У него есть целый набор методов, часть из которых запускается автоматически при отправке объекту текста html-страницы. Лишний раз подчеркнём, что парсинг с помощью данных инструментов прост и незамысловат.

Методы класса HTMLParser

  • HTMLParser.feed() — передать объекту текст html.
  • HTMLParser.close() — закрыть и обработать текст, содержащийся в буферах.
  • HTMLParser.reset() — перевести объект HTMLParser в исходное состояние.
  • HTMLParser.getpos() возвращает номер текущей строки и смещение.
  • HTMLParser.get_starttag_text() — возвращает текст последнего открытого тэга.

Переопределяемые методы класса HTMLParser

Переопределяемые методы вызываются автоматически при обработке текста html.

  • HTMLParser.handle_starttag() — вызывается при встрече открывающего тэга.
  • HTMLParser.handle_endtag() — вызывается при встрече закрывающего тэга.
  • HTMLParser.handle_startendtag() — вызывается при встрече не закрывающегося тэга.
  • HTMLParser.handle_data() — вызывается для текста внутри тэга.
  • HTMLParser.handle_entityref() — вызывается для html мнемоник (начинаются с амперсанда &).
  • HTMLParser.handle_charref() — вызывается для обработок юникод-символов.
  • HTMLParser.handle_comment() — вызываются для обработки комментариев.
  • HTMLParser.handle_decl() — вызывается для обработки DOCTYPE.
  • HTMLParser.handle_pi() — обрабатывает инструкции по обработке.
  • HTMLParser.unknown_decl() — обработка неизвестного объекта.

Переопределив указанные методы можно обрабатывать все объекты html.

Ниже представлен пример программы, осуществляющей простой парсинг html-страницы. Страница считывается из файла. Обращаю внимание, что если вы будете использовать конструктор то должны обязательно вызвать конструктор родительского класса HTMLParser.__init__(self). Переменная fl указывает методу handle_data() необходимость вывода содержимого тэга. В нашем случае мы хотим получить содержимое тэга с javascript-кодом.

Текст программы см. ниже
Текст программы см. ниже
primer184.py

Результат разбора моей страницы, согласно представленной выше программы, таков

<html
<head
<title
title>
<meta
('http-equiv', 'Content-Type') ('content', 'text/html; charset=utf-8').
<link
head>
<body
<div
div>
<div
div>
<div
div>
<p
<img
('src', '1.jpg') ('width', '400') ('height', '450') ('alt', 'альтернативный текст').
img>
p>
<form
<input
<input
body>
<script

function fun(p)
{
window.location=p.value;
}

script>
html>

При желании анализ html-текста можно сколь угодно усилить. Согласитесь, что класс HTMLParser предоставляет хорошие возможности, гораздо лучше попыток использовать для этой цели регулярных выражений. В одной из следующих статей постараюсь привести пример парсинга реальной страницы.

См. также

Пишите свои предложения и замечания и занимайтесь программированием, хотя бы для поддержания уровня интеллекта.

Кто программировал этого робота? Он ведёт себя агрессивно
Кто программировал этого робота? Он ведёт себя агрессивно