Representação e formatação de resultados
Formatos disponíveis para salvar resultados
Para a formatação de resultados no A-Parser, é utilizado o mecanismo de modelos Template Toolkit, o que permite salvar facilmente os resultados da extração de dados em diversos formatos:
- Em arquivos de texto como uma lista: um resultado por linha, através de um separador, em formato arbitrário
- Em arquivos
CSVcom a possibilidade de posterior importação para Excel, Google Docs, etc. - Em
XML,JSONe outros formatos de armazenamento de dados - Em
HTMLgerando páginas "on-the-fly" - No formato de dumps
SQLpara importação direta no banco de dados ou gravando diretamente no banco de dados SQLite - Em formato binário para salvar imagens (
jpg, png, gif,...), documentos (pdf, docx,...), arquivos executáveis e arquivos compactados (exe, dmg, zip,...) e quaisquer outros tipos de dados
Edição do formato do resultado
Result format (Formato do resultado) - permite formatar os resultados para a aparência desejada usando modelos, aplicado para cada combinação de consulta-resultados.

- O formato geral do resultado é definido no campo
Result format - O formato do resultado para cada scraper individualmente pode ser definido nas configurações do scraper em
Result format
O A-Parser suporta o trabalho com vários scrapers em uma única tarefa; no formato geral de resultados, é necessário indicar de qual scraper o resultado deve ser exibido:
$p1- resultados do primeiro scraper (
SE::Google na captura de tela), $p2- resultados do segundo scraper (
SE::Bing na captura de tela)- O número de ordem do scraper é exibido à esquerda do campo de seleção do scraper
$p1.presete$p2.presetimplicam que é necessário obter o valor do formato do resultado das configurações dos scrapers correspondentes- Neste exemplo,
$p1.presetpode ser substituído por$p1.serp.format('$link\n'), o que terá o mesmo efeito, enquanto o formato do resultado das configurações não será mais utilizado
O Result format (Formato do resultado) pode ser especificado em um editor multilinhas conveniente, clicando no ícone correspondente no campo de edição:

No formato geral de resultados, as seguintes variáveis estão disponíveis:
$query- a consulta após a formatação$query.*- todas as variáveis relacionadas à consulta, descritas no artigo Modelos em consultas$p1, $p2, ...- variáveis para acessar os resultados da extração de dados para cada scraper individualmente (Visualização de resultados possíveis para cada scraper)$p1.query, $p2.query, ...- consultas após a formatação, levando em conta o formato da consulta especificado nas configurações de cada scraper
Texto inicial e final
Para cada arquivo de resultados, um Texto Inicial/Final separado é especificado:
- Para a criação do cabeçalho de um arquivo CSV
- Para as tags iniciais e finais de um arquivo XML
- Para o header, cabeçalho e rodapé de arquivos HTML
- Para quaisquer outras variantes de aplicação
Para ativar esta funcionalidade, é necessário clicar no botão More options (Mais opções) na parte inferior do Editor de tarefas

No texto inicial e final, o uso do mecanismo de modelos Template Toolkit é suportado; variáveis disponíveis:
$query- consulta após a formatação$query.*- todas as variáveis relacionadas à consulta, descritas no artigo Modelos em consultas
Importante! Estas variáveis estão disponíveis apenas ao salvar cada consulta em um arquivo separado ou ao usar estas mesmas variáveis no Formato do nome do arquivo de resultado.
Formato do nome do arquivo de resultados
O A-Parser permite o uso de modelos também nos nomes dos arquivos resultantes, o que possibilita a criação automática de arquivos e pastas com base na data atual, pelo número de ordem da consulta, pela própria consulta e em qualquer outro formato.

No campo File name (Nome do arquivo), as seguintes variáveis são suportadas:
- Todas as variáveis disponíveis para o Formato Geral do Resultado
$queriesfile- o caminho e o nome do arquivo com as consultas; se as consultas forem especificadas através do formulário, conterá queries_from_text.txt$datefile- objeto do plugin date do mecanismo de modelos Template Toolkit, configurado para o formato de data%b-%d_%H-%M-%S; ao formatar, retorna a hora e data atuais na forma May-08_20-08-38, o formato pode ser alterado nas Configurações Adicionais
Por padrão, o nome do arquivo é criado de acordo com a data e hora no momento do início da tarefa
Exemplo complexo
reports/$queriesfile/${query}.txt
- Uma pasta reports será criada
- Uma subpasta com o nome do arquivo de consultas será criada
- Na subpasta, serão criados tantos arquivos quantas consultas forem utilizadas na tarefa; a própria consulta será usada como nome do arquivo com a extensão
.txt
A variável $query é escrita no formato ${query} para evitar a interpolação da extensão .txt como parte da variável; mais detalhes na documentação do mecanismo de modelos Template Toolkit
⏩ Vídeo. Nomeação de arquivos de resultados
Neste vídeo, apresentaremos alguns exemplos de nomeação do arquivo de resultado:
- Numeração do arquivo de resultado de acordo com as consultas.
- Numeração do arquivo de resultado + parte do nome da consulta.
- Nomeação do arquivo de resultado pela consulta, se a consulta for um link.
Visualização de resultados disponíveis
Cada scraper possui seu próprio conjunto de resultados; você pode visualizar a lista de resultados disponíveis passando o cursor sobre o scraper; em uma dica flutuante, será exibida uma lista de resultados simples e arrays, com a lista de elementos aninhados:

Marcados em Amarelo estão os resultados comuns a todos os scrapers:
$query- consulta passada ao scraper após a formatação$query.orig- consulta original (da forma como estava no arquivo ou no campo de entrada de consultas)$query.first- a primeira consulta ao usar opções de extração de dados aninhada (Parse all results ou Parse to level)$info.success- informações sobre o sucesso da extração de dados desta consulta$info.retries- número de tentativas utilizadas para esta consulta$info.stats- estatísticas de operação do scraper para esta consulta$pages.$i.data- array com as respostas brutas do servidor para a possibilidade de extração independente de informações adicionais
SE::Bing:$totalcount- número de resultados da listagem$adscom os elementos$link,$anchor,$visiblelink,$snippet,$positione$page- array com a lista de anúncios$related.$i.key- array com a lista de palavras-chave relacionadas$serpcom os elementos$link,$anchor,$snippet,$cache- array com a listagem principal do motor de busca
Observe que para os arrays a variável $i é explicitamente indicada, significando que existem vários elementos e eles podem ser acessados por índice (número da posição) ou percorrendo cada elemento em um loop.
O resultado $pages.$i.data será automaticamente alterado para $data para aqueles scrapers que não "navegam pelas páginas" dentro de uma única solicitação. Por exemplo, como
DeepL::Translator.
Apresentação dos resultados
O A-Parser foi criado para a extração de dados de todos os tipos de informações; para isso, foram introduzidos 2 tipos de resultados:
- Resultados simples (Flat)
- Arrays de resultados (Array)
Vamos considerar cada tipo usando o exemplo do scraper
SE::Google, captura de tela dos resultados:

Resultados simples
Simple results (Resultados simples) - quando uma consulta corresponde a um único resultado, exemplos:
- Número de resultados para a consulta ($totalcount)
- Se a consulta é um erro de digitação ($misspell, não apresentado na captura de tela)
Outros exemplos:
- O valor do texto traduzido ($translated) no scraper
DeepL::Translator - O número de domínios de referência ($domains), valor de confiança ($trustflow), backlinks ($backlinks), etc., no scraper
Rank::MajesticSEO
Resultados únicos são salvos em variáveis comuns (prefixo $ + nome em latim)
Arrays de resultados
Arrays de resultados - quando uma consulta corresponde a uma lista de resultados, cada elemento da lista, por sua vez, pode conter vários elementos aninhados. Vamos analisar o exemplo da listagem do Google - ela é representada no scraper pelo array $serp; para clareza, usaremos uma tabela, registrando os primeiros 5 resultados da listagem:
| Link ($link) | Âncora ($anchor) | Snippet ($snippet) |
|---|---|---|
| http://www.speedtest.net/ | Speedtest.net by Ookla - The Global Broadband Speed Test | Test your Internet connection bandwidth to locations around the world with this interactive broadband speed test from Ookla. |
| http://en.wikipedia.org/wiki/Test_cricket | Test cricket - Wikipedia, the free encyclopedia | Test cricket is the longest form of the sport of cricket. Test matches are played between national representative teams with "Test status", as determined by the ... |
| http://www.speakeasy.net/speedtest/ | Speakeasy Speed Test | Saturday 03-May 2014, 11:04:29 AM Your IP: The Speakeasy Speed Test requires Flash v7 or higher. Please update your browser. See Pricing Or Call Today |
| http://www.humanmetrics.com/cgi-win/jtypes2.asp | Personality test based on C. Jung and I. Briggs Myers type theory | Humanmetrics Jung Typology Test™ instrument uses methodology, questionnaire, scoring and software that are proprietary to Humanmetrics, and shall not be ... |
| http://test-ipv6.com/ | Test your IPv6. | This will test your browser and connection for IPv6 readiness, as well as show you your current IPV4 and IPv6 address. ... Test your IPv6 connectivity. JavaScript ... |
Cada posição da listagem é gravada em um array com 3 elementos aninhados - link ($link), âncora ($anchor), snippet ($snippet)
Outro exemplo - uma lista de palavras-chave relacionadas, que é salva no array $related:
| Palavra-chave ($key) |
|---|
| test wwe |
| depression test |
| test my speed |
| wonderlic test |
| test personality |
| act test |
| jiggle test |
| bipolar test |
Como se pode ver, este array possui apenas um elemento aninhado - palavra-chave ($key)
A numeração dos elementos dos arrays começa em 0, exemplo de acesso a elementos individuais do array:
$serp.0.link- o primeiro link da listagem$serp.3.anchor- a quarta âncora da listagem$related.0.key- a primeira palavra-chave relacionada
Mais detalhes sobre a formatação de resultados simples e arrays serão descritos abaixo
Princípios de formatação
Depois que o scraper coletou os dados em resultados simples e arrays, eles precisam ser exibidos (salvos em um arquivo) no formato desejado. Para conveniência e funcionalidade, o A-Parser utiliza o motor de templates Template Toolkit. Vamos analisar as construções frequentemente utilizadas; para isso, usaremos a ferramenta Teste de templates. Selecionaremos o projeto para o scraper
SE::Google:

Na captura de tela são apresentados 3 campos:
- JSON - representação interna dos dados no scraper
- Template - o modelo pelo qual ocorre a formatação do resultado
- Result - os dados diretamente transformados de acordo com o modelo especificado; é desta forma que o resultado será gravado no arquivo
Ao alterar o modelo, podemos mudar a aparência do resultado; considere o seguinte modelo:

Texto no campo Template (Modelo):
Relatório por consulta: $query
Concorrência: $totalcount
Lista de links, âncoras e snippets:
$serp.format('$link $anchor\n$snippet\n\n')
Vamos destacar as regras principais:
- Texto comum é exibido no resultado como está, sem alterações
- Para exibir resultados simples, é necessário exibir a variável contendo o resultado desejado com o prefixo
$no local apropriado - Para a formatação de arrays, utiliza-se o método
.format, falaremos sobre ele um pouco abaixo \né responsável pela quebra de linha
Formatação de arrays
Vamos analisar a construção:
$serp.format('$link $anchor\n$snippet\n\n')
Esta entrada significa que para o array $serp é necessário chamar o método .format com o parâmetro '$link $anchor\n$snippet\n\n'. O método .format une em uma string todos os elementos do array de acordo com o modelo especificado no parâmetro; o próprio modelo significa: para cada elemento do array $serp, exibir o link e a âncora separados por um espaço, depois, em uma nova linha, exibir o snippet, seguido por mais duas quebras de linha, resultando em uma linha vazia entre os resultados.
Uso do mecanismo de modelos
Exibição de variáveis
Para usar o mecanismo de modelos, é necessário inserir as tags [% %] e, dentro das tags, inserir a lógica que deve ser executada.


Percorrendo um array
Para exibir elementos de um array, deve-se usar a construção FOREACH:
[% FOREACH i IN p1.list;
i.cms _ "\n";
END %]
Mais informações e exemplos sobre o mecanismo de modelos em Características do funcionamento de modelos no A-Parser.
Exemplos
Exibição da concorrência
Saída da concorrência por consulta (número de resultados por consulta) para todos os scrapers de mecanismos de busca (
SE::Google,
SE::Yandex...).
Formato do resultado:
$query: $totalcount\n
Exemplo de resultado:
test: 3910000000
viagra: 278000000
janelas pvc: 3220000
...
Extração de links
Exibição de links da listagem de motores de busca.
Formato do resultado:
$serp.format('$link\n')
Exemplo de resultado:
http://www.speedtest.net/
http://www.speakeasy.net/speedtest/
http://en.wikipedia.org/wiki/Test_cricket
http://www.humanmetrics.com/cgi-win/jtypes2.asp
http://html5test.com/
http://test-ipv6.com/
...
Extração de sugestões
Exibição de sugestões de motores de busca.
Formato do resultado:
$results.format('$suggest\n')
Exemplo de resultado:
servidor de teste tanques online
testes de língua russa
receita de massa de panqueca
testículo
massa de pizza com leite
Exibição de dados sobre a consulta
No
Net::HTTP e scrapers baseados nele, a saída adicional está disponível:
$proxy- proxy no qual a consulta foi executada$headers- cabeçalhos da resposta$code- código da resposta$reason- status da resposta

Exibição de valores de variáveis em JSON
Saída de todos os redirecionamentos da consulta
Para esta tarefa, está disponível a variável $response, que permite obter quaisquer variáveis de consulta, incluindo todos os redirecionamentos anteriores.
Formato do resultado:
$response.Redirects.format('$URI\n--> ')$response.URI
Resultado do trabalho do scraper:

Saída em JSON usando o motor de templates para gravar a data
O exemplo mostra a saída dos resultados do scraper
Net::Whois em formato JSON.

O resultado será o domínio verificado, a data no momento da verificação e o resultado da verificação. Como visto no Formato do resultado, obtemos a data usando o motor de templates Template Toolkit.
Formato do resultado:
{
"domain": "$query",
"date": "[% USE d = date(format = '%d.%m.20%y', locale = 'C');d.format() %]",
"expire": "$p1.expire_date",
},
Exemplo de resultado:
[{
"domain": "a-parser.com",
"date": "05.05.2021",
"expire": "25.02.2022",
},
{}]
Baixar exemplo
Como importar um exemplo para o A-Parser
eJxtVG1v2jAQ/ivWCUQrZaxM2pdM+0BRkTYx6ErRPgQ0efWFeXXszHYYVZT/3nMS
EtruQyTf23P33EtK8Nw9uluLDr2DOCkhr98QwxJ9HP/4baRj79jNkWe5QjaBCHJu
HdrgnZw5kUFgygvlYbeLgFDo6ebGZjyglVvNGNuCMBmXegsxvQd/C7RPW4hONu6x
sSRDtlnfMME+s6C8SGsYkkZDMR5m4w9Xw6dRxJR54FQUqWejy09i3LhdXLLhrkfF
Yy5tizvIJ+NG/tkkI6eKPugKXvMD3hsqOJUKe/WcpCXPkAyDEBmsXbqxP3py5UJI
L43mqmEdOtR3YqMl0aV4bcg3MJfo5tZkfa66HaeOJW17gCCKOvZ7EwNxypXDCByV
OucUKl5bpEfLvbGrPNRD+hKMniq1wAOq3q3Gvy6kEjTOaUpBX9rA/7us3mBUHb3z
VAe0/yzVALG3BYHUwvXqWx8kzMLsibj4RbSVzKQn2c1MocOuXJHyETHvWrYMLcuM
xS5LA9zmpvXNUQtyTPqJTfNWV1Y7eEXkxWBeKh+MTuV+RRSsFHjyLPQ93clKz0y4
gsBMF0rRYBze9Qsyde0ggtC18E3wrE4R2Lf3EoE3Rrmva9KF+7KSFvBjKDCjXp5n
bSFp69XmbnFugbOlqrMnJ/F9c3Ku3tLAkNZ3b2ixiFq16865+weU50cdlxWN64+7
bZwCdK2MgDrkaBYQT6pnHsF5pA==
Verificação de site no Google News por palavra-chave

