Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erklärung einer perfekten HTML-Parsing-Engine (Jumony)

Detaillierte Erklärung einer perfekten HTML-Parsing-Engine (Jumony)

零下一度
零下一度Original
2017-05-04 14:57:377291Durchsuche

Vielleicht denken viele Leute, dass der aktuelle HTML-Parser ausreicht und selbst einfache reguläre Ausdrücke bereits die Anforderungen der Bearbeitung von HTML-Dokumenten erfüllen können. Ja, die meisten HTML-Dokumente im Internet erfüllen tatsächlich die XHTML-Spezifikationen und für deren Analyse ist kein leistungsstarker Parser erforderlich. Aber ein leistungsstarker Parser ist eine Sache und ein perfekter Parser eine andere.

Jumony Core bietet zunächst eine nahezu perfekte HTML-Parsing-Engine, und ihre Parsing-Ergebnisse kommen denen des Browsers unendlich nahe. Unabhängig davon, ob es sich um Elemente ohne End-Tags, Elemente mit optionalen End-Tags, Tag-Attributen oder CSS-Selektoren und -Stile handelt, werden alle legalen und illegalen HTML-Dokumente vom Browser analysiert, und Jumony analysiert sie in das, was sie sind. Mit anderen Worten, die Ergebnisse der Jumony-Analyse sind dieselben wie die Ergebnisse der Browser-Analyse, sodass Sie sich keine Sorgen mehr darüber machen müssen, ob das HTML-Dokument erkannt werden kann. Wenn der Browser es lesen kann, kann Jumony es verstehen.

Es gibt nur einen Schritt zwischen Perfektion und Leistung, aber ein perfekter Parser ermöglicht es Ihnen, sich nie um das HTML-Quelldokument kümmern zu müssen.

Das Folgende ist eine unvollständige Liste der vom Jumony-Parser unterstützten Funktionen

Attributwert fehlt (aber mit Gleichheitszeichen)2de933bd81cf0e954926b4b4a48640c3Vor dem Attributwert steht ein Leerzeichen05797ff6bfecf7b84525904378753179Parsen8b05045a5be5764f313ed5b9168a17e6
特性 例子
孤立的7f19db43d97d2d4008bb10f655c09c49解析为文本 3499910bf9dac5ae3c52d5ede7383485>5db79b134e9f6b82c0b36e0489ee08ed应当解析为3499910bf9dac5ae3c52d5ede7383485>5db79b134e9f6b82c0b36e0489ee08ed
标记属性(没有值的属性) f396c7ee6581b8a2c1feb962c201109c
元素丢失结束标签 e388a4556c0f65e1904146cc1a846bee43091600189d2e5d073500b021ca54e8测试链接94b3e26ee717c64999d7867364b1b4a3
可选结束标签元素
"body", "colgroup", "dd", "dt", "head", "html", "li", "option", "p", "tbody", "td", "tfoot", "th", "thead", "tr"
e388a4556c0f65e1904146cc1a846beeabce388a4556c0f65e1904146cc1a846bee123
无结束标签元素
"area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "isindex", "link", "meta" , „param“, „wbr“, „bgsound“, „spacer“, „keygen“
4faf7b57895b870867b99beee44351ac
CDataElement 3f1c4e4b6b16bbbd69b2ee476dc4f83aif ( 174eb2758262aaf98a01c2e0773130c8e" );2cacc6d41bbb37262a98f745aa00fbf0
"script", "style", "textarea", "title"  
Vorformatiertes Element e03b848252eb9375d56be284e690e873 🎜>9969da5a29d8787f5186b8a06c8f1c42
HTMLDeklaration


Es kann nicht nur HTML aus Text analysieren, die API von Jumony kann auch direkt Dokumentanalysen aus dem Internet abrufen und Codierungen basierend auf HTTP-Headern automatisch identifizieren:

new JumonyParser().LoadDocument( "www.php.cn/" ).Find( ".post_item a.titlelnk" )

Und derzeit ist es das einzige von Jumony Das HTML-Parsing des Open-Source-Projekts HtmlAgilityPack wird seit langem nicht mehr aktualisiert. Nach so vielen Jahren gibt es immer noch Probleme beim Parsen der grundlegendsten ff9c23ada1bcecdd1a0fb5d5a0f18437-Elemente.

2. Unterstützung für CSS-Stileinstellungen

Das bloße Parsen von HTML bringt keinen großen Nutzen. Wie oben erwähnt, können die meisten HTML-Dokumente tatsächlich mit zweitklassiger Analyse analysiert werden sogar einfache reguläre Ausdrücke, warum brauchen wir also Jumony?

Die Antwort ist, dass eine HTML-Engine mehr ist als nur das Parsen der DOM-Struktur.

Stellen Sie sich dieses Szenario vor: Ich muss für den Anzeigestil eines Elements einen Nichtwert festlegen. Im Browser benötigen wir nur ein einfaches element.style.display = „none“, um unsere Anforderungen zu erfüllen. Jetzt haben wir das benötigte DOM über den Parser erhalten, aber müssen wir noch Strings verketten, um den Stil festzulegen?

Keine Notwendigkeit, Jumony unterstützt das Parsen von CSS-Stilen und sogar einige CSS-Stil-Abkürzungsregeln können erkannt werden. In Jumony ist das Festlegen eines Stils für ein Element so einfach wie im Browser:

element.Style( "display", "none" )

Schauen wir uns dieses Beispiel noch einmal an: 7cd3a19f7494deb2fc114a1203d0dae994b3e26ee717c64999d7867364b1b4a3, was passiert, wenn wir padding-left: 0px für dieses Element festlegen?

In Jumony wird das Ergebnis wie folgt aussehen:

<p style="padding-left: 0px; padding-right: 5px; padding-top:5px; padding-bottom: 5px"></p>

Sehen Sie, das Füllattribut wird auf magische Weise automatisch erweitert.

3. CSS 3-Selektorunterstützung

CSS-Selektor ist eine beliebte Abfragesprache in der HTML-Welt. Er ist einfach und leistungsstark und wird von vielen Browsern unterstützt. Jumony unterstützt auch fast vollständige CSS3-Selektoren (mit Ausnahme von Laufzeit-Pseudoklassen und Pseudoobjekten). Mit Hilfe von Selektoren können wir in HTML leicht die Objekte finden, die uns interessieren. Schnappen Sie sich zum Beispiel alle Artikeltitel auf der Blog-Homepage:

new JumonyParser().LoadDocument( "www.php.cn/" ).Find( ".post_item a.titlelnk" )

Erfassen, analysieren, auswählen, alles auf einmal. Mit nur einem einfachen Code können wir die von uns erfassten Daten auf der Konsole ausgeben:

 foreach( var title = new JumonyParser().LoadDocument( "www.php.cn/" ).Find( ".post_item a.titlelnk" ) )
  Console.WriteLine( title.InnerText() );

Liste der von Jumony unterstützten CSS3-Selektoren:

Auswahl Beschreibung
* Alle Elemente auswählen
p a Nachkommenelemente auswählen
p>a Untergeordnetes Element auswählen
p+a Angrenzende Elemente auswählen
p~a Nachfolgeelement auswählen
[attr] Attribut existiertAuswählen
[attr=value] Attributwert stimmt genau überein
[attr~ =value] Attributwert ungefähre Übereinstimmung
[attr^=value] Attributwert beginnt mit Übereinstimmung
[attr*=value] Der Attributwert enthält Matching
[attr$=value] Der Attributwert endet mit Matching
[attr!=value] Attributwert negative Übereinstimmung
:nicht Negative Pseudoklasse
:only-child Nur ​​untergeordnete Element-Pseudoklasse
: nur vom Typ Nur ​​Typ-Pseudoklasse
:empty Leere Element-Pseudoklasse
:nth-child Strukturierte Pseudoklasse
:nth-last-child Strukturierte Pseudoklasse
:nth-of-type Strukturierte Pseudoklasse
:nth-last-of-type Strukturierte Pseudoklasse
:first-child Strukturierte Pseudoklasse
:last-child Strukturierte Pseudoklasse
: erster Typ Strukturierte Pseudoklasse
:last-of-type Strukturierte Pseudoklasse


4. Leistungsstarke Skalierbarkeit

In Jumony Core 3 bietet es Benutzern maximale Skalierbarkeit. Implementieren Sie Ihren eigenen Parser, übertragen Sie andere DOM-Modelle auf die Jumony-API, erfinden Sie Ihre eigene CSS-Selektor-Pseudoklasse oder ändern Sie sogar Ihre eigene API, z. B. den jQuery-Stil.

Jumony Core verfügt über viele abgeleitete Projekte, z. B. das Crawlen von Websites, das Bereitstellen von APIs im jQuery-Stil, das Entwickeln von Websites, das Erstellen von MHT-Dateien, das Hinzufügen von CSS-Selektorunterstützung für HAP-Analyseergebnisse usw. Diese Projekte erfordern alle die Leistungsfähigkeit Dank der Skalierbarkeit von Jumony Core kann es leistungsstarke Funktionen ausüben.

[Verwandte Empfehlungen]

1. Kostenloses HTML-Online-Video-Tutorial

2. HTML-Entwicklungshandbuch

3. php.cn Original-HTML5-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung einer perfekten HTML-Parsing-Engine (Jumony). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn