Html Agility Pack è stato dato come risposta a un StackOverflow question qualche tempo fa, è ancora l'opzione migliore? Quali altre opzioni dovrebbero essere considerate? C'è qualcosa di più leggero?Html Agility Pack è ancora il miglior parser .NET HTML?
risposta
C'è un spreadsheet con i confronti.
In sintesi:
CsQuery prestazioni vs. Html Agility Pack and Fizzler ho messo insieme alcuni test di performance per confrontare CsQuery al solo pratico alternativa che io sappia (Fizzler, un'estensione HtmlAgilityPack). I testato contro tre diversi documenti:
- Il documento di prova sfrigolio (circa 11 k)
- la voce di Wikipedia per "formaggio" (circa 170 k)
- La singola pagina HTML 5 spec (circa 6 megabyte)
I risultati complessivi sono:
- HAP è più veloce a caricare la stringa di codice HTML in un n modello di oggetto. Questo ha senso, dal momento che non penso che Fizzler costruisca un indice (o forse ne costruisca solo uno relativamente semplice). CsQuery richiede ovunque da 1,1 a 2,6 volte più lungo per caricare il documento. Maggiori informazioni su questo di seguito.
- 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 enumerati ; questo caso ha come risultato solo l'enumerazione di ogni nodo dell'albero . Quindi questo non prova il motore di selezione tanto quanto la struttura dati .
- CsQuery ha svolto 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 i tag opzionali (mancanti) in modo diverso. Inoltre, nth-child non è implementato completamente in Fizzler - supporta solo valori semplici (non le formule).
Anche l'awesonium dovrebbe far parte di questo elenco. È ancora più bello, può valutare ed eseguire Javascript! – jessehouwing
http://www.awesomium.com/ – jessehouwing
Html Agility Pack è parser HTML non browser senza testa come Awesonium. –
Ho usato questo, piuttosto facile da scorrere api. Penso che nel dominio C# /. Net questa sia un'ottima scelta.
C'è una libreria java here. Sembra piuttosto buono anche se non ho esperienza personale.
Se siete pronti a guardare al di fuori del mondo .NET
, il Python
SO comunità raccomanda Beautiful Soup, per esempio html-parser-in-python.
Beautiful Soup è un parser/XML Python HTML progettato per i progetti di turnaround veloci come screen-scraping.
Html Agility Pack è stato dato come la risposta a una domanda StackOverflow qualche tempo fa
Agility pacchetto HTML è ancora una soluzione eccezionale per il parsing HTML.
è ancora l'opzione migliore?
Il migliore? beh, tutto dipende dal compito a portata di mano, ma generalmente lo penso. Ci sono occasioni in cui non è l'ideale, ma generalmente farà un ottimo lavoro.
C'è qualcosa di più leggero?
Si potrebbe provare questo: http://csharptest.net/browse/src/Library/Html/ Non è niente di più che una mano piena di file di origine che raccolgono oltre HTML/XML tramite Regex. Supporta un DOM leggero e XPath ma non molto altro. (help contents)
[Esempio]
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);
}
In alternativa è possibile utilizzare il parser direttamente invece di costruire un albero DOM. Basta implementare l'interfaccia IXmlLightReader e chiamare il metodo statico XmlLightParser.Parse.
PS: è stato scritto per risolvere un dibattito interno: che Regex può analizzare HTML! Da allora abbiamo trovato molti usi perché è abbastanza leggero da essere inserito ovunque. Ci sono ancora modi per confondere il generatore di gerarchia DOM, ma non ho trovato alcun HTML che il parser non gestirà.
C'è un 'EsempioAttributo' che viene usato nel testo. =) –
Quando si parla di parsing HTML, non c'è paragone con la realtà. Questo è un parser C# port of the validator.nu. Questa è la stessa base di codice utilizzata dai browser basati su Gecko (ad esempio 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 altri parser HTML5 scritti 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.
Ho imparato ad amare il fatto che la risposta accettata sia un link a un articolo sul tuo blog e un paragrafo che cita _you_. +400 reputazione per la vittoria, Haha. –
best è un termine molto relativo, per la tua domanda, immagino tu stia cercando uno strumento affidabile, quindi penso che questa funzione dovrebbe essere presa in considerazione. Cercherei il supporto e la forza dell'azienda che fornisce lo strumento. È una sensazione orribile quando si tenta di contattare il supporto per qualsiasi strumento che utilizza e la risposta è, questa azienda non esiste più. Dato che HAP è gestito dalla comunità degli sviluppatori, preferirei fidarmi di lei.
C'è anche AngleSharp
AngleSharp è una libreria .NET che ti dà la possibilità di analizzare parentesi angolare basate iper-testi come HTML, SVG, MathML e. XML senza convalida è anche supportato dalla libreria. Un aspetto importante di AngleSharp è che anche i CSS possono essere analizzati. Il parser è costruito sulla specifica W3C ufficiale. Ciò produce una rappresentazione DOM HTML5 perfettamente portabile del codice sorgente specificato. Anche le funzioni correnti come querySelector o querySelectorTutte funzionano per l'attraversamento dell'albero.
- 1. Guida Html Agility Pack
- 2. Impostazioni HTML Agility Pack
- 3. C# Html Agility Pack (SelectSingleNode)
- 4. Html Agility Pack - Nuovo HtmlAttribute
- 5. perché HTML Agility Pack HtmlDocument.DocumentNode è null?
- 6. Agility Pack HTML, SelectNodes da un nodo
- 7. Posso usare Html Agility Pack per questo?
- 8. Come utilizzare HTML Agility Pack per modificare uno snippet HTML
- 9. HTML Agility Pack: selezionare i nodi dopo il nodo specifico
- 10. HTML Agility pacchetto
- 11. Sostituzione di un tag InnerText div con HTML Agility Pack
- 12. Tag striscia HTML Agility Pack NOT IN whitelist
- 13. qual è il miglior parser html per java?
- 14. Il parser HTML convalida i tag
- 15. HTML Agility pacchetto
- 16. Parser DOM HTML HTML?
- 17. Quale parser HTML è il migliore?
- 18. HTML Agility Pack: problema nella selezione di un tag di selezione HTML con i tag di opzione all'interno di
- 19. HTML Agility Pack ottiene gli attributi href di tutti gli ancore alla pagina
- 20. parser HTML per GAE
- 21. Dal download di Html Agility Pack, quale dei 9 "HtmlAgilityPack.dll" uso?
- 22. Come ottenere img/src o a/hrefs utilizzando Html Agility Pack?
- 23. Html Agility Pack SelectSingleNode che dà sempre lo stesso risultato in iterazione?
- 24. HTML Agility pacchetto trovare gli ID partendo
- 25. HTML-parser su Node.js
- 26. html parser codeigniter library?
- 27. Come creare un parser HTML?
- 28. Ottieni collegamenti in classe con il pacchetto agility html
- 29. Un parser HTML Python veloce
- 30. WebBrowser .NET - Stile FireBug Ispezione elemento HTML
La mancanza di un parser HTML è un'omissione evidente dalla libreria standard .NET. "Fai una richiesta http e analizza la risposta" è pane e burro nell'era del web, il secondo programma che le persone scrivono dopo "Ciao mondo". –
@ColonelPanic, in questi giorni con la maggior parte delle pagine Web che utilizzano jscript per ottenere i dati, è necessario più di un parser HTML. –
Vedere la recensione del dicembre 2015 http://forcewake.me/how-to-parse-html-in-dotnet/, AngleSharp viene mantenuto attivamente (https://dotnet.libhunt.com/project/anglesharp/vs/htmlagilitypack) –