Datenparsing und Scraping mit PHP: Vom Einfachen zum Professionellen

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

Einleitung: Warum PHP das ideale Werkzeug für Parsing ist

\n\n

Wenn wir über das Parsen von Websites sprechen, denken viele sofort an Python mit seinem BeautifulSoup oder Scrapy. Aber seien wir ehrlich: PHP lebt auf jedem zweiten Server, und wenn Ihr Projekt bereits auf PHP basiert, ist es einfach nicht sinnvoll, für eine einzige Parsing-Aufgabe einen ganzen Python-Stack mitzuschleppen. PHP meistert die Datensammlung hervorragend, besonders wenn Sie schnell HTML oder JSON verarbeiten, über eine API gehen oder Inhalte von einem Dutzend Seiten abrufen müssen.

\n\n

Auf der Website pythonlib.ru sprechen wir normalerweise über Python, aber heute machen wir eine Ausnahme. Denn PHP ist nicht nur eine Sprache für „Visitenkarten-Websites“. Es ist ein leistungsstarkes Werkzeug für Web Scraping, das mit cURL, DOMDocument, XPath arbeiten und sogar das Browserverhalten imitieren kann. In diesem Artikel werden wir anhand realer Beispiele analysieren, wie man Websites mit PHP parst, Blockaden vermeidet und dynamische Inhalte verarbeitet.

\n\n

Wenn Sie jemals automatisch Preise von Wettbewerbern, Nachrichten oder Kontaktdaten sammeln wollten, sind Sie hier genau richtig. Los geht's!

\n\n

Parsing und Scraping: Was ist der Unterschied?

\n\n

Bevor wir Code schreiben, klären wir die Begriffe. Datenparsing mit PHP ist der Prozess der Extraktion strukturierter Informationen aus HTML, XML oder JSON. Daten-Scraping mit PHP ist ein breiterer Begriff, der das Herunterladen der Seite, das Umgehen von Schutzmaßnahmen und das Extrahieren von Daten umfasst. Einfach ausgedrückt: Parsing ist „Lesen“, Scraping ist „Gewinnen“.

\n\n

In PHP benötigen wir für das Scraping zwei Hauptwerkzeuge:

\n
    \n
  • cURL – zum Senden von HTTP-Anfragen und Empfangen von Antworten vom Server
  • \n
  • DOMDocument oder SimpleXML – zum Parsen des empfangenen HTML/XML
  • \n
\n\n

Zusätzlich können Bibliotheken verwendet werden (dazu später mehr), aber für den Anfang reichen die integrierten Funktionen aus.

\n\n

Installation und Vorbereitung der Umgebung

\n\n

Für die Arbeit benötigen Sie PHP Version 7.4 oder höher mit den Erweiterungen curl und dom. Überprüfen Sie deren Verfügbarkeit wie folgt:

\n\n
php -m | grep -E "curl|dom"
\n\n

Wenn die Ausgabe leer ist, installieren Sie sie über den Paketmanager:

\n\n
sudo apt install php-curl php-xml
\n\n

Alles ist bereit. Jetzt erstellen wir unser erstes Skript zum Parsen einer Website.

\n\n

Beispiel 1: Einfaches Parsing mit cURL und DOMDocument

\n\n

Angenommen, wir möchten die Artikelüberschriften eines Blogs sammeln. Schreiben wir einen einfachen, aber funktionierenden Code:

\n\n
<?php\n// URL zum Parsen\n$url = 'https://example-blog.com';\n\n// cURL initialisieren\n$ch = curl_init($url);\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);\ncurl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36');\n\n$html = curl_exec($ch);\ncurl_close($ch);\n\n// DOMDocument erstellen und HTML laden\n$dom = new DOMDocument();\nlibxml_use_internal_errors(true); // HTML-Parsing-Fehler ignorieren\n$dom->loadHTML($html);\nlibxml_clear_errors();\n\n// XPath verwenden, um h2-Überschriften zu finden\n$xpath = new DOMXPath($dom);\n$titles = $xpath->query('//h2');\n\nforeach ($titles as $title) {\n    echo $title->nodeValue . "\\n";\n}\n?>
\n\n

Beachten Sie: Wir haben einen User-Agent gesetzt – das ist ein minimaler Schutz vor Blockaden. Ohne diesen geben Websites oft einen 403-Fehler zurück. Außerdem verwenden wir CURLOPT_FOLLOWLOCATION für die automatische Weiterleitung bei Redirects.

\n\n

Beispiel 2: Arbeiten mit Formularen und POST-Anfragen

\n\n

Oft sind Daten hinter einem Suchformular oder einer Anmeldung verborgen. Parsing mit PHP ermöglicht die Emulation des Absendens eines Formulars:

\n\n
<?php\n$url = 'https://example.com/search';\n$postData = http_build_query([\n    'query' => 'PHP scraping',\n    'submit' => 'Search'\n]);\n\n$ch = curl_init($url);\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($ch, CURLOPT_POST, true);\ncurl_setopt($ch, CURLOPT_POSTFIELDS,                

Blogs

Buchempfehlungen