Formato do resultado:
[% linksToOneString = p1.serp.format('$link. ');
matches = linksToOneString.match('.+?(' _ p1.query.domain _ ').+?');
IF matches.0;
p1.query.orig _';yes' _ "\n";
ELSE;
p1.query.orig _';no' _ "\n";
END %]
Exemplo de resultado:
scraper google|a-parser.com;no
scraper google|forbes.ru;yes
Baixar exemplo
Como importar um exemplo para o A-Parser
eJylVVFv2jAQ/iuR1YpWo1EQ7UuqaaIMpk6stKV9AoRccqQeju3aCQVR/vvOTkjS
ruNlEoq4u+++O9+dz1uSUrM0txoMpIaE4y1R7j8JyagXhj+kjDl4Z173GeZLL5IJ
ZcLDX2EQ8Go8WNNEcSBNoqg2oC3PuOaOhggWNOMpaW5JulGA7HIFWrPIGlmEsqIx
zGUmEENWlGeIae3+DccwqkIS8WrIATRnYmkUumCQGn9wwCXmNfr7x0Psz3Wozg4m
omtQTkU8O4xXWq43GlLNwNQ8W0EQkN102iTYLKyr6UudUNu08fFEuNM+yKGAETqK
2PvqqZZvK+YvHO6kcWQxvtc4vZwIVMyfwSDqo6PvTCcN/8u3k4Y3sywvGeiNX8zB
DAnQ5lg+CTvzJmSCFuLM132viOQHqCi5pGYIbVxuwDTeufQGo95nQCE/4G6+T8Tx
lJTFGNEVPEgsxoK54dvXCKUbmtj6HUU0BWvdF+TUT9d28mgUsZRJQXleUTvKVZUf
BXvJx00i1maFbelrmaAqBUfgUt13Y0yOnEyQInO+d7kPCReUG2gSg6n2KSYSlZZU
Z2hgKWiaSj1UNh1Ub4kUHc4HsAJe+Tv6q4zxCK9dZ4FO14Xj55DhXxy78nT1UDiG
rxpzKFmcdDX8VXlFciBjPHj0hMfmLGEpyqbrrnBIAlQuAVRZshtbskRqKMMUzEV0
XEEKhJ35qmMdVaneHcMtKiMzPbfUeY2b+ztk3PSNFGe2IQZwKeUFIW8WJG1f9i75
IJPprmpyLQYq51IsWDwsruV+HDLxgGtzKLrSLj5bJpFxjk02cF8NW8cUTbVCdd6P
zl0XwlZyvyQxScnNz1F+cqUZ5nxhE0ywMfWoBeWccv54P6hbSDWgKEyy4Ly9cN/A
fs/zb8tpLnKN54S2E9rV//bTGz3L97o/lwneuf/iwvv2hBsAt55NO4VYYh9sN939
CUkvf0vssoO1oiKCKL8SO9ej4oEp36tt/ZkJtzucy9/mNgfZqlsI6rB9BofOPil/
AGn6WSM=
Saída do valor timestamp em formato de data
Às vezes acontece que não há uma data comum nos resultados, mas há um valor de timestamp como no scraper
Social::Instagram::Tag. Este valor pode ser representado em formato de data usando o motor de templates Template-Toolkit.

