Является ли пакет HTML Agility Pack все еще best.NET парсер HTML? [закрытый]


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

7 55

7 ответов:

есть таблицы С сравнения.

в итоге:

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

  • тестовый документ sizzle (около 11 k)
  • запись Википедии для "сыр" (около 170 к)
  • одностраничный HTML 5 spec (около 6 мегабайт)

общие результаты, являются:

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

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

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

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

Html Agility Pack был дан в качестве ответа на вопрос StackOverflow некоторое время назад

пакет HTML Agility Pack по-прежнему является отличным решением для анализа HTML.

это лучшие?

лучший? хорошо, что все зависит от поставленной задачи, но в целом я так думаю. Есть случаи, когда он не дотягивает до идеала, но в целом он будет делать большую работу.

есть ли что-то более легкое?

вы можете попробовать это:http://csharptest.net/browse/src/Library/Html/ Это не более чем рука, полная исходных файлов, которые разбирают HTML/XML через регулярное выражение. Он поддерживает легкий DOM и XPath, но не намного больше. (содержание справки)

[пример]

public void TestParse() {
        string notxml = "<html id=a ><body foo='bar' bar=\"foo\" />";
        var html = new HtmlLightDocument(notxml).Root;

        Assert.AreEqual("html", html.TagName);
        Assert.AreEqual(1, html.Attributes.Count);
        Assert.AreEqual("a", html.Attributes["id"]);
        Assert.AreEqual(1, html.Children.Count);
}

в качестве альтернативы вы можете использовать парсер непосредственно вместо построения дерева DOM. Просто реализовать IXmlLightReader интерфейс, и вызовите статический XmlLightParser.Разбор метод.

PS: Это было написано, чтобы решить внутреннюю дискуссию: это регулярное выражение можете разбор HTML! С тех пор мы на самом деле нашли много применений для него, так как он достаточно легкий, чтобы встраивать в любом месте. Есть еще способы запутать DOM heirarchy builder, но я не нашел никакого HTML, который парсер не будет обрабатывать.

есть еще AngleSharp

AngleSharp-это библиотека .NET, которая дает вам возможность анализировать гипертексты на основе угловых скобок, такие как HTML, SVG и MathML. XML без проверки также поддерживается библиотекой. Важным аспектом AngleSharp является то, что CSS также может быть проанализирован. Парсер построен на официальной спецификации W3C. Это создает совершенно портативное представление HTML5 DOM данного исходного кода. Также текущие функции такие как querySelector или querySelectorAll работают для обхода дерева.

Я использовал это раньше, довольно простой в потоке api. Я думаю, что в домене C# / .Net это очень хороший выбор.

есть библиотека java здесь. Выглядит довольно хорошо, хотя у меня нет личного опыта.

best - это очень относительный термин, для вашего вопроса, я полагаю, вы ищете надежный инструмент, поэтому я думаю, что эта функция должна быть принята во внимание. Я бы искал поддержку и силу компании, которая предоставляет этот инструмент. Это ужасное чувство, когда вы пытаетесь связаться со службой поддержки для любого инструмента, который использует и ответ, этой компании больше не существует. Поскольку HAP поддерживается сообществом разработчиков, я бы скорее доверял ей.

Если вы готовы смотреть за пределы .NET мир, элемент Python Итак, сообщество рекомендует Красивый Суп, например html-parser-in-python.

Beautiful Soup-это синтаксический анализатор Python HTML/XML, предназначенный для быстрого выполнения таких проектов, как очистка экрана.