Screen Scraping in PHP mit dem Simple HTML DOM Parser

Kategorien: Mashup

Mit dem PHP Simple HTML DOM Parser kann man HTML Dokumente auf einfache Art traversieren und verändern. Der Parser (Screen Scraping Tool), der in PHP5+ funktioniert, bietet mit einer an JQuery angelehnten Notation ebenfalls die Möglichkeit, aus validen und invaliden HTML Dokumenten Daten zu extrahieren. Mit einem solchen Tool können beispielsweise auf vereinfachte Art Mashups erstellt werden, die mit Daten aus vorhandenen HTML Dokumenten versorgt werden und aus diesen Daten und deren Kombination und Verarbeitung eine neue Anwendung erstellen. Konzeptionell bestehen hier Parallelen zu SOA, bei der ebenfalls vorhandene (eigenständige) Services wieder zu „hochwertigeren“ Services aggregiert werden können. Während diese Orchestrierung in einer SOA auf Serviceebene stattfindet, arbeiten Tools wie der Screen Scraper PHP Simple HTML DOM Parser auf Präsentationsebene.

Webseite des PHP Simple HTML DOM Parsers

Auf http://simplehtmldom.sourceforge.net/ findet man Infos und Links zum PHP Simple HTML DOM Parser. In der Doku findet man Infos und Code Beispiele, wie man mit dem PHP Screen Scraper HTML DOM Objekte erzeugt, HTML Elemente und Attribute findet, verändert und ausliest, den DOM Tree traversiert, wie man den Parser um eigene Funktionen erweitert, uvm.

Code Beispeile

Der folgende, von mir kommentierte Code soll einfach einen grundlegenden Eindruck von der Arbeit mit dem PHP Simple HTML DOM Parser vermitteln und beispielhaft ein paar der gebräuchlichsten Methoden des Parsers vorstellen. Eine ausführliche Einführung bietet die o.g. Doku.

// Datei mit Simple HTML DOM Parser einbinden
include_once('simple_html_dom.php');

// zu parsende Datei einbinden, DOM erzeugen
$html = file_get_html('http://www.google.de/');

// simple_html_dom::find() liefert ein neues
// simple_html_dom-Objekt, das aus
// entsprechenden Kindelementen besteht
foreach($html->find('h3') as $h3) {

  // simple_html_dom::innertext liefert 
  // den Text innerhalb eines Tags
  if($h3->innertext == 'Text einer H3 Überschrift') {
    break;
  }
}

// simple_html_dom::next_sibling() liefert
// das naechste Geschwister Element
$table = $h3->next_sibling();

Tags: