Вопрос по parsing, .net, c#, html – Является ли Html Agility Pack лучшим анализатором HTML для .NET? [закрыто]

56

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

@ Kamarey, вопросы о Рекомендациях по программному обеспечению следует задавать наsoftwarerecs.stackexchange.com, В то же время см требования искусстваsoftwarerecs.meta.stackexchange.com/q/336/35246 Michael Freidgeim
Отсутствие анализатора HTML является явным упущением в стандартной библиотеке .NET. & quot; Сделайте запрос http и проанализируйте ответ & quot; в эпоху Интернета - «хлеб с маслом», вторая программа, которую люди пишут после «Привет, мир». Colonel Panic
@ColonelPanic, в наши дни на большинстве веб-страниц, использующих jscript для получения данных, вам нужно больше, чем анализатор HTML. Ian Ringrose
Смотрите декабрь 2015 года обзорforcewake.me/how-to-parse-html-in-dotnet  , AngleSharp активно поддерживается (dotnet.libhunt.com/project/anglesharp/vs/htmlagilitypack) Michael Freidgeim
Не понимаю, как вопрос о библиотеке программного обеспечения и более чем 50 голосах "за" не по теме. Если не здесь - где задать такие вопросы? Kamarey

Ваш Ответ

7   ответов
36

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

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

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

Error: User Rate Limit ExceededyourError: User Rate Limit ExceededyouError: User Rate Limit Exceeded
9

some time ago

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

is it still the best option?

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

Is there something more lightweight?

Вы можете попробовать это:http://csharptest.net/browse/src/Library/Html/ Это всего лишь набор исходных файлов, которые разделяют HTML / XML через Regex. Он поддерживает легкие 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.Parse метод.

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

Error: User Rate Limit ExceededExampleAttributeError: User Rate Limit Exceeded
11

AngleSharp

AngleSharp is a .NET library that gives you the ability to parse angle bracket based hyper-texts like HTML, SVG, and MathML. XML without validation is also supported by the library. An important aspect of AngleSharp is that CSS can also be parsed. The parser is built upon the official W3C specification. This produces a perfectly portable HTML5 DOM representation of the given source code. Also current features such as querySelector or querySelectorAll work for tree traversal.

Error: User Rate Limit ExceededandError: User Rate Limit Exceeded
2

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

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

2

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

52

таблица со сравнениями.

В итоге:

CsQuery Performance vs. Html Agility Pack and Fizzler I put together some performance tests to compare CsQuery to the only practical alternative that I know of (Fizzler, an HtmlAgilityPack extension). I tested against three different documents:

The sizzle test document (about 11 k) The wikipedia entry for "cheese" (about 170 k) The single-page HTML 5 spec (about 6 megabytes)

The overall results are:

HAP is faster at loading the string of HTML into an object model. This makes sense, since I don't think Fizzler builds an index (or perhaps it builds only a relatively simple one). CsQuery takes anywhere from 1.1 to 2.6x longer to load the document. More on this below. CsQuery is faster for almost everything else. Sometimes by factors of 10,000 or more. The one exception is the "*" selector, where sometimes Fizzler is faster. For all tests, the results are completely enumerated; this case just results in every node in the tree being enumerated. So this doesn't test the selection engine so much as the data structure. CsQuery did a better job at returning the same results as a browser. Each of the selectors here was verified against the same document in Chrome using jQuery 1.7.2, and the numbers match those returned by CsQuery. This is probably because HtmlAgilityPack handles optional (missing) tags differently. Additionally, nth-child is not implemented completely in Fizzler - it only supports simple values (not formulae).
awesomium.com
CsQueryError: User Rate Limit ExceededAngleSharp
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

Если вы готовы смотреть за пределы.NET Мир, Python SO сообщество рекомендуетКрасивый суп, for example HTML-парсер-в-питон.

Beautiful Soup is a Python HTML/XML parser designed for quick turnaround projects like screen-scraping.

Похожие вопросы