Собственный парсер HTML
Написал собственный парсер HTML. Пока он не достаточно хорошо оптимизирован (знаю где можно ускорить), но при этом перелопатил HTML-ку в 721Мб (взял реальный HTML в 180К и продублировал его много раз) за 13 секунд без оптимизаций и за 10 секунд с оптимизацией -O3. Получается порядка 72 мегабайт в секуду. Весьма неплохо получилось, я прямо охуел, целью было 40Мб/сек
Парсер на входе получает HTML-ку, а на выходе выдаёт текст из допустимых тегов (можно указывать содержимое каких тегов нужно игнорировать). При этом он толерантен к ошибкам в документе и умеет обходить долбанные JavaScript в которых любят писать что-то типа document.write(”</script>”);
Осталось основательно потестить его на разных реальных HTML-ках и можно использовать…
Tags: html, парсер, программирование



А общий алгоритм? в картинках
А чем общий алгоритм в картинках поможет? Обыкновенный конечный автомат со стеком тегов…
При этом парсер заточен под решение конкретной задачи, а не универсальный. Был бы универсальный, можно было бы выложить…
Для меня было странным то, что я не нешёл реализации быстрого парсера HTML в виде библиотеки на C. О чём и написал
Ну а как можно пощупать?! )
Так я его и не довёл до ума, навалилось работы и я положил его в дальнюю папку
т.е. у тебя задача разрешена в виде команд работы со строками без регэкспов, например?
За счёт чего оптимизация? Очень интересно.
В парсере используется конечный автомат. Регекспам там делать, понятное дело, нечего. Парсер “размечает” (никаких копирований, только метки что и где начинается/кончается в тексте) HTML в достаточно простую структуру, достаточную для решения своих задач, а не формирует полный DOM с валидацией и т.п.
посмотрю, темболее с хорошим качеством
и