Python

Разбор HTML с использованием Python

Разбор HTML с использованием Python
Синтаксический анализ HTML - одна из наиболее распространенных задач, выполняемых сегодня для сбора информации с веб-сайтов и ее анализа для различных целей, таких как определение ценовых характеристик продукта с течением времени, обзоры книг на веб-сайтах и ​​многое другое. Существует множество библиотек, таких как BeautifulSoup в Python, которые абстрагируются от многих болезненных моментов при синтаксическом анализе HTML, но стоит знать, как эти библиотеки на самом деле работают под этим уровнем абстракции.

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

Глядя на класс HTMLParser

Чтобы проанализировать HTML-текст в Python, мы можем использовать HTMLParser класс в html.парсер модуль. Давайте посмотрим на определение класса для HTMLParser класс:

класс html.парсер.HTMLParser (*, convert_charrefs = True)

В convert_charrefs поле, если установлено значение True, все ссылки на символы будут преобразованы в их эквиваленты Unicode. Только сценарий / стиль элементы не конвертируются. Теперь мы попытаемся понять каждую функцию для этого класса, чтобы лучше понять, что делает каждая функция.

Создание подкласса класса HTMLParser

В этом разделе мы создадим подкласс класса HTMLParser и рассмотрим некоторые функции, вызываемые при передаче данных HTML в экземпляр класса. Напишем простой скрипт, который все это сделает:

из HTML.парсер импорт HTMLParser
класс LinuxHTMLParser (HTMLParser):
def handle_starttag (self, tag, attrs):
print ("Обнаружен начальный тег:", тег)
def handle_endtag (сам, тег):
print ("Обнаружен конечный тег:", тег)
def handle_data (self, data):
print ("Данные найдены:", данные)
parser = LinuxHTMLParser ()
парсер.кормить("
'

Модуль синтаксического анализа Python HTML


')

Вот что мы получаем с помощью этой команды:

Подкласс Python HTMLParser

HTMLParser функции

В этом разделе мы будем работать с различными функциями класса HTMLParser и рассмотрим функциональность каждой из них:

из HTML.парсер импорт HTMLParser
из HTML.сущности импортируют name2codepoint
класс LinuxHint_Parse (HTMLParser):
def handle_starttag (self, tag, attrs):
print ("Начальный тег:", тег)
для attr в attrs:
print ("attr:", attr)
def handle_endtag (сам, тег):
print ("Конечный тег:", тег)
def handle_data (self, data):
print ("Данные:", данные)
def handle_comment (self, data):
print ("Комментарий:", данные)
def handle_entityref (я, имя):
c = chr (name2codepoint [имя])
print ("Именованный энт:", c)
def handle_charref (я, имя):
если имя.начинается с ('x'):
c = chr (int (имя [1:], 16))
еще:
c = chr (int (имя))
print ("Число:", c)
def handle_decl (себя, данные):
print ("Decl:", данные)
парсер = LinuxHint_Parse ()

С помощью различных вызовов давайте скармливаем этому экземпляру отдельные данные HTML и посмотрим, какой вывод генерируют эти вызовы. Начнем с простого DOCTYPE нить:

парсер.кормить(''"http: // www.w3.org / TR / html4 / strict.dtd "> ')

Вот что мы получаем с этим вызовом:

DOCTYPE String

Давайте теперь попробуем тег изображения и посмотрим, какие данные он извлекает:

парсер.кормить('Логотип Python')

Вот что мы получаем с этим вызовом:

HTMLParser тег изображения

Затем давайте попробуем, как тег скрипта ведет себя с функциями Python:

парсер.кормить('')
парсер.кормить('')
парсер.feed ('# питон цвет: зеленый')

Вот что мы получаем с этим вызовом:

Тег скрипта в htmlparser

Наконец, мы также передаем комментарии в раздел HTMLParser:

парсер.кормить(''
'')

Вот что мы получаем с этим вызовом:

Анализ комментариев

Заключение

В этом уроке мы рассмотрели, как мы можем анализировать HTML, используя собственный класс Python HTMLParser без какой-либо другой библиотеки. Мы можем легко изменить код, чтобы изменить источник данных HTML на HTTP-клиент.

Прочтите больше сообщений на основе Python здесь.

Бесплатные движки с открытым исходным кодом для разработки игр для Linux
В этой статье будет рассмотрен список бесплатных игровых движков с открытым исходным кодом, которые можно использовать для разработки 2D- и 3D-игр в L...
Shadow of the Tomb Raider для Linux Учебное пособие
Shadow of the Tomb Raider - двенадцатое дополнение к серии Tomb Raider - франшизе приключенческой игры, созданной Eidos Montreal. Игра была очень хоро...
Как увеличить FPS в Linux?
FPS означает Кадров в секунду. Задача FPS - измерить частоту кадров при воспроизведении видео или во время игры. Проще говоря, количество непрерывных ...