Le Pack d'agilité HTML est-il toujours le meilleur analyseur HTML .NET?

.net c# html html-agility-pack parsing

Question

Html Agility Pack a été donné comme réponse à une question StackOverflow il y a quelque temps, est-ce toujours la meilleure option? Quelles autres options devraient être considérées? Y a-t-il quelque chose de plus léger?

Réponse acceptée

Il y a un tableur avec les comparaisons.

En résumé:

CsQuery Performance vs Html Agility Pack et Fizzler J'ai mis en place des tests de performance pour comparer CsQuery à la seule alternative pratique que je connaisse (Fizzler, une extension HtmlAgilityPack). J'ai testé contre trois documents différents:

  • Le document de test de grésillement (environ 11 k)
  • L'entrée wikipedia pour "fromage" (environ 170 k)
  • La spécification HTML 5 d'une page (environ 6 mégaoctets)

Les résultats globaux sont:

  • HAP accélère le chargement de la chaîne HTML dans un modèle d'objet. Cela a du sens, étant donné que je ne pense pas que Fizzler construise un index (ou peut-être seulement un relativement simple). CsQuery prend entre 1.1 et 2.6 fois plus de temps pour charger le document. Plus à ce sujet ci-dessous.
  • CsQuery est plus rapide pour presque tout le reste. Parfois, par facteurs de 10 000 ou plus. La seule exception est le sélecteur "*", où parfois Fizzler est plus rapide. Pour tous les tests, les résultats sont complètement énumérés; Dans ce cas, tous les noeuds de l'arborescence sont énumérés. Donc, cela ne teste pas autant le moteur de sélection que la structure de données.
  • CsQuery a fait un meilleur travail en renvoyant les mêmes résultats qu'un navigateur. JQuery 1.7.2 a été vérifié avec le même document dans Chrome pour chaque sélecteur. Les numéros correspondent à ceux renvoyés par CsQuery. Ceci est probablement dû au fait que HtmlAgilityPack traite les balises facultatives (manquantes) différemment. De plus, nth-child n'est pas complètement implémenté dans Fizzler - il ne prend en charge que les valeurs simples (pas les formules).

Réponse populaire

En ce qui concerne l'analyse HTML, il n'y a aucune comparaison possible avec la réalité. C'est un port C # de l' analyseur validator.nu . C'est la même base de code que celle utilisée par les navigateurs basés sur Gecko (par exemple, Firefox). Le repo a l'air un peu poussiéreux mais ne vous y trompez pas ... le port est exceptionnel. Il vient d'être négligé. Je l'ai intégré à CsQuery il y a environ un mois. Il passe tous les tests CsQuery (qui incluent la plupart des tests jQuery et Sizzle portés en C #).

Je ne suis au courant d'aucun autre analyseur syntaxique HTML5 écrit en C #, ni même d'aucun analyseur proche du bon travail en termes de gestion des balises manquantes, facultatives et invalides. Cela ne fait pas seulement un excellent travail, il est conforme aux normes.

Le référentiel auquel je suis lié ci-dessus est le port d'origine. Il inclut un wrapper de base qui produit une arborescence de nœuds XML. Les versions 1.3 et supérieures de CsQuery utilisent cet analyseur.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi