HTML-Parsing in PHP: DOMDocument, SimpleXML und cURL für Web-Scraping

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

HTML-Parsing in PHP: Vollständige Anleitung zur Datenextraktion von Webseiten



HTML-Parsing ist eine der zentralen Aufgaben der Webentwicklung, die es ermöglicht, automatisch strukturierte Daten von Webseiten zu extrahieren. PHP bietet dafür leistungsstarke integrierte Werkzeuge, darunter die Erweiterungen DOMDocument und SimpleXML sowie die Bibliothek cURL für die Arbeit mit HTTP-Anfragen. In diesem Artikel werden wir detailliert erläutern, wie man HTML in PHP parst, Best Practices, Fehlerbehandlung und Codebeispiele betrachten.



Grundlegende Werkzeuge für HTML-Parsing in PHP



Für das HTML-Parsing in PHP werden die folgenden Hauptkomponenten verwendet:



  • DOMDocument — eine integrierte Klasse für die Arbeit mit dem DOM-Baum von HTML/XML. Ermöglicht das Laden, Ändern und Extrahieren von Elementen.
  • DOMXPath — eine Erweiterung für DOMDocument, die XPath-Abfragen zur präzisen Knotensuche ermöglicht.
  • SimpleXML — eine vereinfachte Erweiterung für die Arbeit mit XML, kann aber auch für HTML verwendet werden, sofern die Struktur korrekt ist.
  • cURL — eine Bibliothek zur Ausführung von HTTP-Anfragen, die zum Abrufen des HTML-Codes entfernter Seiten erforderlich ist.


Schritt-für-Schritt-Beispiel für HTML-Parsing mit DOMDocument



Betrachten wir ein vollständiges Beispiel für das Parsen einer HTML-Seite. Angenommen, wir möchten die Artikelüberschriften (<h2>-Tags) und Links (<a>) von einer Website extrahieren.



<?php// 1. HTML-Code der Seite mit cURL abrufen$url = 'https://example.com/articles';$ch = curl_init($url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36');$html = curl_exec($ch);if (curl_errno($ch)) {    die('cURL-Fehler: ' . curl_error($ch));}curl_close($ch);

// 2. DOMDocument-Objekt erstellen und HTML laden$dom = new DOMDocument();libxml_use_internal_errors(true); // Fehler beim Parsen von ungültigem HTML unterdrücken$dom->loadHTML($html);libxml_clear_errors();

// 3. DOMXPath-Objekt für komfortable Suche erstellen$xpath = new DOMXPath($dom);

// 4. Alle h2-Überschriften extrahieren$headings = $xpath->query('//h2');echo "<h3>Artikelüberschriften:</h3>";foreach ($headings as $heading) { echo "<p>" . htmlspecialchars($heading->nodeValue) . "</p>";}

// 5. Alle Links mit der Klasse 'article-link' extrahieren$links = $xpath->query('//a[@class="article-link"]');echo "<h3>Links zu Artikeln:</h3>";foreach ($links as $link) { $href = $link->getAttribute('href'); $text = $link->nodeValue; echo "<p><a href='" . htmlspecialchars($href) . "'>" . htmlspecialchars($text) . "</a></p>";}?>


Verwendung von SimpleXML für einfache Fälle



SimpleXML eignet sich zum Parsen gut strukturierter HTML-Dokumente, kommt aber mit ungültigem HTML nicht zurecht. Beispiel für die Datenextraktion aus einer Tabelle:



<?php$html = '<table><tr><td>Zelle 1</td><td>Zelle 2</td></tr></table>';$xml = simplexml_load_string($html);if ($xml === false) {    echo "Fehler beim Laden des HTML";} else {    foreach ($xml->tr->td as $cell) {        echo "Daten: " . htmlspecialchars($cell) . "<br>";    }}?>


Fehlerbehandlung und Best Practices



Beim HTML-Parsing in PHP sind folgende Punkte zu beachten:



  • Fehlerunterdrückung: Verwenden Sie libxml_use_internal_errors(true) vor dem Laden von HTML, um Warnungen zu ungültigem Markup zu vermeiden.
  • Kodierung: Stellen Sie sicher, dass HTML in der richtigen Kodierung (UTF-8) geladen wird. Verwenden Sie bei Bedarf mb_convert_encoding().
  • User-Agent: Immer

Empfehlungen