Einfacher Node-Worker, der Sitemaps crawlt, um einen Algolia-Index auf dem neuesten Stand zu halten.
Es verwendet einfache CSS-Selektoren, um den eigentlichen zu indizierenden Textinhalt zu finden.
Diese App nutzt die Bibliothek von Algolia.
Dieses Skript sollte über crontab ausgeführt werden, um die gesamte Website in regelmäßigen Abständen zu crawlen.
<loc>
enthalten, also urlset/url/loc
.npm i algolia-webcrawler -g
git clone [email protected]:DeuxHuitHuit/algolia-webcrawler.git
git clone https://github.com/DeuxHuitHuit/algolia-webcrawler.git
algolia-webcrawler --config config.json
cd zum Stammverzeichnis des Projekts und führen Sie node app
aus.
Die Konfiguration erfolgt über die Datei config.json.
Sie können eine config.json-Datei auswählen, die an anderer Stelle gespeichert ist, indem Sie das Flag --config verwenden.
node app --config my-config.json
Zumindest können Sie config.json bearbeiten, um Werte für die folgenden Optionen festzulegen: „app“, „cred“, „indexname“ und mindestens ein „sitemap“-Objekt. Wenn Sie mehrere Sitemaps haben, listen Sie diese bitte alle auf: Unter-Sitemaps werden nicht gecrawlt.
Die meisten Optionen sind erforderlich. Sofern nicht anders angegeben, werden keine Standardwerte bereitgestellt.
Der Name Ihrer App.
Algolia-Anmeldeinformationsobjekt. Siehe „cred.appid“ und „cred.apikey“.
Ihre Algolia-App-ID.
Ihr generierter Algolia-API-Schlüssel.
Einfache Verzögerung zwischen den einzelnen Anfragen an die Website in Millisekunden.
Die maximale Anzahl an Millisekunden, die ein Eintrag überleben kann, ohne aktualisiert zu werden. Nach jedem Durchlauf sucht die App nach alten Einträgen und löscht diese. Wenn Sie alte Einträge nicht entfernen möchten, setzen Sie diesen Wert auf 0.
Eine Filterzeichenfolge, die beim Löschen alter Einträge angewendet wird. Nützlich, wenn Sie alte Aufzeichnungen aufbewahren möchten, die nicht aktualisiert werden. Es werden nur Datensätze gelöscht, die alt sind und dem Filter entsprechen.
Die maximale Größe in Bytes eines Datensatzes, der an Algolia gesendet werden soll. Der Standardwert beträgt 10.000, kann jedoch je nach Plan variieren.
Wenn der Datensatz zu groß ist (basierend auf maxRecordSize), entfernt der Crawler Werte aus dem Textschlüssel. Verwenden Sie dieses Attribut, um zu konfigurieren, welche Schlüssel bereinigt werden sollen, wenn der Datensatz zu groß ist.
Ein Objekt, das verschiedene Werte enthält, die sich auf Ihren Index beziehen.
Ihr Indexname.
Ein Objekt, das als Argument für Index#setSetting
-Methode von Algolia fungiert.
Bitte lesen Sie die Dokumentation von Algolia zu diesem Thema. Es kann jedes gültige, für diese Methode dokumentierte Attribut verwendet werden.
Ein String-Array, das definiert, welche Attribute indizierbar sind, was bedeutet, dass eine Volltextsuche für sie durchgeführt wird. Eine vollständige Liste möglicher Attribute finden Sie im Abschnitt „Gespeicherte Objekte“.
Ein String-Array, das definiert, welche Attribute filterbar sind, was bedeutet, dass Sie sie verwenden können, um einige Datensätze von der Rückgabe auszuschließen. Eine vollständige Liste möglicher Attribute finden Sie im Abschnitt „Gespeicherte Objekte“.
Dieses Array sollte eine Liste von Sitemap-Objekten enthalten.
Eine Sitemap ist ein wirklich einfaches Objekt mit zwei String-Eigenschaften: URL und Lang. Die Eigenschaft „url“ ist die genaue URL für diese Sitemap. Die Eigenschaft „lang“ sollte die Hauptsprache angeben, die von der in der Sitemap gefundenen URL verwendet wird.
Ein Objekt, das verschiedene http-Optionen enthält.
Die Authentifizierungszeichenfolge im Format username:password
des Knotens. Wenn Sie keine Authentifizierung benötigen, müssen Sie dennoch einen leeren String angeben.
Ein Objekt, das CSS-Selektoren enthält, um den Inhalt im HTML der Seiten zu finden.
CSS-Selektor für den Titel der Seite.
CSS-Selektor für die Beschreibung der Seite.
CSS-Selektor für das Bild der Seite.
CSS-Selektor für den Titel der Seite.
CSS-Selektor für die Eigenschaft „key“. Sie können nach Wunsch benutzerdefinierte Schlüssel hinzufügen.
Selektoren können auch in Langform (also als Objekt) definiert werden, was die Angabe benutzerdefinierter Eigenschaften ermöglicht.
Name der Attribute, nach denen nach Werten gesucht werden soll. Der Standardwert ist ['content', 'value'].
Der tatsächlich zu verwendende CSS-Selektor.
Die maximale Anzahl der zu überprüfenden Knoten.
Ein Objekt, das CSS-Selektoren enthält, um Elemente zu finden, die nicht indiziert werden dürfen. Diese CSS-Selektoren werden für jeden Knoten abgeglichen und mit allen übergeordneten Knoten verglichen, um sicherzustellen, dass keiner der übergeordneten Knoten ausgeschlossen wird.
CSS-Selektor ausgeschlossener Elemente für den Text der Seite.
CSS-Selektor ausgeschlossener Elemente für die Eigenschaft „Schlüssel“. Der Schlüssel muss mit dem in selectors[key] verwendeten Schlüssel übereinstimmen.
Ein Objekt, das eine Formatierungszeichenfolge enthält. Ihre Werte werden aus dem ursprünglichen Ergebnis entfernt, das mit dem zugehörigen CSS-Selektor erhalten wurde.
Die Zeichenfolge, die aus dem Titel der Seite entfernt werden soll. Kann auch ein Array von Zeichenfolgen sein.
Die Zeichenfolge, die aus dem angegebenen Schlüssel entfernt werden soll. Kann auch ein Array von Zeichenfolgen sein.
Die Analysefunktion, die zum Formatieren des Werts verwendet wird. Unterstützte Typen sind „integer“, „float“, „boolean“ und „json“.
Der für den angegebenen Schlüssel eingefügte Standardwert. Wird gesetzt, wenn der Wert falsch ist.
Eine Liste von Javascript-Dateien zum Laden von benutzerdefiniertem Code vor dem Speichern des Datensatzes. Die einzige Voraussetzung besteht darin, die folgende Schnittstelle zu implementieren, wobei record
das zu speichernde Objekt und „data“ der HTML-Code ist.
module . exports = ( record , data ) => {
record . value_from_plugin = 'Yay!' ;
} ;
Alle URLs werden mit allen Elementen in der Blacklist verglichen. Wenn die vollständige URL oder ihre Pfadkomponente in der Blacklist enthalten ist, wird sie nicht indiziert.
Das auf dem Server von Algolia gespeicherte Objekt ist wie folgt
{
date : new Date ( ) ,
url : 'http://...' ,
objectID : shasum . digest ( 'base64' ) ,
lang : sitemap . lang ,
http : { } ,
title : '' ,
description : '' ,
image : '' ,
text : [ '...' ]
}
Zu beachten ist, dass es sich bei Text um ein Array handelt, da wir versucht haben, die ursprüngliche Beziehung zwischen Textknoten und tatsächlichem Wert beizubehalten. Algolia kommt damit gut zurecht.
Eine URL kann so eingestellt werden, dass sie nach jeder gespeicherten URL in Algolia einen Ping an einen Webserver zurücksendet. Der Webserver erhält einen Post mit diesen Informationen:
result=[success|error]
action=[update|delete]
url=the url inserted
last-modified=[the http header value]
source=algolia-crawler
Die Indizierung erfolgt automatisch bei jedem Lauf. Um die Funktionsweise der Indizierung zu optimieren, sehen Sie sich bitte die Konfigurationsoption index.settings an.
MIT
Mit Liebe in Montreal von Deux Huit Huit hergestellt
Urheberrechte (c) 2014–2019