Programmieren in Java für die Suchmaschinenoptimierung – Webspider und andere Spinnen

28. Dezember 2018 0 Von Simon

Wenn Du selber eine Homepage betreibst, fällt Dir in der Zugriffsstatistik irgendwann der Bereich Robot oder Spider auf. Die Programme, die auch von Suchmaschinen, auf das Internet losgelassen werden und Webseiten u.a. auf ihre Verlinkungen und Inhalt durchsuchen. Warum machen die das? Die finden heraus, welche Seite sie auf welcher Position in Ihrem Suchergebnis anzeigen D.h. sie indexieren u.a. anhand von internen Verlinkungen.

Wenn Du verstanden hast wie das geht, kannst Du deine Seite für die search engine optimieren (seo), so, dass sie ganz oben in der Suchmaschine steht. Außerdem kannst du dann deinen eigenen Webspider programmieren.

Willst Dus auch verstehen? Programmiere mit uns!

 

Vor dem Programmieren kommt das Konzept:

Warum heißt der Spider spider?
Nun, wie eine Spinne hangelt sich das Programm durch das gesamte Datennetz einer am besten vorher abgegrenzten Umgebung (bspw. Einer Website) ein oder mehrmals entlang. Das macht die Spinne, zumindest beim Netzbau, auch. Eine Spinne war in ihrem Netz überall einmal. unser Spider auch. Das Spinnennetz, Internet, kann sehr sehr groß werden. Deswegen sagen wir unserem Spider, wo er zu Hause ist und grenzen die Umgebung ein.

Für den Bau des Webspider nutzen wir die Programmiersprache Java. Simon arbeitet in der Entwicklungsumgebung (IDE) eclipse. Wir implementieren die Breitensuche über den HTML Quelltext und darinstehenden Verlinkungen, angegeben mit „href“.

  1. Wir öffnen eine Seite und verarbeiten ihren Inhalt in Java.
  2. Wir scannen dann zunächst nach href-Einträgen im Source Code.
    Den Source Code kann man sich im Browser auf der zu scannenden Webseite auch mit Rechtsklick auf z.B. „Seitenquelltext anzeigen“ anzeigen lassen.
  3. Haben wir einen Link gefunden, schauen wir ob wir ihn schon mal gefunden haben. Ist der Link neu, packen wir ihn ans eine Ende (oben) des Arrays (ans eine Ende einer Liste).
  4. Wir öffnen den letzten noch nicht geöffneten Link am anderen Ende (unten) der Liste.
  5. Wir wiederholen Schritt drei und vier solange, bis wir oben in der Liste angekommen sind.

 

Woher wissen wir, obwohl wir doch eigentlich unser Netz nach Topologie, Links und Seiten, durchsuchen, wie groß unsere Umgebung ist? Wir wissen wie groß die Umgebung einer  Zusammenhangskomponente (Teilnetz), wo unser gewählter Startpunkt liegt, ist, weil wir nur innerhalb einer Website (Domain) suchen. So kommen wir auch am „oben in der Liste“ an. Sollten wir Links nach Extern zulassen, werden wir mit Heimrechnerpower nicht fertig. Der Spider rennt sich nen Wolf.

Wegen der Laufzeit: User Spider rennt im Netz also einmal alle Knoten und Kanten entlang und merkt sich, wo er überall schon mal gewesen ist. Laufzeit ist Landau von (Anzahl Knoten plus Anzahl Kanten).

Ergebnis dieses Netzwerkens ist eine Liste aller Webseiten einer Website.

Literatur: Ullenboom , C.(2009) Java ist auch eine Insel, Bonn, Galileo Press, 8. Auflage.

 

Code zu Konzept Punkt 1:

(In einer eigenen Klasse, static String)
Der Codeschnipsel verarbeitet aus der Eingegebenen url und dem Quelltext der Seite dahinter eine Endloslange Zeichenkette, die in Java weiterverarbeitet werden kann.
Weil Simon dieses Übersetzen nicht so interessiert (nicht selber gemacht) hier die Quelle: Stackoverflow (thx!)

 

public static String String(String url) {

{

try {

 

URL url1 = new URL(url);

 

BufferedReader in = new BufferedReader(new InputStreamReader(url1.openStream()));

String str;

String s = „“;

 

while ((str = in.readLine()) != null) {

s += (str + „\n“);

}

 

in.close();

return s;

}

 

catch (MalformedURLException e) {

}

catch (IOException e) {

}

 

}

 

return (url);

}

 

Der braucht die Bibliotheks-klassen und Methoden:

 

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.MalformedURLException;

import java.net.URL;

 

 

Code zu Konzept Punkt 2 bis 3

Findet Links durch Suchen nach Substring „href“ in der endlos langen Zeichenkette aus Punkt1. Löscht alle doppelten Links, und fügt den Rest der Linkliste zu. Öffnet dann den untersten Link. Beachtet wo der Spider zu Hause ist (home) und erstellt dann ein Array mit allen verbundenen Seiten der Website mit der Startseite (bspw. der Homepage). (static String[])

public static String[] Links(String s, String home) {

/*created by

* Simon auf

* Noixion.net

* 12/2018

*/

Links1[0]=home;

for (int i =0; i<(s.length()-home.length()-8); i++){

if (s.substring(i, i+8+home.length()).equals(„a href=\““ + home)) {                                                                                     //Link gefunden

for (int j=0; j<a;j++) {

if ((home+s.substring(i+8+home.length(),s.indexOf(„\““,i+8+home.length()))).equals(Links1[j])==false) {            //Link ist nicht bereits in der Linkliste

if (j==a-1) {

/*created by

* Simon auf

* Noixion.net

* 12/2018

*/

Links1[a]=(home+s.substring(i+8+home.length(),s.indexOf(„\““,i+8+home.length())));                             //füge Link der Linkliste (Links1) hinzu.

a++;

}

}

else {                                                                                                                                                                         // Link verlinkt auf bereits gefundene Website.

j=a;                                                                                                                                                                     // überspringe den Rest des Vergleichsprozesses.

}

 

}

}

}

System.out.println(a+“ „);

return Links1;

}

 

 

 

Code zum Konzept Punkt 4 und 5

Zum rekursiven (Rekursion) Aufrufen der zwei Klassen zuvor. Eingabe der Startseite (url) und der Suchumgebung (home), Spiders Jagdrevier.

 

public static void main(String[] args) {

Von Simon auf Noixion.net 12/2018

String url = new String(„https://www.noixion.net/blog“);

String home = new String(„https://www.noixion.net“);

 

String s = new String(URLzuString.String(url));

String Links1[]=StringzuLinks.Links(s,home);

 

//String LinksLinks[][]=new String[1000][1000];

//String sortedLinks[]=new String[1000]; sortedLinks[0]=url;

 

for (int i=0; i<(StringzuLinks.a); i++) {  //Aufruf der untersten nicht geöffneten Seite

s=URLzuString.String(Links1[i]);

StringzuLinks.Links(s, home);

System.out.print(i+“ „+Links1[i]);

 

}

String[] Links = new String[StringzuLinks.a]; //Zusammenstauchen eines übergroßen, abgschätzten, Arrays (Jaaaavaaa)

for (int i=0; i< StringzuLinks.a;i++) {

Links[i]=Links1[i];

System.out.println(Links[i]);

 

}

}

Einfach Copy paste geht hier nicht, weil verschiedene Klassen in Java, die durch main aufgerufen werden. Ein bisschen Basteltrieb ist vorausgesetzt zum verstehen und Anwenden.

Der Test erzeugt auf Noixion.net 170 unterschiedliche (Jpgs und) Links zu anderen noixion.net – Seiten.

Ausblick: Adjazenzmatrix aller Webseiten einer Website zur Erkennung der Netztopologie.