Anatomie eines Crawlers

Wie im letzten Blogpost versprochen, gehe ich in diesem Post näher auf die Funktionsweise meines Crawlers ein. Vorab: Ich bin kein Software Engineer. Es gibt bestimmt mehrere Wege, wie mein Crawler verbessert werden könnte, bis jetzt scheint jedoch alles so zu funktionieren, wie es soll. Eine Verbesserung will ich aber unbedingt noch implementieren. Näheres am Ende dieses Posts.

How does it work?

In einem ersten Schritt, werden die von mir definierten Kategorien-Seiten abgerufen und alle Links in einem Array gepseichert. Anschliessend werden Duplikate entfernt da Artikel mit hoher Wahrscheindlichkeit mehrfach im Array auftreten werden (Da Sie in ihrer Kategorie sind und zum Beispiel auf der Front Kategorie). Diese werden dann in eine SQLite-Datenbank geschrieben, zusammen mit ein paar weiteren Parametern, etwa wie oft sie schon gecrawled wurden (zu Beginn 0), einem Timestamp, der Artikel-ID, ob der Artikel Kommentare hat, falls ja die URL zur Kommentarseite, wie oft diese Seite gecrawled wurde und einen Timestamp für den Kommentar-Crawl.

Anschliessend werden alle Artikel, welche noch nie aufgerufen wurden und Artikel welche schon gecrawled wurden mit abnehmenden Zeitabständen, aufgerufen und gespeichert. Ich habe provisorische Zeitabstände sowohl für Artikel als auch die Kommentare definiert. Ich werde diese gegebenenfalls noch anpassen. Die Kommentare werden öfters und in kürzeren Zeitabständen besucht, da mich dort interessiert, ob und welche Kommentare gelöscht werden. Ich erhoffe mir davon dies möglichst gut feststellen zu können. So sieht das ganze etwa aus:

Zeitabstände der Crawls

Zeit in min

Man sieht schön, das besonders zu beginn die Kommentarspalte sehr häufig gescraped wird. Auch werden die Kommentare total 20 Mal aufgerufen, während die Artikel nur 10 Mal aufgerufen werden.

Wenn die Artikel aufgerufen werden, wird das komplette JSON abgespeichert und die Werte in der Datenbank werden aktualisiert, so dass beim nächsten durchlauf geprüft werden kann, ob schon genügend Zeit vergangen ist, um die Seite erneut aufzurufen. Ich erhoffe mir von diesem Approach, dass die Seiten nicht zu oft aber in einem Sinnvollen Abstand gespeichert werden und nicht zu viele Anfragen auf einmal stattfinden.

Dieses Script läuft auf meinem Rasberry Pi, welcher 24/7 eingeschaltet ist. Zuerst wollte ich das ganze auf meinem NAS laufen lassen, da mir dort auch mehr Speicher zur Verfügung stehen würde. Ich habe mich aber bewusst gegen diesen Approach entschieden.

Next Steps

Wie zu Beginn erwähnt möchte ich ein Feature unbedingt noch implementieren. Und zwar eine Art Dashboard/Alarmsystem welches mir Anzeigt wieviele Artikel schon gespeichert wurden über die Zeit und mich alarmiert, wenn zu lange keine Artikel mehr ankommen aus welchem Grund auch immer. Natürlich sollte das ganze auch ein bisschen sexy aussehen. Ich schaue mir zurzeit die matlablib an, aber falls ihr Ideen habt gerne her damit.

Previous
Previous

Quick Update

Next
Next

Crawler Complete