Pular para o conteúdo principal

Ferramentas do mecanismo de templates (ferramentas)

No Template Toolkit, a variável global $tools está disponível, que armazena um conjunto de ferramentas disponível em qualquer template e dentro de scrapers JS. Também existe a variável $tools.error, que contém a descrição dos erros, se eles ocorrerem durante a execução de todas as ferramentas.

Adição de consultas $tools.query.*

Esta ferramenta permite adicionar consultas às já existentes diretamente durante a execução da tarefa, formando-as com base nos resultados já extraídos. Pode ser usada como equivalente à função Parse to level nos scrapers em que ela não está implementada. Existem 2 métodos:

  • [% tools.query.add(query, maxLevel) %] - adiciona uma consulta única
  • [% tools.query.addAll(array, item, maxLevel) %] - adiciona um array de consultas

O parâmetro maxLevel indica até que nível adicionar as consultas, e é opcional: se for omitido, na prática o scraper adicionará novas consultas enquanto houver consultas. Também é recomendável ativar a opção Unique queries (Consultas únicas), para evitar loops e trabalho excessivo do scraper.

É possível definir um nível arbitrário para as subconsultas. Isso pode ser usado para distribuir a lógica, isto é, quando cada nível é uma funcionalidade separada.

exemplo:

  • [% tools.query.add({query => query, lvl => 1}) %] - adiciona a consulta em um nível específico.

exemplo para JS:

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

Resultado da execução do preset na captura de tela:

scraper:
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
...

Desserialização de estruturas JSON $tools.parseJSON()

Esta ferramenta permite desserializar dados no formato JSON em variáveis (objeto), acessíveis no motor de templates. Exemplo de uso:

[% tools.parseJSON(data) %]

Após a desserialização, as chaves do objeto obtido podem ser acessadas como variáveis e arrays comuns. Se for passada como argumento uma string com JSON inválido, o scraper registrará um erro em $tools.error.

Exemplo

Saída em CSV $tools.CSVline

Esta ferramenta converte automaticamente os valores para o formato CSV e adiciona uma quebra de linha, de modo que, no formato de resultado, basta listar as variáveis necessárias, e na saída haverá um arquivo CSV válido, pronto para importação no Google Docs / Excel / etc.

Exemplo de uso:

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

Vídeo usando $tools.CSVline():

Trabalho com base de dados SQLite $tools.sqlite.*

Esta ferramenta permite trabalhar de forma fácil e completa com bases de dados SQLite. Existem três métodos:

  • $tools.sqlite.get() - método que permite obter uma única informação da base de dados com SELECT, por exemplo:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT COUNT(*) AS count FROM test') %]
  • $tools.sqlite.run() - método que permite executar operações na base de dados (INSERT, DROP etc.), por exemplo:
[% res = tools.sqlite.run('results/test.sqlite', 'INSERT INTO test VALUES(?)', 'test') %]
  • $tools.sqlite.all() - método que permite exibir todos os dados da tabela, por exemplo:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT * FROM test') %]

Substituição de user-agent $tools.ua.*

Esta ferramenta destina-se à substituição de user-agent em scrapers que o utilizam (por exemplo, Net::HTTPNet::HTTP). Existem dois métodos:

  • $tools.ua.list() - contém a lista completa de user-agents disponíveis.
  • $tools.ua.random() - retorna um user-agent aleatório entre os disponíveis.

Exemplo de uso:

Exemplo
dica

A lista de todos os user-agents está armazenada no arquivo files/tools/user-agents.txt, que pode ser editado se necessário.

nota

Ao usar esta ferramenta para o parâmetro User agent nos scrapers, é necessário especificá-lo explicitamente:

[% tools.ua.random() %]

Suporte a JS em tools $tools.js.*

Esta ferramenta permite adicionar suas próprias funções JS e usá-las diretamente no motor de templates. Também é suportado o uso de módulos Node.js. As funções são adicionadas em Tools -> JavaScript Editor

Trabalho com base64 $tools.base64.*

Esta ferramenta permite trabalhar com base64 diretamente no scraper. Esta ferramenta tem 2 métodos:

  • $tools.base64.encode() - codifica texto em base64
  • $tools.base64.decode() - decodifica uma string base64 em texto

Exemplo de uso:

Exemplo

Referência de dados $tools.data.*

Esta ferramenta é, na prática, um objeto que contém uma grande quantidade de informações predefinidas - idiomas, regiões, domínios para mecanismos de busca etc. A lista completa de elementos (pode mudar no futuro):

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

Cada um desses elementos representa um array ou hash de dados, o conteúdo pode ser visualizado exibindo os dados, por exemplo, em JSON:

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

Armazenamento de dados em memória $tools.memory.*

Um armazenamento simples de key/value em memória, compartilhado por todas as tarefas, requisições de API etc., é zerado ao reiniciar o scraper. Existem três métodos:

  • [% tools.memory.set(key, value) %] - define o valor value para a chave key
  • [% tools.memory.get(key) %] - retorna o valor correspondente à chave key
  • [% tools.memory.delete(key) %] - remove da memória a entrada pela chave key

Obtenção de informações sobre a versão do A-Parser $tools.aparser.version()

Esta ferramenta permite obter informações sobre a versão do A-Parser e exibi-las no resultado.

Exemplo de uso:

[% tools.aparser.version() %]

Obtenção do ID da tarefa e do número de threads $tools.task.*

Esta ferramenta permite obter informações sobre o ID da tarefa e mostrar o número de threads. Existem dois métodos:

  • [% tools.task.id %] - retorna o ID da tarefa
  • [% tools.task.threadsCount %] - retorna a quantidade de threads usadas na tarefa

Interrupção da tarefa $tools.task.stop()

Esta ferramenta permite interromper a execução da tarefa a qualquer momento. Como argumento, recebe uma string que deve conter o motivo da interrupção da tarefa.

Exemplo de uso:

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