Html Agility Pack è ancora il miglior parser .NET HTML?

.net c# html html-agility-pack parsing

Domanda

Html Agility Pack è stato fornito come risposta a una domanda StackOverflow qualche tempo fa, è ancora l'opzione migliore? Quali altre opzioni dovrebbero essere considerate? C'è qualcosa di più leggero?

Risposta accettata

C'è un foglio di calcolo con i confronti.

In sintesi:

CsQuery Performance vs. Html Agility Pack e Fizzler Ho messo insieme alcuni test prestazionali per confrontare CsQuery con l'unica alternativa pratica che conosco (Fizzler, un'estensione HtmlAgilityPack). Ho provato contro tre diversi documenti:

  • Il documento di prova sfrigolare (circa 11 k)
  • La voce di wikipedia per "formaggio" (circa 170 k)
  • La specifica HTML 5 a pagina singola (circa 6 megabyte)

I risultati complessivi sono:

  • HAP è più veloce nel caricare la stringa di HTML in un modello a oggetti. Questo ha senso, dal momento che non penso che Fizzler costruisca un indice (o forse ne costruisca solo uno relativamente semplice). CsQuery richiede da 1,1 a 2,6 volte più tempo per caricare il documento. Maggiori informazioni su questo sotto.
  • CsQuery è più veloce per quasi tutto il resto. A volte da fattori di 10.000 o più. L'unica eccezione è il selettore "*", dove a volte Fizzler è più veloce. Per tutti i test, i risultati sono completamente elencati; questo caso restituisce solo ogni nodo dell'albero che viene enumerato. Quindi questo non prova il motore di selezione tanto quanto la struttura dei dati.
  • CsQuery ha fatto un lavoro migliore restituendo gli stessi risultati di un browser. Ciascuno dei selettori qui è stato verificato rispetto allo stesso documento in Chrome utilizzando jQuery 1.7.2 e i numeri corrispondono a quelli restituiti da CsQuery. Ciò è probabilmente dovuto al fatto che HtmlAgilityPack gestisce tag opzionali (mancanti) in modo diverso. Inoltre, nth-child non è implementato completamente in Fizzler - supporta solo valori semplici (non formule).

Risposta popolare

Quando si parla di parsing HTML, non c'è paragone con la realtà. Questa è una porta C # del parser validator.nu . Questa è la stessa base di codice usata dai browser basati su Gecko (es. Firefox). Ci repo sembra un po 'polveroso ma non lasciatevi ingannare .. il porto è eccezionale. E 'stato semplicemente trascurato. L'ho integrato in CsQuery circa un mese fa. Supera tutti i test CsQuery (che includono la maggior parte dei test jQuery e Sizzle portati su C #).

Non sono a conoscenza di alcun altro parser HTML5 scritto in C #, o anche di quelli che vengono lontanamente vicini a fare un buon lavoro in termini di gestione dei tag mancante, facoltativa e non valida. Questo non è solo un ottimo lavoro, è conforme agli standard.

Il repository che ho collegato sopra è la porta originale, include un wrapper di base che produce un albero di nodi XML. Le versioni di CsQuery 1.3 e successive utilizzano questo parser.



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché