Haskell:
Разбор HTML

Как:

Давайте погрузимся в код, используя библиотеку tagsoup для разбора простого HTML-фрагмента. Сначала убедитесь, что установили пакет из Hackage через cabal install tagsoup.

import Text.HTML.TagSoup

-- Давайте разберем простой HTML-фрагмент
let html = "<html><body><p>Привет, Haskell!</p></body></html>"

-- Разбираем
let parsedHtml = parseTags html

-- Находим параграфы
let paragraphs = partitions (~== "<p>") parsedHtml

-- Получаем текст из первого параграфа
let firstParagraphText = innerText $ head paragraphs

-- Вуаля!
print firstParagraphText

Пример вывода:

"Привет, Haskell!"

Этот фрагмент разбирает строку HTML, отыскивает теги параграфов и печатает текст, содержащийся в первом параграфе. Опрятно и сладко.

Глубокое Погружение

Разбор HTML в Haskell не всегда был таким простым, как сегодня. Когда-то люди создавали свои собственные парсеры или боролись с библиотеками низкого уровня, анализируя HTML, как будто это был Дикий Запад.

В наши дни у вас есть выбор. tagsoup, как мы использовали, отлично подходит, когда структура HTML скорее предложение, чем правило — он терпим к реальному неаккуратному HTML. Если вы ищете большей строгости, html-conduit в сочетании с xml-conduit из пакета conduit может быть вашим выбором. Они используют потоковый подход и более требовательны к структуре.

Под капотом эти библиотеки превращают HTML в дерево или суп из тегов. Они предоставляют удобные функции для запроса и манипулирования этими данными, делая разбор HTML менее головной болью. Думайте о них как о карте сокровищ, где X отмечает тег параграфа.

См. Также