Webcrawler

Hier: Algorithmus, der mit Breitensuche den Graphen aus Webseiten und Links traversieren und visualisieren tut. Den Algorithmus schrieb ich mit Java und IDE Eclipse. Datenspeicher sind Arrays, Webseiten sind Knoten, Links sind Kanten, die in HTML mit dem Tag a und dem Attribut href gekennzeichnet sind.

Der Algorithmus hier erkennt sowohl relative als auch absolute Links auch einfache und doppelte Anführungsstriche. Verlinkte Dateien, die als Dateien ausgewiesen sind, werden dann, zur Laufzeit regelmäßig ausgelassen, wenn sie nach erstmaligen Öffnen zeigen, dass sie nicht in HTML weiterverlinken. Beispiele für nicht in HTML weiterverlinkende Dateien sind hier nun v.a. PDF Dateien, JPG Bilder auch MP4 Videos. Für das Auslassen verwende ich Positiv- und Negativarrays. Webseiten, die nach einer während der Laufzeit veränderbaren Wartezeit nicht reagieren, werden auch ausgelassen.

Eine Traversierung auf /de.wikipedia.org/wiki/ beginnt hier nun mit Startknoten, die Titel der Webseiten von /www.xionoix.net/node/ sind, die in /de.wikipedia.org/wiki/ vorhanden sind.

Zur Visualisierung des Graphen während der Laufzeit (Video 1) gibt der Algorithmus Knoten und Kanten, auch Kantengewicht, kontinuierlich an Gephi via Java, JSON und Websocket weiter. Gephis Force Atlas setzt zufällige 2D Startkoordinaten und bildet gekonnt und live ab. Bei Bedarf wird der traversierte Graph als CSV oder SVG (Abbildung 1) vom Webcrawler ausgegeben.

Abb. 1, der Graph
Video 1, Entstehung eines Graphen

Eine Traversierung ist auch hier v.a. nicht abschließend darstellbar. Denn v.a. werden die Links und Webseiten von /de.wikipedia.org/wiki/ kontinuierlich verändert. Außerdem enthält /de.wikipedia.org/wiki/ der Kenntnis des Webcrawlers nach ca. 3.9 Mio Webseiten in einer Zusammenhangskomponente (Stand: Anfang 2022). Die Anzahl der Kanten knackte bei einer vollumfassenden Traversierung von /de.wikipedia.org/wiki/ fast „Java heap space“ bei Standardeinstellungen von IDE Eclipse. Das Traversieren hat mehrere Wochen gedauert.

Der Funktionsgraph, Signale(Zeit), (Abb. 2), zeigt meine Simulation der Signalweiterleitung im Netzwerk von Wikipedia Webseiten. Der Graph zeigt insb. die Überlagerung von 8000 Einzelsignale(Zeit). Während das Netzwerk durch, hier initiale, Traversierung eines Netzwerkes von 8000 Wikipediaseiten wächst, sendet jeder Knoten in Abhängigkeit der Anzahl der ausgehenden Links ein simuliertes (elektrisches) Signal. Wenn die Summe der eingehenden Signale einen Schwellenwert überschreitet, senden Knoten wiederum ein Signal an Nachbarknoten. Der Schwellenwert ist nicht statisch. Die Herausforderung ist der zeitliche Versatz in der Simulation, das Einschwingen und eine Harmonisierung der Schwingung. Die Einzelsignale sind in dieser Simulation vorhanden.

Abb. 2, Signale(Zeit)

Wie kann ein komplexerer Graph kontinuierlich mit dem geringsten Energieaufwand bei gleichbleibender Qualität der Strukturabbildung traversiert werden? Wie können daraus Strukturgebende Verfahren abgeleitet werden? Des operation Research (BTU), der Wirtschaftsmathematik (BTU, 11918), der numerischen Mathematik, der computerorientierten Mathematik (TUB) der Programmierung (BTU, 12105), der Szenarioanalyse, link prediction.

Quellen:
Java, insb. libs: java.io.InputStreamReader; java.io.OutputStreamWriter; java.io.FileWriter; java.io.BufferedWriter, java.io.BufferedReader; java.net.URLConnection; java.net.URL; java.util.Objects; java.util.Arrays;
Gephi insb. Force Atlas Algorithmus,
Wiki insb. verlinkte Webseiten auf Wiki, ausgehend von Webseiten mit Titeln, die auch Schlagworte (tags) von xionoix.net sind.