Seite 1 von 1

Fragen zum Aufbau eines Spiders (Base)

Verfasst: 22.05.2007, 15:14
von pvdb
Hallo,

in meiner Softwareanwendung ist ein Bestandteil das Spidern einer Homepage. Durch Testen lassen habe ich erfahren das die Links nicht immer korrekt ausgelesen werden, nämlich dann, wenn ein Base Tag definiert ist. Bis heute hatte ich von einem Base Tag nie was gehört.

Ich frage mich nun schon die ganze Zeit welche Logig mir korrekt die Links ermittelt.

Ich habe dies hier im Kopf:

Code: Alles auswählen

wenn vollständer link (also mit http://)
{
    link aufnehmen
}
else (link unvollständig, also kein http://)
{
   wenn erstes zeichen ist '/'
   {
      die hauptdomain (http://www.domain.de) vorne ranhängen und als link aufnehmen
   }
   else
   {
      wenn existiert ein base eintrag
      {
          den base eintrag vorne ran hängen und als link aufnehmen
      }
      else
      {
          domainpfad von vorgänger url extrahieren (http://www.11domain111.de/test/file.php) = http://www.11domain111.de/test/

          domainpfad vorne anhängen und link aufnehmen
      }
   }
}

Ich weiß z.b. nicht ob der base Eintrag immer gilt, egal ob ein Link mit / anfängt oder nicht. Wenn ich in einem Ordner bin und mit /file.php linke, dann geht da linkt ja auf die hauptdomain. Nur wie ist das beim Base?

Wäre nett wenn sich mal jemand meine Logic anschaut und mich da verbessert.

Phil

Verfasst:
von

Verfasst: 22.05.2007, 19:37
von Michael
Dafür gibt es doch fertige Klassen. Checke mal nutch. Ist zwar erst Version 0.9, aber schon in der 0.8 Version war das Auflösen von Links in nutch kein Problem.

Re: Fragen zum Aufbau eines Spiders (Base)

Verfasst: 23.05.2007, 05:52
von 800XE
pvdb hat geschrieben:Ich weiß z.b. nicht ob der base Eintrag immer gilt, egal ob ein Link mit / anfängt oder nicht. Wenn ich in einem Ordner bin und mit /file.php linke, dann geht da linkt ja auf die hauptdomain. Nur wie ist das beim Base?
BASE gibt immer wenn keine Domain im URL

BASE gilt bei
/folder/file.html
subfolder/file.html
datei.html
/index.html

BASE gilt nicht
hatetepe://......


Dein Code
wenn ganz links ein Slash, dann ...
else, gibts einen BASE

ist falsch
auch ohne Slash links ist es ein interner Link
alle internen Links, denen nicht extra die Domain vorangestellt wird, sind vom Base betroffen

BASE kann auch auf Externe wirken
siehe GoogleCache
Google hat dort alle eigenen Links mit seiner Domain
und damit die Links der gecachten Seite funktionieren, ist DOmain/path/ zu(von) dieser Seite als BASE definiert

Verfasst:
von

Verfasst: 23.05.2007, 07:37
von pvdb
hi,

danke für die infos. auf eine externe libray wollte ich ungern zugreifen, da es sich um eine os x/windows desktop anwendung handelt und ich lieber bei meinen eigenen code bleibe.

nach deinen info, würde ich meine logik wie folgt abändern:

Code: Alles auswählen

wenn vollständer link (also mit *://) 
{ 
    link aufnehmen 
} 
else (link unvollständig, also kein *://) 
{ 
   wenn existiert ein base eintrag 
   { 
      den base eintrag vorne ran hängen und als link aufnehmen 
   } 
   else 
   { 
      wenn erstes zeichen ist '/' 
      { 
         die hauptdomain (*://www.domain.de) vorne ranhängen und als link aufnehmen 
      } 
     else 
     { 
         domainpfad von vorgänger url extrahieren (http://www.11domain111.de/test/file.php) = http://www.11domain111.de/test/ 

         domainpfad vorne anhängen und link aufnehmen
      } 
   } 
} 
Das * soll heißen, dass ich es noch konform machen muss, damit es auch bei https und so läuft.

Ist ansonsten die Logik soweit okay?

Phil

Verfasst: 23.05.2007, 12:45
von 800XE
pvdb hat geschrieben:Ist ansonsten die Logik soweit okay?
ja, das sieht gut aus ....
... aber obs das auch ist weiss man erst wennman es laufen läst


und aufpassen solteste noch wenn
.. = einen Ordner höher
. = aktueller Ordner
als Ordner im Link vorkommen
am Ende hast du eine URL

domain.tld/blog/2007/05/23/../../../../img/header.jpg

Verfasst: 27.05.2007, 11:55
von pvdb
danke für die antwort. habe das mit der base sache inzwischen drinnen und das mit den ../../ und . und .. und diesen dingen muss nur noch eine funktion hier die das auflöst, aber dies sollte kein problem werden ;)

phil

Verfasst: 31.05.2007, 17:01
von pvdb
achso, nachdem ich mir eine große testseite gebaut habe, haben die untersuchungen und test ergeben, dass deine aussage

"BASE gibt immer wenn keine Domain im URL"

nicht ganz korrekt ist :)

wenn der link mit einem / anfängt ist es weiterhin das homedir :)

phil