Parsen von HTML in PHP

Olorunfemi Akinlua 18 August 2022
  1. Verwendung von DomDocument() zum Parsen von HTML in PHP
  2. Verwenden Sie simplehtmldom zum Parsen von HTML in PHP
  3. Verwendung von DiDOM zum Parsen von HTML in PHP
Parsen von HTML in PHP

Durch das Analysieren von HTML können wir seinen Inhalt oder sein Markup in eine Zeichenfolge konvertieren, was die Analyse oder Erstellung einer dynamischen HTML-Datei erleichtert. Genauer gesagt, es nimmt den rohen HTML-Code, liest ihn, generiert eine DOM-Baumobjektstruktur von den Absätzen bis zu den Überschriften und ermöglicht es uns, die wichtigen oder benötigten Informationen zu extrahieren.

Wir parsen HTML-Dateien mit integrierten Bibliotheken und manchmal Bibliotheken von Drittanbietern für Web Scraping oder Inhaltsanalyse in PHP. Je nach Methode besteht das Ziel darin, den Hauptteil des HTML-Dokuments in einen String umzuwandeln, um jedes HTML-Tag zu extrahieren.

In diesem Artikel werden die eingebaute Klasse DomDocument() und zwei Drittanbieter-Bibliotheken simplehtmldom und DiDOM besprochen.

Verwendung von DomDocument() zum Parsen von HTML in PHP

Ob eine lokale HTML-Datei oder eine Online-Webseite, die Klassen DOMDocument() und DOMXpath() helfen dabei, eine HTML-Datei zu parsen und ihr Element als Strings oder in unserem Beispiel als Array zu speichern.

Lassen Sie uns diese HTML-Datei mit den Funktionen parsen und die Überschriften, Unterüberschriften und Absätze zurückgeben.

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
    </head>
    <body>
        <h2 class="main">Welcome to the Abode of PHP</h2>
        <p class="special">
            PHP has been the saving grace of the internet from its inception, it
            runs over 70% of website on the internet
        </p>
        <h3>Understanding PHP</h3>
        <p>
            Lorem ipsum dolor, sit amet consectetur adipisicing elit. Eum minus
            eos cupiditate earum et optio culpa, eligendi facilis laborum
            dolore.
        </p>
        <h3>Using PHP</h3>
        <p>
            Lorem ipsum dolor, sit amet consectetur adipisicing elit. Eum minus
            eos cupiditate earum et optio culpa, eligendi facilis laborum
            dolore.
        </p>
        <h3>Install PHP</h3>
        <p>
            Lorem ipsum dolor, sit amet consectetur adipisicing elit. Eum minus
            eos cupiditate earum et optio culpa, eligendi facilis laborum
            dolore.
        </p>
        <h3>Configure PHP</h3>
        <p>
            Lorem ipsum dolor, sit amet consectetur adipisicing elit. Eum minus
            eos cupiditate earum et optio culpa, eligendi facilis laborum
            dolore.
        </p>

        <h2 class="main">Welcome to the Abode of JS</h2>
        <p class="special">
            PHP has been the saving grace of the internet from its inception, it
            runs over 70% of website on the internet
        </p>
        <h3>Understanding JS</h3>
        <p>
            Lorem ipsum dolor, sit amet consectetur adipisicing elit. Eum minus
            eos cupiditate earum et optio culpa, eligendi facilis laborum
            dolore.
        </p>
    </body>
</html>

PHP-Code:

<?php

$html = 'index.html';

function getRootElement($element, $html)
{
    $dom = new DomDocument();

    $html = file_get_contents($html);

    $dom->loadHTML($html);

    $dom->preserveWhiteSpace = false;

    $content = $dom->getElementsByTagName($element);

    foreach ($content as $each) {
        echo $each->nodeValue;
        echo "\n";
    }
}

echo "The H2 contents are:\n";
getRootElement("h2", $html);
echo "\n";

echo "The H3 contents are:\n";
getRootElement("h3", $html);
echo "\n";

echo "The Paragraph contents include\n";
getRootElement("p", $html);
echo "\n";

Die Ausgabe des Codeschnipsels ist:

The H2 contents are:
Welcome to the Abode of PHP
Welcome to the Abode of JS

