Hoppa till huvudinnehåll

Funktioner för mallar i A-Parser

Testning av mallar

För felsökning och testning av mallar i A-Parser finns ett speciellt verktyg: Testning av mallar

Metoden .format för arrayer

I A-Parser presenteras de flesta resultat som arrayer med inbäddade element. Tekniskt sett presenteras resultaten som en array av hashar, där varje hash har fasta nycklar. Låt oss gå igenom det med exemplet på scrapern SE::GoogleSE::Google, i resultaten innehåller den arrayen $serp med elementen $link, $anchor och $snippet (och andra):

"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 att bekvämt iterera över och skriva ut data från en sådan array skapades metoden .format, som gör det möjligt att sammanfoga alla element i arrayen enligt ett visst format, till exempel alla länkar separerade med radbrytning:

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

Vilket resulterar i att varje länk sparas på en ny rad:

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

Utskrift av 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;...

Länkar, ankare och snippets samtidigt:

$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;...

I formatet kan man även använda den ursprungliga frågan (eller andra tillgängliga variabler), vilket gör det möjligt att ställa in en matchning mellan fråga och varje element i arrayen:

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

Metoden .json för objekt

Som bekant presenteras all data i A-Parser i form av variabler. Det finns en metod för serialisering (omvandling till typen String) av sådan data till JSON-format: .json. Till exempel:

$results.json
Exempel

Flagga för statisk mall i Resultatfilens namn

Flaggan isStaticTemplate() gör det möjligt att göra en dynamisk mall i Resultatfilens namn statisk. Funktionsprincip: vid användning av denna flagga i Resultatfilens namn, kommer mallen att köras en gång vid start av uppgiften och därmed betraktas som statisk. Detta möjliggör mer flexibel namngivning av filer samtidigt som man behåller möjligheten att få länkar till dem via API-metoden getTaskResultsFile.

Exempel på användning:

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

Tillgängliga variabler

Vid formatering av frågor

Vid formatering av resultat

Vid skapande av resultatfilens namn

Vid filtrering av resultat

Interpolering av variabler

Som standard skrivs mallar mellan taggarna [% och %], allt utanför taggarna är vanlig text som kommer att skickas till resultatet som den är. I A-Parser är dessutom interpolering av variabler aktiverat, vilket gör det möjligt att referera till variabler i texten via symbolen $. Utöver detta interpoleras även \n som en explicit radbrytning.

Exempel:

Totalt antal resultat för frågan $query: $totalcount\n

På platsen för $query och $totalcount kommer värdena för motsvarande variabler att infogas, och \n ersätts med en radbrytning. Ekvivalent skrivsätt utan användning av interpolering:

Totalt antal resultat för frågan [% query %]: [% totalcount; "\n" %]
anteckning

Observera att i Template Toolkit-mallar skrivs variabler utan prefixet $.

Användningsfall för mallar

Formatering av frågor

Exempel

I detta exempel kommer sökoperatorn site: att läggas till för varje domän från filen Alexa top500.txt, och efter ett mellanslag läggs substitutioner från filen words.txt till.

Formatering av resultat

Mall i resultatformat

I detta exempel kommer frågan, antalet resultat i sökresultaten och antalet relaterade sökord att skrivas ut. Dessutom kommer en lista över insamlade ankare att skrivas ut.

Mallar vid filtrering av resultat

Mall vid filtrering av resultat

För att kunna ange en mall bör man välja Custom Template i rullgardinsmenyn.
I detta exempel kommer endast de frågor som har samlat in färre än 5 resultat att visas som resultat.

Mallar vid användning av alternativet Använd regex

Mall vid användning av regex

I detta exempel kommer scrapern att samla in meningar som innehåller det ord som skickats som det andra argumentet i frågan. Algoritmen fungerar så här: frågan delas upp av Query Builder med den angivna separatorn i en länk och ett ord; scrapern går till länken, väljer texten; ordet från frågan infogas i det reguljära uttrycket och meningar samlas in med hjälp av det.

Ladda ner exempel

Hur man importerar ett exempel till A-Parser

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=

Mallar i scraper-inställningar

Exempel på substitution av slumpmässig user-agent

Inställning av fördefinierade makron

I A-Parser kan man ställa in mallmakron och fördefinierade variabler som kommer att vara tillgängliga globalt för alla mallar. Globala makron kan anges i Settings -> Advanced Settings.

Som standard finns där redan en fördefiniering av objektet $datefile, som används för att formatera tid för resultatfilens namn.

Lägga till och använda ett makro

I detta exempel visas inställning av en global variabel. Detta kan vara användbart, till exempel om det är nödvändigt att använda samma cookies i flera Instagram-scrapers.

Exempel på inställning:

Mall
varning

Observera syntaxen för mallens avslutande parentes -%]. Detta behövs för att ta bort radbrytningen, annars kommer en tom rad att läggas till i början vid användning av vilken mall som helst.

Exempel på användning:

Mall