Zum Hauptinhalt springen

Template-Engine-Tools (tools)

In der Template-Engine Template Toolkit ist eine globale Variable $tools verfügbar, die eine Reihe von Werkzeugen enthält, die in jedem Template und innerhalb von JS-Parsern verfügbar sind. Außerdem gibt es die Variable $tools.error, die Fehlerbeschreibungen enthält, falls diese während der Arbeit aller Werkzeuge auftreten.

Abfragen hinzufügen $tools.query.*

Dieses Werkzeug ermöglicht es, Abfragen zu bereits bestehenden direkt während der Ausführung einer Aufgabe hinzuzufügen, indem sie auf Basis der bereits erfassten Ergebnisse gebildet werden. Es kann als Analogon zur Funktion Parse to level in jenen Scrapern verwendet werden, in denen diese nicht implementiert ist. Es gibt 2 Methoden:

  • [% tools.query.add(query, maxLevel) %] - fügt eine einzelne Abfrage hinzu
  • [% tools.query.addAll(array, item, maxLevel) %] - fügt ein Array von Abfragen hinzu

Der Parameter maxLevel gibt an, bis zu welcher Ebene Abfragen hinzugefügt werden sollen, und ist optional: Wenn er weggelassen wird, fügt der Parser faktisch neue Abfragen hinzu, solange welche vorhanden sind. Es wird außerdem empfohlen, die Option Unique queries (Einzigartige Abfragen) zu aktivieren, um Endlosschleifen und unnötige Arbeit des Parsers zu vermeiden.

Es besteht die Möglichkeit, eine beliebige Ebene für Unterabfragen festzulegen. Dies kann zur Verteilung der Logik genutzt werden, d. h. wenn jede Ebene eine separate Funktionalität darstellt.

Beispiel:

  • [% tools.query.add({query => query, lvl => 1}) %] - fügt eine Abfrage auf einer bestimmten Ebene hinzu.

Beispiel für JS:

this.query.add({
query: "some query",
lvl: 1,
})
Beispiel

Ergebnis der Preset-Arbeit im Screenshot:

parser:
parser
what is parsing in programming
parsing in compiler
compiler and parser development
what is syntax analysis
difference between lexical analysis and syntax analysis
syntax analyzer
parser programming language
parser:
parser definition
xml parser
parser generator
parser swtor
parser c++
ffxiv parser
html parser
parser java
what is parsing in programming:
parse wikipedia
parser compiler
what is a parser
parsing programming languages
definition of parser
parsing c++
parser define
parsing java
html parser:
online html parser
html parser php
html parser java
...

JSON-Strukturen parsen $tools.parseJSON()

Dieses Werkzeug ermöglicht die Deserialisierung von Daten im JSON-Format in Variablen (Objekte), die in der Template-Engine verfügbar sind. Anwendungsbeispiel:

[% tools.parseJSON(data) %]

Nach der Deserialisierung kann auf die Schlüssel des erhaltenen Objekts wie auf normale Variablen und Arrays zugegriffen werden. Wenn als Argument ein String mit ungültigem JSON angegeben wird, schreibt der Parser den Fehler in $tools.error.

Beispiel

Ausgabe in CSV $tools.CSVline

Dieses Werkzeug bringt Werte automatisch in das CSV-Format und fügt einen Zeilenumbruch hinzu. Dadurch reicht es im Ergebnisformat aus, die benötigten Variablen aufzuführen, und am Ausgang erhält man eine valide CSV-Datei, die für den Import in Google Docs / Excel / etc. bereit ist.

Anwendungsbeispiel:

[% tools.CSVline(query, p1.serp.0.link, p2.title) %]

Video mit der Verwendung von $tools.CSVline():

Arbeit mit der SQLite-Datenbank $tools.sqlite.*

Dieses Werkzeug ermöglicht die einfache und vollwertige Arbeit mit SQLite-Datenbanken. Es gibt drei Methoden:

  • $tools.sqlite.get() - Methode zum Abrufen einer einzelnen Information aus der DB mittels SELECT, zum Beispiel:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT COUNT(*) AS count FROM test') %]
  • $tools.sqlite.run() - Methode zum Ausführen von Operationen mit der DB (INSERT, DROP etc.), zum Beispiel:
[% res = tools.sqlite.run('results/test.sqlite', 'INSERT INTO test VALUES(?)', 'test') %]
  • $tools.sqlite.all() - Methode zur Ausgabe aller Daten aus einer Tabelle, zum Beispiel:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT * FROM test') %]

User-Agent-Ersetzung $tools.ua.*

Dieses Tool ist für das Ersetzen des User-Agents in Scrapern gedacht, die diesen verwenden (zum Beispiel Net::HTTPNet::HTTP). Es gibt zwei Methoden:

  • $tools.ua.list() - enthält die vollständige Liste der verfügbaren User-Agents.
  • $tools.ua.random() - gibt einen zufälligen aus den verfügbaren User-Agents aus.

Anwendungsbeispiel:

Beispiel
Tipp

Die Liste aller User-Agents wird in der Datei files/tools/user-agents.txt gespeichert, die bei Bedarf bearbeitet werden kann.

Hinweis

Bei Verwendung dieses Werkzeugs für den Parameter User agent in Scrapern muss dieser explizit angegeben werden:

[% tools.ua.random() %]

JS-Unterstützung in tools $tools.js.*

Dieses Werkzeug ermöglicht es, eigene JS-Funktionen hinzuzufügen und diese direkt in der Template-Engine zu verwenden. Auch die Verwendung von Node.js-Modulen wird unterstützt. Funktionen werden unter Tools (Werkzeuge) -> JavaScript Editor (JavaScript-Editor) hinzugefügt.

Arbeit mit base64 $tools.base64.*

Dieses Werkzeug ermöglicht die Arbeit mit base64 direkt im Parser. Dieses Werkzeug hat 2 Methoden:

  • $tools.base64.encode() - kodiert Text in base64
  • $tools.base64.decode() - dekodiert einen base64-String in Text

Anwendungsbeispiel:

Beispiel

Datenreferenz $tools.data.*

Dieses Werkzeug ist im Grunde ein Objekt, das eine große Menge an voreingestellten Informationen enthält – Sprachen, Regionen, Domains für Suchmaschinen usw. Vollständige Liste der Elemente (kann sich in Zukunft ändern):

"YandexWordStatRegions", "TopDomains", "CountryCodes", "YahooLocalDomains", "GoogleDomains", "BingTranslatorLangs", "Top1000Words", "GoogleLangs", "GoogleInterfaceLangs", "EnglishMonths", "GoogleTrendsCountries"

Jedes dieser Elemente stellt ein Array oder einen Hash von Daten dar. Der Inhalt kann eingesehen werden, indem die Daten beispielsweise in JSON ausgegeben werden:

[% tools.data.GoogleDomains.json() %]

Datenspeicher im Arbeitsspeicher $tools.memory.*

Ein einfacher Key/Value-Speicher im Arbeitsspeicher, gemeinsam für alle Aufgaben, API-Anfragen usw., der beim Neustart des Parsers zurückgesetzt wird. Es gibt drei Methoden:

  • [% tools.memory.set(key, value) %] - setzt den Wert value für den Schlüssel key
  • [% tools.memory.get(key) %] - gibt den dem Schlüssel key entsprechenden Wert zurück
  • [% tools.memory.delete(key) %] - löscht den Eintrag zum Schlüssel key aus dem Speicher

Informationen über die A-Parser-Version abrufen $tools.aparser.version()

Dieses Werkzeug ermöglicht es, Informationen über die Version von A-Parser abzurufen und im Ergebnis auszugeben.

Anwendungsbeispiel:

[% tools.aparser.version() %]

Aufgaben-ID und Thread-Anzahl abrufen $tools.task.*

Dieses Werkzeug ermöglicht es, Informationen über die Aufgaben-ID abzurufen und die Anzahl der Threads anzuzeigen. Es gibt zwei Methoden:

  • [% tools.task.id %] - gibt die Aufgaben-ID zurück
  • [% tools.task.threadsCount %] - gibt die Anzahl der in der Aufgabe verwendeten Threads zurück

Aufgabe stoppen $tools.task.stop()

Dieses Werkzeug ermöglicht es, die Ausführung einer Aufgabe jederzeit zu stoppen. Als Argument wird ein String akzeptiert, der den Grund für den Stopp der Aufgabe enthalten sollte.

Anwendungsbeispiel:

[% IF query.num == 3;
tools.task.stop('Stop after 3 queries');
END %]