Formato do resultado:
[% USE date;
query.orig _ ": total posts - " _ postscount _ "\nPosts:\n";
FOREACH i IN posts;
d = date.format(i.time, format => '%d.%m.20%y');
i.link _ " - " _ d _ ":\n";
i.text _ "\n";
END %]
Exemplo de resultado:
sport: total posts - 96500663
Posts:
https://www.instagram.com/p/COfJHshAkeD/ - 05.05.2021:
Quelques exemples de notre nouvelle campagne de communication personnalisable avec le nom des clubs 😀
Vous préférez quel visuel : 1, 2, 3, 4, 5 ? 🤔
#clubnormand #tennis #padel #beachtennis #tenniscourt #padelcourt #beachtenniscourt #lnt #LigueNormandieTennis #🎾 #sport #normandie #normandietourisme
https://www.instagram.com/p/COfJG7olavg/ - 05.05.2021:
💥 Sau màn lật đổ “Bà già” thành công, Nửa xanh thành Milan chính thức vượt qua Nửa đỏ về số lần lên đỉnh nước Ý nhiều nhất lịch sử.
-----------------------------
➖ Website: https://webthethao247.com/
➖ https://g.page/webthethao247?share
#wtt247 #webthethao247 #thethao #sport #bongda #SerieA #InterMilan #Juventus #ACMilan
https://www.instagram.com/p/COfJG1Hg7ax/ - 05.05.2021:
Which Skill was better 1 or 2? 🤔👇
Follow @ftb4ll for more 💥
Follow @ftb4ll for more 💥
Follow @ftb4ll for more 💥
________________________________________
Leave a Like 👍🏽
Subscribe for more 🔔
Leave your thoughts in the Comments 💬
________________________________________
❌Ignore the Tags ❌
#football #soccer #fussball #futbol #fifa #championsleague #bundesliga #ucl #footballmemes #goal #transfer #sports #penalty #ultimateteam #pacybits #fut #ultras #laliga #freekick #referee #sport #calcio #messi #ronaldo #skills #premierleague #foul #footballseason
https://www.instagram.com/p/COfIlXqhfAa/ - 05.05.2021:
Be Fuckin’ Ready 🤣🤣🤣
Get ready to fly!!!! 🏐🏐🏐🏐
Follow - @crackonkings
#beachball #nalin&kane #trance #music #90s #onyerhead #festival #party #afterparty #love #summer #uk #happy #sesh #crackon #football #sport #festivaloutfit #festivalfashion #sun #dj #dancing #club #festivalgirl #house #techno #rave
...
Baixar exemplo
Como importar um exemplo para o A-Parser
eJx1VNtuGjEQ/RXLCkoj0VVSqS9bpRKhoFJRNuXyxKLKxQa58dqO7aVBiH/vjPeW
pM0+7RzPzDlzsU80MP/g753wIniark/Uxn+a0oXZSqbSdKJ9YHvHijRdsj15T5ay
EAAVlgRDOAuCiCewlKB9apnzwmGm9RsJwImLHStVoP0TDUcrgMschHOSYwbJwd4Z
V7AASqIbPTBVotu6R1aLUeT8lOtcP5bCHRPj5J78JDlNQVBgiljjgwehOQU4GltT
6hB98lzfI5LCT05jlnE2Hw2GX4kkk1nljnDg5DYyJZWYdzIJUHifVCa5/Uwuezzp
FcmH697x8gpiCHwyUVI/RKpGAa/ENYSVVxBPraAIj2ZfSG9Dz5tNn1aF+3Fkgrov
7E1Sz6U9XLCDWBrslYydb2LAmrECu3WB6vG0qeAqCU+YgXEugzSaqYoBx9WxrrR8
jN3WBnyxxVL4sTMFQKi6Bo+NujW9iDaFFGWM/VHF0HTHlBd96kHqmIEQ/vpEBuFY
MC6zqAfwEzV6oNRUHITq3GL+u1IqDrs12EHQpA78v0v2T45zW95zKti6Pw40tFmi
dZd976K4mZo9VM5/Qd1KFjKA7Ye4T4BeA/gghG17NsOeFcaJlqbOXLPDTbNC44p3
IxvYDnpRxouxvAS3Ru/kPquvTeNZ6iVc50wPDV5HrEuXSsFYvJh36zHw9RjQ6AS+
Dh5GCiy9ua40GKP8t0Ul1ToJ6/cRBRbQyeesdcotU2o1nz4/wUAfjM30yLlX44uL
Qb01Drm2sLx7A2sFpZ037cvSPlWnt96X9HSGuf3291UAFonugEG3PAyFpjfnvwdy
t1Y=