jeannie61: Suchmaschine für die Webseite

Ich habe früher eine sehr schöne Suchmaschine gehabt, den ich einfach in meine Seite einbinden konnte. Es hatte die Seiten regelmäßig gescannt und die Sitemap dadurch erneuert. Ich suche seit sehr langer genau wieder so eine suchmaschine um in meine Seite zu integrieren aber finde ausser google gar nichts. Weiss eine von Euch wo ich suchen könnte?

Vielen Dank, Jeannie

  1. Hello,

    Ich habe früher eine sehr schöne Suchmaschine gehabt, den ich einfach in meine Seite einbinden konnte. Es hatte die Seiten regelmäßig gescannt und die Sitemap dadurch erneuert. Ich suche seit sehr langer genau wieder so eine suchmaschine um in meine Seite zu integrieren aber finde ausser google gar nichts. Weiss eine von Euch wo ich suchen könnte?

    Danach kannst Du auch Google fragen

    Je nachdem, ob Du z.B. PHP zur Verfügung hast, oder nicht, passt Du eben deinen Suchtext an.

    Glück Auf
    Tom vom Berg

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. Google habe ich schon gefragt.

      1. Hello,

        Google habe ich schon gefragt.

        Wonach genau hast Du denn gesucht?

        Möchtest Du dir das z. B. als PHP-Programm selber programmieren? Mit den DOM-Parser-Funktionen bzw. -Klassen ist das gar nicht so schwer.

        Glück Auf
        Tom vom Berg

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
      2. Google habe ich schon gefragt.

        Dann kannst Du das folgende an Deine Bedürfnisse anpassen und danach als cronjob anlegen:

        #!/bin/bash
        
        protocol='https';
        servername='example.com';
        
        export LANG="de_DE.utf8";
        cd /tmp;
        umask 077;
        tmpFile=$(mktemp);
        wget --delete-after -mr ${protocol}://${servername} 2>&1 | grep -P "^--\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d-- " | sed "s/^.* //" | grep -v "/autoindex-files/" | grep -v "/font/"| grep -v "/robots.txt" | grep -v "/bilder/" | grep -v "/mime-icons/" | grep -v "C=S" | grep -v "C=M" | grep -v "C=N" | grep -v "download=1" | grep -v "buttons.js" | grep -v "css.css" | grep -v "favicon.ico" | grep -v "feed.rss" | grep -v "opensearch.xml" > ${tmpFile};
        tmpFileSorted=$(mktemp);
        sort -u < ${tmpFile} > ${tmpFileSorted};
        rm -f ${tmpFile} 2> /dev/null;
        mv -f ${tmpFileSorted} /var/www/${servername}/sitemap.txt;
        chmod 644  /var/www/${servername}/sitemap.txt;
        gzip -cf /var/www/${servername}/sitemap.txt > /var/www/${servername}/sitemap.txt.gz;
        chmod 644  /var/www/${servername}/sitemap.txt.gz;
        
        1. Da die Meinungen über das Skript offenbar sehr auseinendergehen beschreibe ich ich mal, was das gezeigte Skript macht.

          Erst mal die Zusammenfassung: Das Skript holt die Startseite und alle verlinkten Webseiten unterhalb der konfigurierten Domain ab, speichert diese jedoch nicht sondern schreibt die gefilterten URLs in eine Datei sitemap.txt, die auf dem Document-Root des Webservers lesbar abgelegt wird.

          Das Skript kann die Aufgabe lösen, alle Ressourcen eines dynamisch erzeugten Webauftritts zu listen. Für rein statische Webauftritte mit HTML-Dateien gäbe es performantere (weniger Last erzeugende) Wege. Aber funktionieren würde das Skript auch bei diesen.

          #!/bin/bash
          

          Es ist ein Bash-Skript. Also (die bash.exe gibt es inzwischen auch für Windows) faktisch nur für Linux.

          protocol='https';
          servername='example.com';
          

          Das ist ein wichtiger Teil der Konfiguaration. Servername ist der Hostname des Webservers.

          export LANG="de_DE.utf8";
          

          Da die über den Fehlerkanal erfolgenden Ausgaben des Programmes wget an die eingestellte Sprache und damit auch an bestimmte Formate z.B. für das Datum gebunden sind ist es wichtig die Sprache einzustellen, da man sonst nicht sicher sein kann, welche Spracheinstellung vorgenommen wurde.

          cd /tmp;
          umask 077;
          tmpFile=$(mktemp);
          

          Der Skriptinterpreter wechselt in das temporäre Verzeichnis, setzt die umask auf 077. Das bedeutet, dass an den gleich angelegten Verzeichnissen und Dateien nur derjenige Benutzer Rechte bekommt, unter dem das Skript ausgeführt wird. Dann wird auch noch eine temporäre Datei angelegt, deren Pfad und Name in $tmpfile steht.

          wget --delete-after -mr ${protocol}://${servername} 
          

          wget wird also benutzt und soll die abgeholten Dateien wieder löschen. wget wird angewiesen, Links im Webautritt zu folgen um wirklich alle verlinkten Ressourcen abzuholen.

          2>&1
          

          Die Notizen des gesprächigen grep erfolgen auf dem Fehlerkanal (2, StdErr), werden aber auf die Standardausgabe (1, StdOut) umgeleitet. Dies wird wegen der nachfolgenden Filter benötigt.

          | grep -P "^--\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d-- "
          

          In den Ausgaben finden sich Zeilen, welche postulieren, wann welche Ressource angefordert wurde. Diese haben als eindeutiges Merkmal den Zeitpunkt mit Datum im ISO-Format. Mit dem Perl-kompatiblen regulären Ausdruck filtert grep die Ausgaben so aus, dass nur diese Zeilen übrigbleiben. Diese sehen dann etwa so aus:

          --2019-11-18 12:57:21--  https://www.example.org/
          

          und werden "nachbearbeitet"

          | sed "s/^.* //"
          

          Der Streamline-Editor sed löscht aus diesen Zeilen das Datum mit den folgenden Leerzeichen. Es bleibt:

          https://www.example.org/
          

          in diesen sind jedoch etliche Einträge, die ich in der sitemap.txt nicht haben will:

          | grep -v "/autoindex-files/" 
          | grep -v "/font/"
          | grep -v "/robots.txt" 
          | grep -v "/bilder/" 
          | grep -v "/mime-icons/" 
          | grep -v "C=S" 
          | grep -v "C=M" 
          | grep -v "C=N" 
          | grep -v "download=1" 
          | grep -v "buttons.js" 
          | grep -v "css.css" 
          | grep -v "favicon.ico" 
          | grep -v "feed.rss" 
          | grep -v "opensearch.xml"
          

          und also jeweils mit grep ausfiltere.

          
          > ${tmpFile};
          
          

          Das Ergebnis dieses umfangreichen "Wuselns und Filterns" wird in eine temporäre Datei geschrieben.

          tmpFileSorted=$(mktemp);
          sort -u < ${tmpFile} > ${tmpFileSorted};
          

          Es wird eine zweite temporäre Datei angelegt und in diese der sortierte (und -u um gleiche Zeilen befreite) Inhalt der ersten temporäre Datei geschrieben.

          rm -f ${tmpFile} 2> /dev/null;
          

          Aufräumen:

          mv -f ${tmpFileSorted} /var/www/${servername}/sitemap.txt;
          

          Hierdurch wird die neue sitemap.txt erstellt. Der Pfad zum Document-Root kann und muss ggf. angepasst werden.

          chmod 644  /var/www/${servername}/sitemap.txt;
          

          Der Webserver muss diese sitemap.txt lesen können. Er soll diese ja ausliefern, falls eine Suchmaschine danach fragt.

          gzip -cf /var/www/${servername}/sitemap.txt > /var/www/${servername}/sitemap.txt.gz;
          

          Eine Spezialität meines Webservers. Wenn (falls) der Client (Suchmaschinen-Bot) signalsiert, dass gz-komprimierte Daten erlaubt sind, muss der Server diese nicht erst packen sondern liefert die vorgepackte Datei aus. Das spart Serverlast.

          chmod 644  /var/www/${servername}/sitemap.txt.gz;
          

          Auch die komprimierte Datei muss der Webservers also lesen können.

          Hints:

          Sitemap: https://www.example.org/sitemap.txt
          

          Mit ein wenig mehr Gewusel kann mauch einen RSS/Atom-Feed oder eine sitemap.xml erstellen… Allerdings ist (im Gegensatz zum RSS/Atom-Feed deren weiterführender Nutzen, nunja, fragwürdig.

          1. Hallo Raketenwissenschaftler,

            (Ich kann das neuerdings nicht selbst tun.)

            Du kannst das dann selbst tun, wenn du entweder deinen User-Account nutzt oder den Haken „speichere Identität in einem Cookie“ anhakst.

            Die Änderung ist die Reaktion auf ein Urteil des EUGH.

            Das ist ein rein informativer Beitrag.

            Freundliche Grüße,
            Christian Kruse

  2. Hallo

    Ich habe früher eine sehr schöne Suchmaschine gehabt, den ich einfach in meine Seite einbinden konnte. Es hatte die Seiten regelmäßig gescannt und die Sitemap dadurch erneuert. Ich suche seit sehr langer genau wieder so eine suchmaschine um in meine Seite zu integrieren aber finde ausser google gar nichts. Weiss eine von Euch wo ich suchen könnte?

    Wenn Du wirklich eine Suchmaschine suchst, schau' Dir mal diese von Werner Zenk an: https://werner-zenk.de/archiv/kleine-suchmaschine.php

    Sitemaps kannst Du damit aber nicht erstellen, dafür gibt es eigene Werkzeuge.

  3. Falls Perl verfügbar, ich empfehle Text::Query für die Volltextsuche. Dieses Modul hat 20 Jahre auf dem Buckel und kann mit UTF8, wie auch mit anderen Kodierungen, bestens umgehen. Es gibt nichts Vergleichbares.

    MFG