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

零下一度
Freigeben: 2017-05-04 14:57:37
Original
7328 Leute haben es durchsucht

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

特性 例子
孤立的<解析为文本< a应当解析为< a
孤立的>解析为文本 >应当解析为>
标记属性(没有值的属性)
元素丢失结束标签

测试链接

可选结束标签元素
"body", "colgroup", "dd", "dt", "head", "html", "li", "option", "p", "tbody", "td", "tfoot", "th", "thead", "tr"

abc

123

无结束标签元素
"area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "isindex", "link", "meta" , „param“, „wbr“, „bgsound“, „spacer“, „keygen“
CDataElement <script>if ( 1<a ) warning( "< p>" );</script>
"script", "style", "textarea", "title"  
Vorformatiertes Element
 🎜><span class="font5"></pre&gt ;</span><span class="font6"></span></span></td></tr><tr>Verwenden Sie einfache Anführungszeichen für Attributwerte <td class="xl67" width="371"><span style="font-family:courier new,courier;font-size:12px;"></span></td>< <td class="xl68" width="371"><span style="font-family:courier new,courier;font-size:12px;"></span></td></tr><tr>Verwenden Sie keine Anführungszeichen für Attributwerte<td class="xl67" width="371"><span style="font-family:courier new,courier;font-size:12px;"></span></td><a href=#></span></span></td>
<td class="xl68" width="371"><span style="font-family:courier new,courier;font-size:12px;"> </span></td>
</tr>
<tr>Attributwert fehlt (aber mit Gleichheitszeichen)<td class="xl67" width="371"><span style="font-family:courier new,courier;font-size:12px;"></span></td><a href=><td class="xl68" width="371">
<span style="font-family:courier new,courier;font-size:12px;"></span> </td>
</tr>
<tr>Vor dem Attributwert steht ein Leerzeichen<td class="xl67" width="371"><span style="font-family:courier new,courier;font-size:12px;"></span></td><a href= "test.html"><td class="xl68" width="371"><span style="font-family:courier new,courier;font-size:12px;"></span></td>
</tr>
<tr>Parsen<td class="xl67" width="371">HTML<span style="font-family:courier new,courier;font-size:12px;"></span>Deklaration</td>
<td class="xl68" width="371"><span style="font-family:courier new,courier;font-size:12px;"></span></td><!DOCTYPE html></tr>
<tr> <td class="xl72" width="371"><span style="font-family:courier new,courier;font-size:12px;"> <span class="font6"><p><br>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: </p><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:html;toolbar:false;">new JumonyParser().LoadDocument( "www.php.cn/" ).Find( ".post_item a.titlelnk" )
Nach dem Login kopieren
Nach dem Login kopieren

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

-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" )
Nach dem Login kopieren

Schauen wir uns dieses Beispiel noch einmal an:

, 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>
Nach dem Login kopieren

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" )
Nach dem Login kopieren
Nach dem Login kopieren

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() );
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!