photog.social is one of the many independent Mastodon servers you can use to participate in the fediverse.
A place for your photos and banter. Photog first is our motto Please refer to the site rules before posting.

Administered by:

Server stats:

244
active users

#webcrawler

0 posts0 participants0 posts today

GreatBlogs – Ein Webcrawler entsteht

Im letzten Beitrag zu GreatBlogs ging es um die Resourcen-Optimierung der bereits bestehenden Software. Nachdem ein erster Nutzen des Projektes vorhanden ist, geht es ans Eingemachte. Um das eigentliche Suchthema. Dazu braucht es mehrere Dinge, eines davon ist ein Webcrawler, der nach Inhalten sucht.

Grundlegende Idee

Die Idee des Webcrawler ist, von einem Startpunkt ausgehend, neue Seiten bzw. Aktualisierungen zu finden. Diese wandern in einen Index und werden in weiterer Folge von einem anderen Prozess thematisch kategorisiert und mit einer Relevanz versehen.

Erste Iterationen und Learnings

Theoretisch ist ein Webcrawler eine einfache Sache. Aber wie immer in der Softwareentwicklung trifft Theorie auf Praxis und es gibt Themen, die unerwartet sind, aber auch solche, die bewusst auf später verschoben werden.

Ich wählte einen iterativen Ansatz mit dem Ziel, einen einfachen Crawler funktional zu haben und diesen in weiterer Folge kontinuierlich zu optimieren und um neue Features anzureichern.

Webcrawler v0.1.0

Wie auch das bisherige Backend, ist der Webcrawler mit Go geschrieben. Er gibt sich als gbbot zu erkennen. Ausgehend von einer Startdomain wird diese durchsucht und sowohl die einzelnen Seiten dieser Domain, als auch weitere Domains persistiert.

Im nächsten Schritt werden die neu gefundenen Domains durchsucht – nach demselben Verfahren.

Mit net/http und net/url bring Go alles mit, was man braucht.

Webcrawler v0.2.0

Bereits nach dem dritten Durchlauf gab es eine Unmenge an Domains, die natürlich mit dem Thema Blogs nichts mehr zu tun hat. Im Grunde finden sich alle Social Media-Plattformen und großen Tech-Buden in der Liste. Es muss also doch eine manuelle Freischaltung her.

Es werden zwar weiterhin alle gefundenen Domains gespeichert, allerdings müssen die zu crawlenden Domains manuell aktiviert werden. Das ist zwar aktuell Handarbeit, aber ohne eindeutige Erkennung, dass es sich hierbei um ein Blog handelt, gibt es keine andere Möglichkeit.

Der bisherige Nachteil: Das Parsen und Verfolgen ist nicht ganz billig.

Webcrawler v0.3.0

Um den gesamten Parsing-Prozess zu verbessern, wird nun zu Beginn überprüft, ob es eine sitemap.xml gibt. Wenn ja, wird diese herangezogen. Sitemap-Index-Dateien werden genauso unterstützt, wie Standard-Sitemap-Dateien.

In diesem Fall werden nur diese Seiten evaluiert und lediglich neue gefundene Domains mitgeschrieben, aber keinen weiteren Links gefolgt.

Das ist in Summe wesentlich performanter bzw. speichereffizienter, als sich alle gecrawlten Seiten zu merken und beim Durchsuchen des Trees zu prüfen, ob der gefundene Link bereits überprüft wurde.

Für die Arbeit mit den Sitemap-Dateien setze ich auf gopher-parse-sitemap. Die Lib ist schon älter, aber die Abhängigkeiten sind überschaubar und am Sitemap-Standard hat sich nichts weiter geändert, also kein Problem.

Learnings

Defensives Programmieren und so, ihr kennt das.

Aber das, was der Crawler da so findet, ist teilweise schon sehr grenzwertig. Auf jeden Fall muss er mit zahlreichen “Edge-Cases” umgehen können:

  • Veraltete Links in Form von HTTP statt HTTPS
  • Client-Links
  • Malformed Links
  • Dead-Links
  • Nicht mehr existierende Domains

Und da gibt es noch weitere Fälle. Manchmal würde ich tatsächlich gerne einige Domaininhaber*innen anschreiben und ihnen einen Liste von unsinnigen Links mitteilen – aber das ist eine völlig andere Geschichte.

Weitere Verbesserungen

Natürlich gibt es noch viel zu tun, denn der Webcrawler ist bei weitem noch nicht optimal. Das sind die Themen, die als nächstes anstehen.

  • Berücksichtigung robots.txt
  • Einschränkung Sprache (vorerst Deutsch)
  • Berücksichtigung /slashes

Danach wird es in Richtung “Themen-Erkennung” der Beiträge gehen.

Bei Interesse also bitte gerne bei GreatBlogs vorbeischauen.

Norbert Eder · GreatBlogs - Ressourcen-Optimierung, RSS und Co. - Norbert EderIn GreatBlogs – Technik-Umschwung am Frontend habe ich schon Änderungen an der Technologie-Auswahl angekündigt. Ein Teil dessen wurde mittlerweile auch umgesetzt. Schauen wir uns die Änderungen im Detail an. Feed-Generierung Der Beitrags-Feed wurde im ersten Schritt mit Vue.js realisiert. Das ist nett, aber im Grunde ergibt das dann doch bei jedem Aufrung eine Query gegen … „GreatBlogs – Ressourcen-Optimierung, RSS und Co.“ weiterlesen

AI Bots aussperren

Wer selbst Inhalte im Internet publiziert, möchte eventuell nicht, dass diese von den AI Web Crawlern zum Trainieren von LLMs etc. eingesammelt werden. Viele haben diese Crawler deshalb ausgesperrt. Wer dies noch nicht hat und möchte, findet hier eine entsprechende Anleitung da zu.

Webcrawler

Diese sind unter verschiedenen Namen bekannt: Searchbot, Robot, Bot, Crawler, Webcrawler. Eines haben sie aber alle gemeinsam: Sie durchsuchen das Internet nach Webseiten und analysieren diese. Je nach Zweck des Crawlers suchen sie unterschiedliche Inhalte, angefangen von E-Mail-Adressen bis hin zu Webfeeds, Fotos, Videos. Allerdings werden sie auch von Suchmaschinen zur Indexierung verwendet.

Normalerweise setzen Webcrawler den HTTP User Agent und sind darüber eindeutig identifizierbar.

KI Bots per robots.txt blockieren

Die robots.txt bildet den Robots Exclusion Standard ab. Dieser ist in RFC 9309 beschrieben und definiert ein Dateiformat für Webserver, um Bots mitzuteilen, ob sie willkommen sind, oder nicht. Diese Datei liegt im Root der jeweiligen Webseite bzw. muss dort abgelegt werden.

Idealerweise liest ein Webcrawler beim Auffinden einer Website diese Datei aus (sofern sie vorhanden ist). Ist er nicht erwünscht, verlässt er diese Seite wieder, ohne sie zu durchsuchen.

Wenn man nun also weiß, wie sich bestimmte Webcrawler bekannt machen, können diese ausgeschlossen werden:

User-agent: anthropic-aiDisallow: /

Dies kann man nun für alle bekannten Webcrawler tun.

Da natürlich ständig neue Webcrawler hinzukommen, oder sich Namen ändern, muss die Datei entsprechend gepflegt werden. Hierzu gibt es Listen, die laufend gepflegt werden. Unter anderem block-ai-robots.

KI Bots per .htaccess blockieren

Nun halten sich nicht alle Webcrawler an das, was die robots.txt vorgibt und analysieren eine Webseite auch dann, wenn sie blockiert werden. Dazu muss man mit schweren Geschützen auffahren.

Mit der .htaccess Datei können Webserver bezüglich Zugriffe konfiguriert werden. Damit können alle NCSA-kompatiblen Webserver (zum Beispiel der bei Webhostern sehr verbreitete Apache) umgehen. Mit Hilfe dieser Datei können unter anderem Routen (Weiterleitungen) definiert, aber auch Zugriffe erlaubt, oder eben auch verboten werden.

Das bedeutet, dass man die in der robots.txt definierte Sperre auch über den Webserver forcieren kann bzw. ihnen eben nur diese Datei erlaubt:

RewriteEngine onRewriteCond %{HTTP_USER_AGENT} (anthropic\-ai)RewriteRule !^/?robots\.txt$ - [F,L]

Webcrawler, die den HTTP User Agent nicht setzen, sind schwer zu erkennen. Oftmals geben Sie sich als ganz normaler Browser zu erkennen. Der Webserver kann nun nicht unterscheiden, ob es sich um eine surfende Person handelt, oder eben um einen Webcrawler.

In einigen Fällen sind die IP-Adressen bzw. IP-Adressbereiche von Webcrawlern bekannt. So ist es möglich, überhaupt die IP-Adressen am Webserver zu sperren. Hier ein Beispiel für OpenAI ChatGPT:

Order Allow,Deny# OpenAI ChatGPT - https://platform.openai.com/docs/plugins/bot/ip-egress-rangesDeny from 23.98.142.176/28Deny from 40.84.180.224/28Deny from 13.65.240.240/28Deny from 20.97.189.96/28Deny from 20.161.75.208/28Deny from 52.225.75.208/28Deny from 52.156.77.144/28Deny from 40.84.180.64/28Allow from all

Generell empfiehlt es sich, bei IP-Sperren jedoch vorsichtig zu sein. Tippfehler können sehr schnell, einen weit größeren Bereich aussperren, oftmals teilen sich aber auch gewünschte und unerwünschte Webcrawler den gleichen IP-Bereich.

Eine Vorlage hierfür gibt es ebenfalls unter block-ai-robots.

Hast du weitere hilfreiche Informationen zu diesem Thema, freue ich mich über eine Kontaktaufnahme oder einen Kommentar.

IETF DatatrackerRFC 9309: Robots Exclusion ProtocolThis document specifies and extends the "Robots Exclusion Protocol" method originally defined by Martijn Koster in 1994 for service owners to control how content served by their services may be accessed, if at all, by automatic clients known as crawlers. Specifically, it adds definition language for the protocol, instructions for handling errors, and instructions for caching.