The H3 contents are:
Understanding PHP
Using PHP
Install PHP
Configure PHP
Understanding JS

The Paragraph contents include

PHP has been the saving grace of the internet from its inception, it
runs over 70% of the website on the internet

...

Verwenden Sie simplehtmldom zum Parsen von HTML in PHP

Für zusätzliche Funktionalitäten wie CSS-Stilselektoren können Sie eine Bibliothek eines Drittanbieters namens Simple HTML DOM Parser verwenden, die ein einfacher und schneller PHP-Parser ist. Sie können es herunterladen und die einzelne PHP-Datei hinzufügen oder benötigen.

Mit diesem Prozess können Sie alle gewünschten Elemente problemlos analysieren. Unter Verwendung des gleichen Codeausschnitts wie im vorherigen Abschnitt parsen wir den HTML-Code mit einer Funktion namens str_get_html(), die den HTML-Code verarbeitet und die Methode find() verwendet, um nach einem bestimmten HTML-Element oder Tag zu suchen.

Um ein Element mit einer speziellen Klasse zu finden, müssen wir den Selektor Klasse auf jedes Element Suchen anwenden. Um den eigentlichen Text zu finden, müssen wir außerdem den Selektor innertext auf dem Element verwenden, den wir dann im Array speichern.

Unter Verwendung der gleichen HTML-Datei wie im letzten Abschnitt, lassen Sie uns diese mit Hilfe von simplehtmldom analysieren.

<?php

require_once('simple_html_dom.php');

function getByClass($element, $class)
{
    $content= [];

    $html = 'index.html';

    $html_string = file_get_contents($html);

    $html = str_get_html($html_string);

    foreach ($html->find($element) as $element) {
        if ($element->class === $class) {
            array_push($heading, $element->innertext);
        }
    }

    print_r($content);
}

getByClass("h2", "main");
getByClass("p", "special");

Die Ausgabe des Codeschnipsels ist:

Array
(
    [0] => Welcome to the Abode of PHP
    [1] => Welcome to the Abode of JS
)
Array
(
    [0] =>               PHP has been the saving grace of the internet from its inception, it              runs over 70% of the website on the internet
    [1] =>               PHP has been the saving grace of the internet from its inception, it              runs over 70% of the website on the internet
)

Verwendung von DiDOM zum Parsen von HTML in PHP

Für diese PHP-Bibliothek von Drittanbietern müssen wir einen PHP-Abhängigkeitsmanager namens Composer verwenden, mit dem wir alle unsere PHP-Bibliotheken und -Abhängigkeiten verwalten können. Die DiDOM-Bibliothek ist über GitHub verfügbar und bietet mehr Geschwindigkeit und Speicherverwaltung als andere Bibliotheken.

Wenn Sie es nicht haben, können Sie Composer hier installieren. Der folgende Befehl fügt Ihrem Projekt jedoch die Bibliothek DiDOM hinzu, falls Sie sie haben.

composer require imangazaliev/didom

Danach können Sie den unten stehenden Code, der ähnlich wie simplehtmldom aufgebaut ist, mit der Methode find() verwenden. Es gibt ein text(), das die Kontexte der HTML-Elemente in Strings umwandelt, die wir in unserem Code verwenden können.

Die Funktion has() ermöglicht Ihnen zu prüfen, ob Sie ein Element oder eine Klasse in Ihrem HTML-String haben und gibt einen booleschen Wert zurück.

<?php

use DiDom\Document;

require_once('vendor/autoload.php');

$html = 'index.html';

$document = new Document('index.html', true);

echo "H3 Element\n";

if ($document->has('h3')) {
    $elements = $document->find('h3');
    foreach ($elements as $element) {
        echo $element->text();
        echo "\n";
    }
}

echo "\nElement with the Class 'main'\n";

if ($document->has('.main')) {
    $elements = $document->find('.main');
    foreach ($elements as $element) {
        echo $element->text();
        echo "\n";
    }
}

Die Ausgabe des Codeschnipsels ist:

H3 Element
Understanding PHP
Using PHP
Install PHP
Configure PHP
Understanding JS

Element with the Class 'main'
Welcome to the Abode of PHP
Welcome to the Abode of JS
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

Verwandter Artikel - PHP HTML