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

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

3. Januar 2019 0 Von Simon

Bisher konnte Spider:

Zu einer Website springen und dort alle Webseiten und internen Links entlanglaufen, die miteinander zusammenhängend sind. Dann konnte er die Information darüber, wie die Webseiten im Netz heißen, in ein Array legen. Bevor er die Information über die Beute hineingelegt hat, schaute er, ob die Zutat (die Webseite) schon auf der Speisekarte (dem Array) steht, damit es dort nicht mehrfach erscheint.

Bisher kundschaftete Spider allerdings neben Webseiten auch alles andere Getier im Netz aus, dass dort verlinkt ist. Dazu gehören auch Bspw. Jpg und Gif – Bilder. Sie sind Sackgassen im Netz, denn sie verlinken vor allem nicht weiter. Außerdem: Bis Spider die bearbeitet hat dauerte das echt lange. Jpg und Gif sind im Vergleich zu html Seiten die Hummeln unter den vielen Fliegen.
Wenn wir keine Hummeln jagen wollen, weil es einfach zu lange dauert, sie zu bearbeiten, sagen wir Spider in diesem Update, dass er Links zu z.B. Jpgs als exception (Ausnahme) betrachten und drum herum marschieren soll.

Außerdem soll Spider nun nicht nur die Namen unterschiedlicher Seiten auf die Speisekarte setzen, sondern auch alle existierenden Verlinkungen zwischen den Seiten der Website in eine Matrix stecken. Also Spider soll z.B. Nachbarschaften erkennen: Neben Fliege hängt Schmetterling und daneben hängt Biene im Netz (und daneben Fliege).
D.h. wir legten eine Matrix an, in der jede Webseite jeder anderen Webseite (und sich selber) gegenübergestellt wurde. Sie nennt sich Adjazenzmatrix. Dort ließen wir Spider immer dann auf eines der Felder in der Matrix hüpfen, wenn er mal wieder irgendeinen Link (Nachbarn) entdeckt hat. Und jeder Hüpfer zählt nen Counter hoch.

Ausschnitt der Adjazenzmatrix von Noixion.net (Dez. 2018). Quelle: Eigene Darstellung mit Excel.

Das Konzept sieht nun so aus:

  1. Wir öffnen eine Seite und verarbeiten ihren Inhalt in Java zu String.
  2. Wir scannen dann zunächst nach href-Einträgen im Source Code.
  3. Haben wir einen Link gefunden, schauen wir ob es eine HTML-Seite mit weiteren Links oder ein Jpg/Gif ist. Ist es Jpg beachten wir den dorthin führenden Link nicht. Wenn es eine HTML Seite ist, dann schauen wir, ob wir den Link bereits schon mal gefunden haben.
    1. Ist der Link neu, packen wir ihn ans eine Ende (oben) des Arrays (ans eine Ende einer Liste).
      1. In einer Matrix zählen wir an der Stelle des Gefundenen Links einen Counter hoch.
    2. Ist der Link alt, machen wir gleich 3.1.1. (Spider spring!)
  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.
  6. Wir haben eine Stoppuhr für die Laufzeitoptimierung eingebaut. So wissen wir wie gut Spider arbeitet.

Der Code zum Konzept Punkt eins bis zwei bleibt gleich.

Konzept Punkt zwei bis drei:

/*created by

* Simon auf

* Noixion.net

* 12/2018-01/2019

*/

public static int a=1; public static int Aufrufe=0;

public static String[] Links1 = new String[10000];

public static double LinksLinks[][]=new double[5000][5000];

public static String[] Links(String s, String home, int homelaenge, String Attribut, int Attributlaenge, String Ausnahme1, int Ausnahme1laenge, String Ausnahme2, int Ausnahme2laenge) {

Links1[0]=home;

int Stringlaenge=s.length();

for (int i =0; i<(Stringlaenge-homelaenge-Attributlaenge); i++){

if (s.substring(i, i+Attributlaenge+homelaenge).equals(Attribut + home)) { //Link gefunden

if ((s.substring(s.indexOf(„\““,i+Attributlaenge+homelaenge)-Ausnahme1laenge,s.indexOf(„\““,i+Attributlaenge+homelaenge))).equals(Ausnahme1)==false) //entfernt alle z.B. Gifs

if ((s.substring(s.indexOf(„\““,i+Attributlaenge+homelaenge)-Ausnahme2laenge,s.indexOf(„\““,i+Attributlaenge+homelaenge))).equals(Ausnahme2)==false){ //entfernt alle z.B. jpgs

int k=0;

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

if ((home+s.substring(i+Attributlaenge+homelaenge,s.indexOf(„\““,i+Attributlaenge+homelaenge))).equals(Links1[j])==false) { //gefundener Link wird mit den Links der Linkliste verglichen.

k++; // ist es nicht der gleiche Link -> k plus eins.

if (k==a) { //Link ist nicht bereits in der Linkliste -> k=a.

/*created by

* Simon auf

* Noixion.net

* 12/2018-01/2019

*/

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

LinksLinks[Aufrufe][a]++; // fügt der Linkmatrix einen Eintrag für vorhandenen reflexiven Link hinzu

a++; //Counter für die Anzahl der Links in der Linkliste

}

}

else {

LinksLinks[Aufrufe][j]++; // fügt der Linkmatrix einen Eintrag für vorhandenen nicht reflexiven Link hinzu.

j=a; // ja, der Link ist bereits in der Linkliste gefunden, wir müssen die Liste nicht weiter durchsuchen -> j=a.

}

}

}

}

}

Aufrufe++;

return Links1;

}

/*created by

* Simon auf

* Noixion.net

* 12/2018-01/2019

*/

Konzept Punkt vier bis einschließlich sechs:

/*created by

* Simon auf

* Noixion.net

* 12/2018-01/2019

*/

public static void main(String[] args) {

final long timeStart = System.currentTimeMillis();

String url = new String(„www.noixion.net“); //Startseite

String home = new String(„https://www.noixion.net/“); //Suchparameter(Umgebung) für Links

String Attribut = new String(„a href=\““);

String Ausnahme1 = new String(„jpg“);

String Ausnahme2 = new String(„gif“);

int Ausnahme1laenge = Ausnahme1.length();

int Ausnahme2laenge = Ausnahme2.length();

int homelaenge = home.length();

int Attributlaenge = Attribut.length();

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

String Links1[]=StringzuLinks.Links(s,home, homelaenge, Attribut, Attributlaenge, Ausnahme1, Ausnahme1laenge, Ausnahme2, Ausnahme2laenge);

/*created by

* Simon auf

* Noixion.net

* 12/2018-01/2019

*/

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

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

StringzuLinks.Links(s,home, homelaenge, Attribut, Attributlaenge, Ausnahme1, Ausnahme1laenge, Ausnahme2, Ausnahme2laenge);

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

}

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

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

Links[i]=Links1[i];

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

}

double LinksLinks[][]=StringzuLinks.LinksLinks; //Zusammenstauchen einer übergroßen, abgeschätzten, Matrix + Killen einer Zeile.

for (int i=0;i<StringzuLinks.Aufrufe-1;i++) {

for (int j=0;j<StringzuLinks.Aufrufe-1;j++) {

LinksLinks[i][j]=LinksLinks[i+1][j];

System.out.print(LinksLinks[i][j]+“\t“);

}

System.out.println(„“);

}

final long timeEnd = System.currentTimeMillis(); //Zum Messen und Ausgeben der Laufzeit.
System.out.println(„Verlaufszeit der Schleife: “ + (timeEnd – timeStart) + “ Millisek.“);

}

/*created by

* Simon auf

* Noixion.net

* 12/2018-01/2019

*/

Ausblick: Matrixmultiplikation, Zeilensummen und Spaltensummen.

SZ, 03.01.2019
SZ, 15.09.2022

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