Frage

Html Agility Pack- wurde als Antwort auf eine Frage Stackoverflow vor einiger Zeit, es Option immer noch die beste ist? Was sollten andere Optionen in Betracht gezogen werden? Gibt es etwas leichter?

War es hilfreich?

Lösung

Es gibt ein Tabelle mit den Vergleich.

Zusammenfassung:

  

CsQuery Leistung mit Html Agility Pack and Fizzler ich zusammen   einige Leistungstests CsQuery auf die nur praktisch vergleichen   Alternative, die ich kenne (Fizzler, eine HtmlAgilityPack Erweiterung). ich   getestet gegen drei verschiedene Dokumente:

     
      
  • Das brutzeln Testdokument (etwa 11 k)
  •   
  • Der Wikipedia-Eintrag für "Käse" (ca. 170 k)
  •   
  • Die einseitige HTML 5-Spezifikation (ca. 6 MB)
  •   
     

Die Gesamtergebnisse sind:

     
      
  • HAP ist schneller die Zeichenfolge von HTML-Code in ein Objektmodell zu laden. Dies macht Sinn, da ich glaube nicht, dass Fizzler einen Index baut (oder   vielleicht baut es nur eine relativ einfache). CsQuery nimmt   überall von 1.1 länger 2.6x das Dokument zu laden. Mehr zu diesem Thema   unten.
  •   
  • CsQuery ist für fast alles schneller anderes. Manchmal durch Faktoren von 10.000 oder mehr. Die einzige Ausnahme ist der „*“ Selektor, wo   manchmal ist Fizzler schneller. Bei allen Tests, die Ergebnisse sind völlig   aufgezählt; Dieser Fall führt nur in jedem Knoten im Baum Wesen   aufgezählt. So dies testen nicht die Auswahl Motor so viel wie die   Datenstruktur.
  •   
  • CsQuery hat einen besseren Job zu den gleichen Ergebnissen wie ein Browser zurück. Jeder des Wählers hier wurde gegen das gleiche Dokument überprüft in   Chrome mit jQuery 1.7.2, und die Zahlen entsprechen denen zurück durch   CsQuery. Dies ist wahrscheinlich, weil HtmlAgilityPack Griffe optional   (Fehlt) Tags anders. Zusätzlich wird die n-ten Kind nicht umgesetzt   vollständig in Fizzler -. es unterstützt nur einfache Werte (nicht Formeln)
  •   

Andere Tipps

Wenn es um die HTML-Analyse geht, gibt es keinen Vergleich zu der realen Sache. Dies ist ein C # Port des validator.nu Parser. Dies ist die gleiche Code-Basis verwendet, von Gecko-basierten Browsern (z Firefox). Es Repo sieht ein wenig staubig, aber nicht täuschen lassen .. der Hafen ist hervorragend. Es ist einfach übersehen. I integriert es in CsQuery vor etwa einem Monat. Es geht alle CsQuery Tests (die die meisten der jQuery und Sizzle Tests portiert C # include).

Ich bin nicht bekannt, dass andere HTML5-Parser in C # geschrieben, oder sogar irgendwelchen, die entfernt nahe kommen, einen guten Job in Bezug auf fehlende, optional, und ein ungültiges Tag Handhabung zu tun. Das gilt nicht nur einen guten Job tun, obwohl -. Es ist standardkonform

Die Repo ich oben verlinkt ist der ursprünglich Port, es enthält eine Basis Wrapper, der einen XML-Knoten Baum produziert. CsQuery Versionen 1.3 und höher Verwendung dieser Parser.

Es gibt auch AngleSharp

  

AngleSharp ist eine .NET-Bibliothek, die Ihnen die Möglichkeit, Winkel basiert Hypertexte wie HTML, SVG und MathML zu analysieren gibt. XML ohne Validierung wird auch von der Bibliothek unterstützt. Ein wichtiger Aspekt der AngleSharp ist, dass CSS kann auch analysiert werden. Der Parser basiert auf der offiziellen W3C-Spezifikation gebaut. Dies erzeugt eine perfekt portable HTML5 DOM-Darstellung des Quellcodes gegeben. Auch aktuelle Features wie querySelector oder querySelectorAll arbeiten für Baumdurchlauf.

  

Html Agility-Pack wurde vor einiger Zeit als Antwort auf eine Frage Stackoverflow gegeben

Das Html Agility-Pack immer noch eine hervorragende Lösung ist HTML für das Parsen.

  

ist es immer noch die am besten

Die Besten? gut, dass alles hängt von der Aufgabe in der Hand, aber im Allgemeinen denke ich so. Es gibt Gelegenheiten, bei denen es kurz fällt der ideal ist, aber in der Regel wird es eine große Arbeit tun.

  

Gibt es etwas leichter?

Sie können dies versuchen: http://csharptest.net/browse/src/Library/ html / Es ist nichts mehr als eine Hand voll von Quelldateien, die HTML / XML über Regex auseinander nehmen. Es unterstützt einen leichten DOM und XPath, aber sonst nicht viel. ( Hilfe Inhalt )

[Beispiel]

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);
}

Alternativ können Sie den Parser direkt verwenden, anstatt einen DOM-Baum zu bauen. Nur Umsetzung der IXmlLightReader Schnittstelle, und rufen Sie die statische XmlLightParser.Parse Methode.

PS: Es steht geschrieben wurde eine interne Debatte zu lösen: die Regex können Parse-HTML! Seitdem haben wir tatsächlich viele Einsatzmöglichkeiten für sie gefunden, da es leicht genug ist überall einbetten. Es gibt immer noch Möglichkeiten, um die DOM-Hierarchie Builder zu verwirren, aber ich habe keine HTML-Parser behandelt wurde nicht gefunden.

Ich habe das vorher benutzt, ziemlich einfach zu fließen api. Ich denke, in C # /. Net Domain, ist dies eine sehr gute Wahl.

Es ist eine Java-Bibliothek hier . Sieht ziemlich gut, obwohl ich nicht persönliche Erfahrung haben.

am besten ist ein sehr relativer Begriff, für Ihre Frage, ich denke, Sie für ein zuverlässiges Werkzeug suchen, so dass ich denke, diese Funktion in Betracht gezogen werden sollte. Ich würde aussehen für die Unterstützung und Stärke des Unternehmens, das das Werkzeug zur Verfügung stellt. Es ist ein schreckliches Gefühl, wenn Sie versuchen, die Unterstützung für jedes Werkzeug zu kontaktieren, verwendet und die Antwort ist, dieses Unternehmen nicht mehr existiert. Wie HAP von der Entwickler-Community gepflegt wird, würde ich lieber ihnen vertrauen.

Wenn Sie bereit sind, außerhalb der .NET Welt zu suchen, die Python SO Gemeinschaft empfiehlt Schöne Suppe , zB HTML-Parser-in-Python .

  

Schöne Suppe ist ein Python-HTML / XML-Parser für die schnellen Turnaround-Projekte wie Screen-Scraping.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top