Парсеров всем! Анализируем и тестируем существующие HTML парсеры

745c9a91a0e94cb58424eb5e39564bba.png

Всем привет!

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

Да, в этой статье я предлагаю выложить все парсеры на стол и измерить!

Приступим!

Прежде чем что-то сравнивать, нам нужно понять: что же мы собственно хотим сравнить?! А сравнить мы хотим хтмл парсеры, но вот что такое хтмл парсер?

Хтмл парсер это:

  1. Токенизатор (Tokenizer) — разбивка текста на токены
  2. Построение дерева (Tree Builder) — размещение токенов «в нужные позиции» в дереве
  3. Последующая работа с деревом


Человек «с мороза» может сказать: — «Не обязательно строить дерево для парсинга хтмл, ведь достаточно получить токены». И к сожалению, будет не прав.
Дело в том, что для правильной токенизации хтмл нам необходимо иметь дерево под рукой. Пункт 1 и 2 неразделимы.

Приведу два примера:

Первый:


Результат правильной обработки:


        
        
                
                        
                                
                                        
                                                

Второй: