PHP Crawler - Sitemap

  • Hallo,

    ich möchte meine gesamte Webseite nach Links durchsuchen, diese in einer DB abspeichern und später als Sitemap ausgeben. Da es sich aktuell um ca. 1500. Seiten handelt und jederzeit welche dazukommen, sollte das automatisch funktionieren.

    Ich habe bereits ein Skript soweit geschrieben, dass die Links ausliest und in die DB speichert. Dabei gibts aber 2 probleme a) die Zeit, die beansprucht wird und b) es werden auch ausgehende Links mit aufgelistet.

    Die Klasse schaut so aus (etwas gekürzt):

    Ich möchte bei der Funktion GetLinks etwas verändern, sodass in das Array keine fremden URLS geschrieben werden, sondern nur meine. Kann ich die regulären Ausdruck so anpassen, dass direkt fremde URLS ausgeschlossen werden? Wenn ja hat jemand eine Lösung oder Tip?

    Wenn erstmal die fremden URLS entfernt wurden aus dem Array, wird die Schleife die durchlaufen werden muss auch kürzer und damit sollte die Geschwindigkeit sich besssern.

    Ich steht ein bisschen aufm Schlauch^^

  • Nunja im Grunde muss das Script ja nur einmal langsam ablaufen und dann musst du ja nach Sachen die in der DB stehen nicht mehr abfragen

    Zum Script selber prüf doch einfach per str_pos ob zb dein Domainname in der Url enthalten ist, die Frage ist natürlich welche Urls du benutzt


    Bitte kein GLobal bei OOP

    Einmal editiert, zuletzt von Pion (4. August 2010 um 18:24)

  • Durchgehen und per Regular Expressions nach Links suchen, da bietet sich das ja super an.


    Du kannst die einzelnen Elemente doch noch auf zugehörigkeit zur Webseite testen:

    musst halt nur die aktuelle website, oder die kurzform davon, dh. statt http://forum-hilfe.de nur forum-hilfe und nimmst dass dann in die RegEx rein als festen bestandteil.. =)

    wert.TeeeX.de
    Wie gut ist die technische Umsetztung deiner Website wirklich?
    Teste es!

    Einmal editiert, zuletzt von -Bambino- (4. August 2010 um 23:35)

  • ja, ich habe nun ein paar Abfragen hinzugefügt, welche Sicherstellen das es auch um echte Links von einer Webseite handelt und nicht um irgendwelche css-Dateien usw.

    Funktioniert alles wunderbar. Nur das die Geschwindigkeit bei großen Webseites nicht unbedingt die schnellste ist. Lässt sich vermutlich auch nicht schneller umsetzten in PHP?!

  • Danke für eure Hilfe. Ein sehr interessanter Beitrag von Dodo.

    Man muss auch überlegen was das Skript wirklich macht. Jede URL wird geöffnet und nach Links durchsucht. Die gefunden Links speichere ich in ein Array und jage diese durch eine foreach Schleife in die Datenbank (vorher werden noch ein paar abfragen gemacht).

    Ich habe verschiedene Varriationen getestet und meist wird es nur langsamer.

    Achja, was ich noch wissen wollte, warum kein global in OOP (Pion hatte das erwähnt)?

  • Danke für eure Hilfe. Ein sehr interessanter Beitrag von Dodo.

    Man muss auch überlegen was das Skript wirklich macht. Jede URL wird geöffnet und nach Links durchsucht. Die gefunden Links speichere ich in ein Array und jage diese durch eine foreach Schleife in die Datenbank (vorher werden noch ein paar abfragen gemacht).

    Ich habe verschiedene Varriationen getestet und meist wird es nur langsamer.

    Achja, was ich noch wissen wollte, warum kein global in OOP (Pion hatte das erwähnt)?

    pack das komplette Script doch mal hier rein, dann findet sich sicher noch die eine oder andere Zeile, die sich verbessern lässt ;)

    Gruß crAzywuLf :D

  • Im Grunde ist es egal ob OOP oder nicht man sollte nie GLOBALS verwenden und vorallem in OOP nicht dafür gibts Pattern/(Registry) und selbst die nur verwenden wenn es wirklich notwendig ist


    Zu deinem Script kann man es bestimmt um das 2 fache beschleunigen und mit paar Tools um das 10 fache

  • Zitat

    Zu deinem Script kann man es bestimmt um das 2 fache beschleunigen und mit paar Tools um das 10 fache

    Was wären das denn für ein paar Tools?

    Habe das Script soweit mal komplett in diesem Post eingebunden. Bin für Vorschläge gerne offen :)

    global.php

    class.php

    crawler.php

  • Okay also folgendes, nicht pro Link einen extra Query verwenden

    Am besten mal Zeiten messen und schauen woran es am meisten liegt

    doUrl am besten mal anders schreiben andere Funktion zum überprüfen , breaks verwenden ogott da ist so viel machbar^^

    Wenn nix mehr geht dann Complimire deinen PHP Code, aber das ist nicht nötig

    mfg