Download-Adresse: https://github.com/samacs/simple_html_dom
Der Parser hilft uns nicht nur bei der Überprüfung von HTML-Dokumenten; er kann auch nicht konforme W3C-Dokumente analysieren Standards-HTML-Dokument. Es verwendet einen jQuery-ähnlichen Elementselektor, um Elemente anhand ihrer ID, Klasse, Tag usw. zu finden und zu lokalisieren. Außerdem bietet es die Funktionen zum Hinzufügen, Löschen und Ändern des Dokumentbaums. Natürlich ist ein so leistungsstarker HTML-Dom-Parser nicht perfekt; Sie müssen während der Verwendung sehr vorsichtig mit dem Speicherverbrauch sein. Aber keine Sorge; in diesem Artikel erkläre ich Ihnen am Ende, wie Sie vermeiden, zu viel Speicher zu verbrauchen.
Beginne mit
Nach dem Hochladen einer Klassendatei gibt es drei Möglichkeiten, diese Klasse aufzurufen:
HTML-Dokument aus URL laden
HTML aus String laden Dokument
HTML-Dokument aus Datei laden
.Der Code lautet wie folgt:
< ;? php
// Eine neue Dom-Instanz erstellen
$html = new simple_html_dom();
// Von URL laden
$html->load_file('http://www.jb51 .net ');
//Aus String laden
$html->load('
Wenn Sie laden Um ein HTML-Dokument aus einer Zeichenfolge zu erstellen, müssen Sie es zunächst aus dem Internet herunterladen. Es wird empfohlen, cURL zu verwenden, um HTML-Dokumente abzurufen und in das DOM zu laden.
HTML-Elemente suchen
Sie können die Suchfunktion verwenden, um Elemente im HTML-Dokument zu finden. Das zurückgegebene Ergebnis ist ein Array mit Objekten. Wir verwenden die Funktionen in der HTML-DOM-Parsing-Klasse, um auf diese Objekte zuzugreifen. Hier einige Beispiele:
.Der Code lautet wie folgt:
//Suchen Sie das Hyperlink-Element im HTML-Dokument
$a = $html->find('a');
//Suchen Sie das ( N) Hyperlinks, wenn nicht gefunden, wird ein leeres Array zurückgegeben.
$a = $html->find('a', 0);
// Finde das div-Element mit der ID von main
$ main = $html->find('div[id=main]',0);
// Alle div-Elemente finden, die das id-Attribut enthalten
$divs = $html->find( 'div [id]');
//Alle Elemente finden, die das id-Attribut enthalten
$divs = $html->find('[id]');
?>
Sie können auch einen jQuery-ähnlichen Selektor verwenden, um positionierte Elemente zu finden:
.Der Code lautet wie folgt:
// Elemente mit id='#container' finden
$ret = $html->find('#container');
/ / Finde alle class= Elemente von foo
$ret = $html->find('.foo');
// Finde mehrere HTML-Tags
$ret = $html->find(' a, img' );
// Sie können es auch so verwenden
$ret = $html->find('a[title], img[title]');
?>
Der Parser unterstützt die Suche nach Unterelementen
.Der Code lautet wie folgt:
php
//Alle li-Elemente in der ul-Liste finden
$ret = $html->find('ul li');
//Finde die li-Elemente mit angegebener Klasse=ausgewählt in der ul-Liste
$ret = $html->find('ul li.selected');
?>
Wenn Sie der Meinung sind, dass die Verwendung schwierig ist, können Sie einfach die integrierte Funktion verwenden. Das übergeordnete Element, das untergeordnete Element und das angrenzende Element des positionierten Elements
. Der Code lautet wie folgt:
// Gibt das übergeordnete Element zurück
$e->parent;
// Gibt das Array von zurück untergeordnete Elemente
$e->children;
// Gibt das angegebene untergeordnete Element nach Indexnummer zurück
$e->children(0);
// Gibt die erste Ressourcengeschwindigkeit zurück
$e->first_child ();
// Das letzte untergeordnete Element zurückgeben
$e ->last _child ();
// Das vorherige angrenzende Element zurückgeben
$e-> ;prev_sibling ();
//Gib das nächste angrenzende Element zurück
$e-> next_sibling ();
?>
Elementattributoperationen
Verwenden Sie einfache reguläre Ausdrücke, um Attributselektoren zu bedienen.
[attribute] – wählt HTML-Elemente aus, die ein bestimmtes Attribut enthalten
[attribute=value] – wählt alle HTML-Elemente mit dem angegebenen Wertattribut
aus [Attribut!=Wert] – Wählen Sie alle HTML-Elemente mit anderen Attributen als dem angegebenen Wert aus.
[Attribut^=Wert] – Wählen Sie alle HTML-Elemente mit Attributen aus, die mit dem angegebenen Wert beginnen
[attribute$=value] Wählt alle HTML-Elemente aus
[attribute*=value] – Wählt alle HTML-Elemente aus
Elementattribute aufrufen in der Parser
Elementattribute im DOM sind auch Objekte:
.Der Code lautet wie folgt:
// In diesem Beispiel wird der Ankerlinkwert von $a der $link-Variablen zugewiesen
$link = $a->href;
? > $link = $html->find('a',0)->href;
?
Jedes Objekt hat 4 grundlegende Objektattribute:
tag – gibt den HTML-Tag-Namen zurück
innertext – gibt innerHTML zurück
Outertext – gibt OuterHTML zurück
Plaintext – gibt den Text im HTML-Tag zurück
Element im Parser bearbeiten
The Die Verwendung der Bearbeitungselementattribute ähnelt dem Aufruf:
.Der Code lautet wie folgt:
< ?php
//Weisen Sie dem Ankerlink von $a einen neuen Wert zu
$a->href = 'http://www.jb51.net';
// Löschen Sie den Ankerlink
$ a->href = null;
//Erkennen, ob ein Ankerlink vorhanden ist
if(isset($a->href)) {
//Code
}
?>
Es gibt keine spezielle Methode zum Hinzufügen oder Löschen von Elementen im Parser, aber Sie können sie anders verwenden:
. Der Code lautet wie folgt:
// Kapselungselement
$e->outertext = '
Das Speichern des geänderten HTML-DOM-Dokuments ist ebenfalls sehr einfach:
. Der Code lautet wie folgt:
$doc = $html;
// Ausgabe
echo $doc;
?>
Wie vermeide ich, dass der Parser zu viel Speicher verbraucht
Am Anfang dieses Artikels erwähnte der Autor das Problem des Simple HTML DOM Parser verbraucht zu viel Speicher. Wenn das PHP-Skript zu viel Speicher beansprucht, führt dies dazu, dass die Website nicht mehr reagiert und eine Reihe schwerwiegender Probleme auftritt. Die Lösung ist ebenfalls sehr einfach. Denken Sie daran, dieses Objekt zu bereinigen, nachdem der Parser das HTML-Dokument geladen und verwendet hat. Nehmen Sie das Problem natürlich nicht zu ernst. Wenn nur 2 oder 3 Dokumente eingelegt sind, macht die Reinigung oder Nichtreinigung keinen großen Unterschied. Wenn Sie 5, 10 oder mehr Dokumente laden, liegt es absolut in Ihrer Verantwortung, den Speicher nach der Verwendung eines ^_^
zu löschen.Der Code lautet wie folgt:
$html->clear();
?>
Das Obige stellt die PHP-Parsing-HTML-Klassenbibliothek simple_html_dom vor, einschließlich des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.