Mit PHP Webseiten scrapen

Webseiten scrapen und Daten sammeln

Ich möchte euch heute an einem einfachen Beispiel zeigen, wie ihr ganz einfach mit PHP Bordmitteln Webseiten scrapen und so interessante Daten sammeln könnt.

Szenario

Ich benötige eine Liste aller für Touristen interessanten Städte eines Landes. Gut, doch wo bekomme ich diese Daten her?

Datenbeschaffung

Eine Möglichkeit habe ich in dem Tutorial Wikipedia über DBpedia mit Sparql und PHP abfragen bereits vorgestellt. Das Problem hierbei ist jedoch, dass ich mir überlegen muss, welche Merkmale eine für Touristen interessante Stadt überhaupt kennzeichnen und wie ich diese dann abfragen kann. Das ist mir gerade zu aufwändig.

Keep it simple. Genau, das machen wir jetzt: Wenn Touristen eine Stadt besuchen, müssen sie ja auch irgendwo übernachten. Dazu werden sie wohl ein Hotel, eine Ferienwohnung oder ein Ferienhaus wählen. Genau diese Tatsache nutzen wir aus.

Wir besuchen einfach mal eine Webseite auf der Menschen Ferienwohnungen buchen können und schauen, ob wir nicht dort die benötigten Daten finden.

Dazu suchen wir einfach nach dem Term „Ferienwohnung“ und wählen ein Ergebnis aus. Dann prüfen wir, ob die benötigten Daten in irgendeiner Form abgefragt werden können. Ich habe dazu einfach mal Firebug angeschmissen. Hier das Ergebnis:

Webseite mit Firebug analysieren
Webseite mit Firebug analysieren

Cool, wenn ich die Suche ausführe, werden Daten im Hintergrund per AJAX-Request nachgeladen. Diese interne Schnittstelle kann ich auch direkt ansprechen. In diesem Fall erhalte ich neben den eigentlichen Daten auch noch zusätzlich etwas Markup zurück, aber darum sorgen wir uns später noch.

Wir haben zu diesem Zeitpunkt schonmal eine brauchbare Datenquelle gefunden. Nun kümmern wir uns darum die Daten mit PHP abzufragen.

Daten abfragen

cURL

Um mit PHP URLs aufzufufen und Daten abzufragen können wir cURL verwenden. Wichtig ist hierbei, dass libcurl in PHP auch aktiviert ist. In einem Skript kann man dies wie folgt prüfen:

Falls cURL aktiviert ist, gibt die Funktion extension_loaded den Wert true zurück.

Schnittstellendetails

Yay, cURL ist aktiviert und es kann weitergehen. Jetzt müssen wir nur noch herausfinden, wie wir die vorhin entdeckte, interne Schnittstelle ansprechen müssen. Auch hier hilft uns Firebug wieder weiter:

Firebug Post Details
Firebug Post Details

Wir sehen mit Hilfe von Firebug die URL der Schnittstelle, die Abfragemethode und wir erfahren, welche Parameter wir mitgeben können bzw. müssen.

Bei den Parametern fällt auf, dass das Land für welches wir die Orte bzw. Städte abfragen möchten, unter Verwendung eines zweistelligen ISO Codes mitgegeben wird. Das „DE“ steht demnach für „Deutschland„.

Wir haben nun alle Informationen zusammen, um die Schnittstelle abzufragen. Los geht’s!

Code

Daten holen

Mit der folgenden Funktion können wir die Schnittstelle ansprechen:

Gut, nun haben wir eine Funktion, der wir das Land als Parameter mitgeben können und die uns als Ergebnis alle zu diesem Land hinterlegten Orte zurückgibt.

Daten parsen

Wie weiter oben schonmal erwähnt, befindet sich in den Daten aber noch zusätzliches Markup. Dieses wird von uns jedoch nicht benötigt. Daher parsen wir die Daten mit Hilfe von DOMDocument und DOMXpath, um nur die benötigten Informationen zu erhalten.

Die folgende Funktion erledigt diese Aufgabe für uns:

Wenn wir nun beide Funktionen kombinieren, erhalten wir die gewünschten Daten zurück:

Und so sieht die Ausgabe aus:

Schlussbemerkung

Wie unschwer zu erkennen ist, ist es gar nicht so schwer an die benötigten Daten zu kommen. Das Scrapen von Webseiten läuft eigentlich immer recht ähnlich ab. Die eigentliche Arbeit besteht darin gute Datenquellen zu finden.

Eine andere Sache die es zu berücksichtigen gilt ist der rechtliche Aspekt des Scrapens von Webseiten. Dies kann vom Webseitenbetreiber untersagt sein. Derart erhobene Daten dürfen dann von euch nicht verwendet werden. Die in diesem Tutorial gewonnenen Daten wurden von mir ausschließlich zu Testzwecken erhoben und werden von mir auch nicht weiter verwendet. Ich wollte nur zeigen, wie einfach es ist mit PHP Webseiten zu scrapen und Daten abzufragen.

Als Webseitenbetreiber sollte man sich Gedanken über geeignete Sicherheitsmechanismen machen, wenn man ein solches Vorgehen verhindern möchte.

Bildquelle: Flickr

Veröffentlicht von

Michael

Webentwickler & SEO

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *