Zum Hauptinhalt springen

Besonderheiten der Arbeit mit Vorlagen in A-Parser

Testen von Vorlagen

Für das Debugging und Testen von Vorlagen gibt es in A-Parser ein spezielles Tool: Testen von Vorlagen

Methode .format für Arrays

In A-Parser werden die meisten Ergebnisse in Form von Arrays mit verschachtelten Elementen dargestellt. Technisch ausgedrückt werden die Ergebnisse als Array von Hashes präsentiert, wobei jeder Hash feste Schlüssel besitzt. Betrachten wir dies am Beispiel des Parsers SE::GoogleSE::Google, der in den Ergebnissen ein Array $serp mit den Elementen $link, $anchor und $snippet (und weiteren) enthält:

"serp" : [
{
"link" : "http://www.speedtest.net/",
"anchor" : "Speedtest.net by Ookla - The Global Broadband Speed <b>Test</b>",
"snippet" : "<b>Test</b> your Internet connection bandwidth to locations around the world with this <br>interactive broadband speed <b>test</b> from Ookla."
},
{
"link" : "http://www.speakeasy.net/speedtest/",
"anchor" : "Speakeasy Speed <b>Test</b>",
"snippet" : "Speakeasy Speed <b>Test</b> - Broadband Speed <b>Test</b>. Go to MegaPath Speed <b>Test</b> ... <br>02:38:36 PM Your IP: The Speakeasy Speed <b>Test</b> requires Flash v7 or higher."
},
{
"link" : "http://en.wikipedia.org/wiki/Test_cricket",
"anchor" : "<b>Test</b> cricket - Wikipedia, the free encyclopedia",
"snippet" : "<b>Test</b> cricket is the longest form of the sport of cricket. <b>Test</b> matches are played <br>between national representative teams with &quot;<b>Test</b> status&quot;, as determined by the&nbsp;..."
}
]

Für das bequeme Durchlaufen und Ausgeben von Daten aus einem solchen Array wurde die Methode .format erstellt, die es ermöglicht, alle Elemente des Arrays nach einem bestimmten Format zu verbinden, zum Beispiel alle Links durch einen Zeilenumbruch:

$serp.format('$link\n')

Was im Ergebnis jeden Link in einer neuen Zeile speichert:

http://www.speedtest.net/
http://www.speakeasy.net/speedtest/
http://en.wikipedia.org/wiki/Test_cricket

Ausgabe von Snippets:

$serp.format('$snippet\n')
<b>Test</b> your Internet connection bandwidth to locations around the world with this <br>interactive broadband speed <b>test</b> from Ookla.
Speakeasy Speed <b>Test</b> - Broadband Speed <b>Test</b>. Go to MegaPath Speed <b>Test</b> ...<br>02:38:36 PM Your IP: The Speakeasy Speed <b>Test</b> requires Flash v7 or higher.
<b>Test</b> cricket is the longest form of the sport of cricket. <b>Test</b> matches are played <br>between national representative teams with &quot;<b>Test</b> status&quot;, as determined by the&nbsp;...

Links, Anker und Snippets gleichzeitig:

$serp.format('Link: $link, Anchor: $anchor, Snippet: $snippet\n')
Link: http://www.speedtest.net/, Anchor: Speedtest.net by Ookla - The Global Broadband Speed <b>Test</b>, Snippet: <b>Test</b> your Internet connection bandwidth to locations around the world with this <br>interactive broadband speed <b>test</b> from Ookla.Link: http://www.speedtest.net/, Anchor: Speedtest.net by Ookla - The Global Broadband Speed <b>Test</b>, Snippet: <b>Test</b> your Internet connection bandwidth to locations around the world with this <br>interactive broadband speed <b>test</b> from Ookla.
Link: http://www.speakeasy.net/speedtest/, Anchor: Speakeasy Speed <b>Test</b>, Snippet: Speakeasy Speed <b>Test</b> - Broadband Speed <b>Test</b>. Go to MegaPath Speed <b>Test</b> ... <br>02:38:36 PM Your IP: The Speakeasy Speed <b>Test</b> requires Flash v7 or higher.Link: http://www.speakeasy.net/speedtest/, Anchor: Speakeasy Speed <b>Test</b>, Snippet: Speakeasy Speed <b>Test</b> - Broadband Speed <b>Test</b>. Go to MegaPath Speed <b>Test</b> ... <br>02:38:36 PM Your IP: The Speakeasy Speed <b>Test</b> requires Flash v7 or higher.
Link: http://en.wikipedia.org/wiki/Test_cricket, Anchor: <b>Test</b> cricket - Wikipedia, the free encyclopedia, Snippet: <b>Test</b> cricket is the longest form of the sport of cricket. <b>Test</b> matches are played <br>between national representative teams with &quot;<b>Test</b> status&quot;, as determined by the&nbsp;...Link: http://en.wikipedia.org/wiki/Test_cricket, Anchor: <b>Test</b> cricket - Wikipedia, the free encyclopedia, Snippet: <b>Test</b> cricket is the longest form of the sport of cricket. <b>Test</b> matches are played <br>between national representative teams with &quot;<b>Test</b> status&quot;, as determined by the&nbsp;...

Im Format kann auch die ursprüngliche Abfrage (oder andere verfügbare Variablen) verwendet werden, was es ermöglicht, eine Entsprechung von Abfrage zu jedem Element des Arrays festzulegen:

$serp.format('$query: $link\n')
test: http://www.speedtest.net/
test: http://www.speakeasy.net/speedtest/
test: http://en.wikipedia.org/wiki/Test_cricket

Methode .json für Objekte

Wie bekannt ist, werden alle Daten in A-Parser in Form von Variablen dargestellt. Es gibt eine Methode zur Serialisierung (Umwandlung in den Typ String) solcher Daten in das JSON-Format: .json. Zum Beispiel:

$results.json
Beispiel

Flag für statische Vorlage im Ergebnisdateinamen

Das Flag isStaticTemplate() ermöglicht es, eine dynamische Vorlage im Ergebnisdateinamen statisch zu machen. Funktionsprinzip: Bei Verwendung dieses Flags im Ergebnisdateinamen wird die Vorlage einmal beim Start der Aufgabe ausgeführt und gilt damit als statisch. Dies ermöglicht eine flexiblere Benennung von Dateien bei gleichzeitiger Beibehaltung der Möglichkeit, Links zu ihnen über die API-Methode getTaskResultsFile abzurufen.

Anwendungsbeispiel:

[% isStaticTemplate(); tools.js.eval('Date.now()') %]

Verfügbare Variablen

Bei der Formatierung von Abfragen

Bei der Formatierung von Ergebnissen

Bei der Bildung des Ergebnisdateinamens

Bei der Filterung von Ergebnissen

Variablen-Interpolation

Standardmäßig werden Vorlagen zwischen den Tags [% und %] geschrieben, alles außerhalb der Tags ist normaler Text, der so wie er ist in das Ergebnis übernommen wird. In A-Parser ist zusätzlich die Variablen-Interpolation aktiviert, die es ermöglicht, auf Variablen im Text über das Symbol $ zuzugreifen. Darüber hinaus wird auch \n als expliziter Zeilenumbruch interpoliert.

Beispiel:

Gesamtergebnisse für die Abfrage $query: $totalcount\n

An die Stelle von $query und $totalcount werden die Werte der entsprechenden Variablen gesetzt, \n wird durch einen Zeilenumbruch ersetzt. Äquivalente Schreibweise ohne Verwendung von Interpolation:

Gesamtergebnisse für die Abfrage [% query %]: [% totalcount; "\n" %]
Hinweis

Bitte beachten Sie, dass in Template Toolkit-Vorlagen Variablen ohne das Präfix $ geschrieben werden.

Anwendungsbeispiele für Vorlagen

Formatierung von Abfragen

Beispiel

In diesem Beispiel wird zu jeder Domain aus der Datei Alexa top500.txt der Suchoperator site: hinzugefügt und nach einem Leerzeichen werden Ersetzungen aus der Datei words.txt hinzugefügt.

Formatierung von Ergebnissen

Vorlage im Ergebnisformat

In diesem Beispiel werden die Abfrage, die Anzahl der Ergebnisse in der Ausgabe und die Anzahl der verwandten Keywords ausgegeben. Außerdem wird eine Liste der gesammelten Anker ausgegeben.

Vorlagen bei der Filterung von Ergebnissen

Vorlage bei der Filterung von Ergebnissen

Um eine Vorlage festlegen zu können, muss in der Dropdown-Liste Custom Template ausgewählt werden.
In diesem Beispiel werden als Ergebnis nur die Abfragen ausgegeben, für die weniger als 5 Ergebnisse gesammelt wurden.

Vorlagen bei Verwendung der Option "Regulären Ausdruck verwenden"

Vorlage bei Verwendung eines regulären Ausdrucks

In diesem Beispiel sammelt der Scraper Sätze, die das Wort enthalten, das als zweites Argument der Abfrage übergeben wurde. Der Algorithmus funktioniert so: Die Abfrage wird vom Abfrage-Builder durch das angegebene Trennzeichen in Link und Wort geteilt; der Scraper folgt dem Link, wählt den Text aus; das Wort aus der Abfrage wird in den regulären Ausdruck eingesetzt und damit werden die Sätze gesammelt.

Beispiel herunterladen

Wie man ein Beispiel in A-Parser importiert

eJyNVE1T2zAQ/StUEwYo1EkoDK0vncA003YCoSScHLejxmtXjWwZSYZkQv57d2XH
diiHXmTp6b3d1X54zSw3C3OrwYA1zA/WLHd75rMIYl5Iy05YzrUBTdcB+zK9Hvn+
FJb289JqPrdKI6Pmrpld5YDqeWGsSu/AlCZ0ufEDZlFqEKEvC+kmgSUKDoNZ0Tvr
997R5zQOgx/em0+zWTab6fA42N97KECvvAWs9vZ37t4GuA+Pj1hlalr6F0nttUK4
1nyFoPve8JQwY7XIElNT6Y0VyMJNGNb4UOmUU1Y6ed+rVF7swMODTglgQAdHjakJ
f4SpQkksJDTwEE+V907ELdDt1tKRZ5eULR5FwgqVcVn6pbCaWO4zgclAfaaQS3kR
YIZapQi5rJbgahtzwDruTNkunPZ7qWF+zKWBE2Yw1CHHQKKXN8KC5ljjcU7xIL5m
KhtIOYJHkA3N2b8shIywTwYxir5Wwtcp439sbOrntV09gn7SGENtxZ0ux9eNKlIj
lWyTIUUqLJ7NlSoyKlcPwQVAXufshmip0lC7qSxX3nEUcsgiZDYlG+QNtPMMNzBG
FXpOpsskn2wnoGyKSS4FVcQATlGZEPZMJEWF2Uqwranfao8tBwjOVRaLZIzJ0CKC
bTMU2RRnd5xdqTSXQDnKCimxxAbumlYbmKqkdGge+1J85VzsTL1VSppvk/LZuRYY
8DkFmGJV2l4rk3Mu5f3dqH3DmvbEw29rc+N3u7rwnsRC5BAJ7imddOnUdVPfp/X9
B7dGtJ6dun3PrdwhLc7Zhduft3DesvDxZ0sctfa/WqSL5/8hMXqfhURhtTD7VKnq
p1j/Otev/hr99QZ79I+5LdlUBOIihtU02IDM72/+Ar1q4iA=

Vorlagen in den Scraper-Einstellungen

Beispiel für die Einsetzung eines zufälligen User-Agents

Konfiguration vordefinierter Makros

In A-Parser können Vorlagen-Makros und vordefinierte Variablen konfiguriert werden, die global für alle Vorlagen verfügbar sind. Globale Makros können in Settings (Einstellungen) -> Additional settings (Zusätzliche Einstellungen) angegeben werden.

Standardmäßig ist dort bereits die Definition des Objekts $datefile enthalten, das zur Formatierung der Zeit für den Ergebnisdateinamen verwendet wird.

Hinzufügen und Verwenden eines Makros

In diesem Beispiel wird das Setzen einer globalen Variable gezeigt. Dies kann nützlich sein, wenn zum Beispiel dieselben Cookies in mehreren Instagram-Scrapern verwendet werden müssen.

Beispiel für die Einstellung:

Vorlage
Warnung

Beachten Sie die Syntax der schließenden Klammer der Vorlage -%]. Dies ist notwendig, um den Zeilenumbruch zu entfernen, da andernfalls bei Verwendung einer beliebigen Vorlage am Anfang eine Leerzeile hinzugefügt wird.

Beispiel für die Verwendung:

Vorlage