Version 0.01
So, die erste Version hat’s nun endlich geschafft:
Version 0.01 (Download zip)
- Startet bei einer vorgegebenen URL (muss momentan noch händisch in die DB eingetragen werden)
- Von dort aus werden Links abgegrast (vorerst mal nur <a href=”…”>)
- Wandelt relative in absolute URLs um
- Merkt sich, welche URLs schon besucht wurden, um Redundanzen zu verindern
- Parst die Seite nach dem
robots-Metatag und beachtetnofollowundnoindex - Nach 10 gecrawlten Seiten bricht der Prozess ab
Voraussetzung: PHP 5 (allow_url_fopen = on), MySQL
Folgende PEAR-Pakete werden von ToSCA derzeit benötigt:
- HTTP_Request
- Log
- MDB2 (mit dem MySQL-Treiber)
- Net_URL2
Vorsicht: Der Crawler ist noch nicht das, was man unter “wohlerzogen” verstehen würde. Weder beachtet er das, was in einer allfällig vorhandenen robots.txt steht, noch nimmt er darauf Rücksicht, dass eine Domain nicht zu oft innerhalb kurzer Zeit besucht wird. Daher möchte ich momentan noch um einen sehr vorsichtigen und behutsamen Umgang mit dem Crawler bitten. Dass der Vorgang nach 10 gecrawlten URLs automatisch beendet wird, kommt nicht von ungefähr…
Auch wenn die Files momentan noch ohne besondere Erklärung zum Downloaden sind, würde ich mich schon jetzt über ein paar Reaktionen von euch freuen!
LG, Estigy.
Hehehe, dann gratuliere ich zu deinem neugeborenen Baby und wünsche ihm viel Kraft, Ausdauer, Mut und dass es immer weiter wächst ;-)
Sobald ich Zeit dazu finde, werde ich mich sicher durch die Files wühlen und ich freu mich bereits auf deine Erklärungen dazu.
Ich denke, ich bin nicht der einzige, der den Blog nun aufmerksam verfolgen wird - dass etwas vorwärts geht, ist nicht nur für dich eine Motivation :-)
Kommentar von brott | 3. September 2007
Nein, du bist nicht der Einzige. Auch ich habe nun endlich das Script zum Laufen bekommen und weiß nun auch, wie man PEAR verwendet.
Vielen Dank hier erstmal an dich, Günther ;-)
Ein Problem fiel mir mit Linux auf, da dieses ja auf Groß- und Kleinschreibung achtet. In der Klasse classes/webpage.class.php steht in Zeile 22
>> require_once ‘NET/Url2.php’;
allerdings wurde das Paket zumindest bei mir unter Net/URL2.php installiert. Außerdem hat Günther mir gesagt, dass man es als “Net_URL2-0.1.0″ installiert, weil es noch beta ist. Soviel also zu Problemen, die auftreten können (für alle Folgemänner, die es testen wollen).
Nun zum guten Stück selbst. Ich bin begeistert, wie professionell das alles wirkt und freue mich, solch ein Script beim Aufbau beobachten und testen zu dürfen.
Die Geschwindigkeit scheint mir nicht schlecht zu sein, wobei du da natürlich wenig dafür kannst. Allerdings kam mir meine Klasse, die Google-Ergebnisse nach passenden Lyrics durchsuchen sollte, wesentlich langsamer vor.
Ich frage mich, wie man in so kurzer Zeit, so viel coden kann. Ich eier schon seit einigen Wochen auf 2 Klassen und einem interface rum…
Ich wollte eigentl. gerade fragen, ob du nicht die Documentation öffentlich zugänglich machen willst, aber die ist ja auch bereits im Download enthalten.
Nun gut.. Eigentl. würde ich gerne technische Vorschläge machen, aber das ist schwierig, wenn man selbst weniger Ahnung hat. Ich frage mich jedoch, wofür hast du eine leere Klasse in dem Paket? Also ich finde es nicht besonders spannend _Skeleton anzusehen und die skel’s, die ich sonst gesehen habe (php-unabhängig), hatten immerhin einen Inhalt.
Die Storage-Enginge wird über MDB2 verwaltet, wenn ich das richtig verstanden habe? Also wenn jemand Oracle verwendet, dann installiert er sich einfach MDB2 passend und es läuft trotzdem dank deiner Zwischenklasse StorageService_MDB2?
Wofür bräuchtest du dann ein interface, wenn der User die Verwaltung eh über ein anderes Script löst? Oder hast du vor auch noch andere Möglichkeiten als MDB2 anzubieten? Dann sähe ich wieder einen Sinn beim interface.
Bei deiner Funktion könnte man sich vielleicht noch überlegen, ob man sie in eine SubKlasse von Net/URL2.php implementieren könnte. Denn dort gehören sie vom Gebiet her dazu, wenn ich mich nicht täusche. Schließlich ist relative2absolute eine URL-Operation.
Vielleicht können andere Leser mal sagen, was sie von meinen Fragen und Ideen halten. So bekämen alle hier einen schönen überblick über die Wünsche und Ideen der Nutzer und die Möglichkeiten des Coders.
Apropos Wünsche der Nutzer: Bin ich der Einzige der so blöd ist und die Konfiguration der MySQL Verbindung vergessen hat? ^^
Ich hoffe, dass ich mit den Kommentaren nicht über meine fachliche Kompetenz hinausgeschossen bin :)
So far.. Ich freue mich schon auf andere Meinungen zu meinen Ideen.
Kommentar von Brati | 3. September 2007
Hi, Brati!
Danke für den langen Beitrag und auch für den Hinweis bezüglich Groß-/Kleinschreibung. Werd das so schnell als möglich ändern. Als Windows-User ist man halt ein verwöhntes Kind.
Die _Skeleton-Klasse ist nur als Grundgerüst für weitere Klassen vorhanden. Dann spar ich mir einfach, den Grundaufbau jedesmal zu tippen. Sie hat keinerlei sonstige/weitere Funktionalität.
Was das Interface StorageEngine betrifft: Es geht hier eigentlich nur darum, festzulegen, was jede StorageEngine auf jeden Fall können muss. Natürlich kann MDB2 sehr viele Datenbanken bedienen, aber viele haben schon ihre eigenen Datenbank-Implementationen und wollen daher nicht das PEAR-Objekt verwenden. Dann schreiben sie einfach eine neue Unterklasse, die halt halt alle der Methoden implementieren muss.
Die Dokumentation der letzten Version findet sich auch immer unter http://www.building-a-webcrawler.net/tosca/docs/.
LG, Günther/Estigy.
Kommentar von Estigy | 4. September 2007