Парсер HTML на PHP без регулярных выражений с ноля?
Прежде всего, не нужно мне кидать ссылки на расширения PHP и уж тем более на тормозную либу Simple html dom и прочие!
Я не собираюсь городить велосипеды, а только хочу получить навыки и опыт путем реализации чего-то относительно простого.
Многие утверждают, что писать сложные парсеры на регэкспах - извращение. Я полностью согласен с теми людьми. И поэтому хочу понять как, к примеру, браузере анализируют код html, какие алгоритмы испольщуют и т.д. не на регэкспах ведь они это делают.
Какая последовательность анализа html страницы, средствами php, должна быть осущестлена? К примеру, получили мы страницу, очистили ее от всякого мусора, такого как лишние пробелы, переносы.... А дальше что делать? Страницы могут быть огромными и не хотелось бы держать их в памяти. Представим, что полученная страница валидная и мы записали ее в файл и т.к. само по себе содержимое уже имеет иерархию (html теги) то по какому алгоритму осуществлять поиск того или иного тега и все его содержимое? Или все это как то по другому должно работать? Если да, то как? Какие подходы и алгоритмы применять, куда копать?
Понимаю, что php плохо работает с бинарными файлами, но думаю с такой задачей он должен справиться.
Буду благодарен за всякий совет.
как, к примеру, браузере анализируют код html, какие алгоритмы испольщуют и т.д. не на регэкспах ведь они это делают.
Конечно же нет. И конечно же не на php это делают. Но это лирика, все что Вам надо - уметь читать и эта ссылка: https://habrahabr.ru/post/174057/
ПС: Боюсь что разобравшись глубоко в теме, вы напишите все тот же SimpleHtmlDom. Громоздкий и тормозной. Если посмотреть на современные браузеры - увидите, что они кушают намного больше оперативки, чем замечательная SimpleHtmlDom.
Я уже написал для себя библиотеку (на регэкспах) , которая в 30 раз быстрее simple html dom и некорректный код разбирает куда лучше. Я не зочу останавливаться, хочу по человечески ошупать то, как все должно работать.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.