Является ли Html Agility Pack еще лучшим .NET-парсером .NET?

.net c# html html-agility-pack parsing

Вопрос

Html Agility Pack был дан как ответ на вопрос StackOverflow некоторое время назад, это все же лучший вариант? Какие еще варианты следует учитывать? Есть ли что-то более легкое?

Принятый ответ

Существует таблица с сравнениями.

В итоге:

Производительность CsQuery и Html Agility Pack и Fizzler. Я собрал несколько тестов производительности, чтобы сравнить CsQuery с единственной практической альтернативой, о которой я знаю (Fizzler, расширение HtmlAgilityPack). Я тестировал три разных документа:

  • Испытательный документ с шипением (около 11 k)
  • Википедическая запись для «сыра» (около 170 k)
  • Одностраничная спецификация HTML 5 (около 6 мегабайт)

Общие результаты:

  • HAP быстрее загружает строку HTML в объектную модель. Это имеет смысл, так как я не думаю, что Fizzler строит индекс (или, возможно, он строит только относительно простой). CsQuery занимает от 1,1 до 2,6 раза дольше, чтобы загрузить документ. Подробнее об этом ниже.
  • CsQuery быстрее для всего остального. Иногда - 10 000 или более. Единственным исключением является селектор «*», где иногда Fizzler работает быстрее. Для всех тестов результаты полностью перечислены; этот случай просто приводит к тому, что каждый узел в дереве перечисляется. Таким образом, это не проверяет механизм выбора так же, как структуру данных.
  • CsQuery лучше справился с возвратом тех же результатов, что и браузер. Каждый из этих селекторов был проверен в том же документе в Chrome, используя jQuery 1.7.2, и числа соответствуют тем, которые были возвращены CsQuery. Вероятно, это связано с тем, что HtmlAgilityPack обрабатывает необязательные (отсутствующие) теги по-разному. Кроме того, nth-child полностью не реализован в Fizzler - он поддерживает только простые значения (а не формулы).

Популярные ответы

Когда дело доходит до разбора HTML, нет никакого сравнения с реальной вещью. Это порт C # для анализатора validator.nu. Это та же самая база кода, используемая браузерами на основе Gecko (например, Firefox). Там репо выглядит немного пыльным, но не обманывайся. Порт выдающийся. Это просто было упущено. Я интегрировал его в CsQuery около месяца назад. Он передает все тесты CsQuery (которые включают большинство тестов jQuery и Sizzle, перенесенных на C #).

Я не осведомлен о каких-либо других анализаторах HTML5, написанных на C #, или даже о том, что происходит удаленно близко к хорошей работе с точки зрения отсутствия, необязательной и недействительной обработки тегов. Это не просто отличная работа, но это стандарты соответствуют стандартам.

Репо, с которым я связан выше, является исходным портом, он включает базовую оболочку, которая создает дерево узлов XML. CsQuery версии 1.3 и выше используют этот синтаксический анализатор.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему