Wir basteln uns einen Webcrawler – Teil 2

Nachdem Ihr nach der Anleitung aus Teil 1 euer System soweit vorbereitet habt, kann es nun mit dem 2. Teil weitergehen.
Den Kurs auf Schattenbaum habt Ihr abgelegt, oder seid bereits so fit in PHP, dass dies nicht notwendig war.
Ein paar PHP Befehle die beim Crawler evtl. zusätzlich noch benötigt werden.

PHP Basics die wir noch benötigen

explode – splittet einen String an einem bestimmten Zeichen und speichert das Ergebnis in einem Array.
print_r – gibt den kompletten Inhalt eines Arrays zurück.
substr – Zum ausschneiden eines bestimmten Bereichs eines Strings, Startposition + Länge, etc…
strpos – Bestimmen einer bestimmten Position eines Vorkommnis in einem String.
preg_match – Regular Expression, macht das herausschneiden aus Strings einfacher, als das Splitten nach Ereignissen und Einsatz nach Längen.
fsockopen – Wir werden die Verbindung von Hand aufbauen, um den Sinn hinter einer Socketverbindung besser zu verstehen.
file_get_contents – Laden einer Ressource – auch aus dem www möglich, werden wir aber in diesem Tutorial nicht nutzen.
Benutzerdefinierte Funktionen – um Ereignisse die mehrfach vorkommen einfacher zu handeln.
$argv – Parameterübergabe via Commandline. Nützlich wenn wir unseren Crawler auf ein bestimmtes CMS zuschneiden und auf unterschiedlichen Seiten anwenden wollen, ohne den Quellcode im Nachhinein ändern zu müssen.

Bevor es mit Teil 3 weitergeht, sollten diese PHP Befehle zumindest verstanden sein.

Webserver Request und Response

Wenn wir mit dem Browser eine Seite ansurfen, wird uns eine Seite präsentiert. Aber spätestens, wenn wir uns irgendwo einloggen und auf der selben URL weitersurfen wird klar, dass sich im Hintergrund noch ein paar Dinge mehr abspielen.
Eine Socketverbindung zu einer bestimmten HTML (Bsp.) Seite aufzubauen, ist so auch nicht möglich.
Wir bauen eine Verbindung zum Server auf und sagen ihm dann was wir von ihm wollen. Diese Anfragen sind standardisiert, sprich halten wir uns in unserer Anfrage nicht an diese Standards wird uns der Webserver eine Fehlermeldung ausliefern, aber nicht den gewünschten HTML Code.
In unserem Tutorial werden ich nicht alle Besonderheiten des Request/Response erklären, sondern vielmehr zeigen, wie wir eine gültige Abfrage auslesen und nach programmieren können.
Installiert euch dazu bitte in euren Firefox folgendes Plugin: live HTTP Headers.
Die Replayfunktion des Addons greift leider seit einigen Firefoxversionen nicht mehr, der -> Bugfix … Ihr braucht den Fix jedoch nicht anwenden für das Tutorial.

Schauen wir uns mal an was dieses Plugin macht.
Wenn wir das Plugin starten und eine Seite ansurfen, werden die Request Header (das was unser Browser an den Webserver sendet) und die Response Header (die Kopfzeilen die nicht im Quellcode der Seite sichtbar sind, die uns zurück übermittelt werden) angezeigt.

livehttp-screen

In dem Beispiel habe ich Google angesurft und zwar die Hauptseite direkt. Wenn wir jetzt diese Anfrage in PHP Code nachbasteln, haben wir schon unser erstes Socketscript.

Entsprechende Codeexample sind hier verlinkt: post-get-example
In der Regel funktionieren die Seite auch, wenn die Accept Paramenter weggelassen werden … muss aber nicht. Hier hilft nur testen der entsprechenden Seite oder das 1 zu 1 nachbilden des Requests.
Im Beispiel ist noch ein POST Request Beispiel enthalten.
Ein POST Request ist im Grunde die gleich Anfrage wie der GET Request, nur dass hier noch weitere Eingaben an den Server übermittelt werden (die man aus Gründen nicht in der URL haben möchte).
In der Regel werden diese POST Requests beim Login auf Webseiten angewendet.

Im 3. Teil werden ich einen Webcrawler auf ein schönes Projekt anwenden und dabei meine Schritte bis zum finalen Code dokumentieren.

Schreibe einen Kommentar

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

CAPTCHA-Bild

*