Pular para o conteúdo principal

Métodos auxiliares(utils, tools, sleep)

this.utils.*

.updateResultsData(results, data)

await this.utils.updateResultsData(results, data) - método para preenchimento automático de $pages.$i.data e $data, deve ser chamado para adicionar conteúdo à página de resultados

.urlFromHTML(url, base)

await this.utils.urlFromHTML(url, base) - processa um link obtido do código HTML - decodifica entities (& etc.), opcionalmente pode-se passar base - a URL base (por exemplo, a URL da página de origem), permitindo obter o link completo

.url.extractDomain(url, removeDefaultSubdomain)

await this.utils.url.extractDomain(url, removeDefaultSubdomain) - o método recebe um link como primeiro parâmetro e retorna o domínio desse link. O segundo parâmetro opcional determina se deve remover o subdomínio www do domínio. Por padrão é 0 - ou seja, não remover.

.url.extractTopDomain(url)

await this.utils.url.extractTopDomain(url) - o método recebe um link como primeiro parâmetro e retorna o domínio desse link, sem subdomínios.

.url.extractTopDomainByZone(url)

await this.utils.url.extractTopDomainByZone(url) - o método recebe um link como primeiro parâmetro e retorna o domínio desse link, inclusive sem subdomínios. Funciona com todas as zonas regionais

.url.extractMaxPath(url)

await this.utils.url.extractMaxPath(url) - o método recebe uma string e extrai uma URL dela

.url.extractWOParams(url)

await this.utils.url.extractWOParams(url)- o método recebe um link e retorna o mesmo link cortado até a string de parâmetros. Ou seja, retornará a URL antes do ?

.removeHtml(string)

await this.utils.removeHtml(string) - o método recebe uma string e a retorna limpa de tags HTML

.removeNoDigit(string)

await this.utils.removeNoDigit(string) - o método recebe uma string, remove tudo exceto dígitos e retorna o resultado

.removeComma(string)

await this.utils.removeComma(string) - o método recebe uma string, remove caracteres como .,\r\n e retorna o resultado

.getAllBlocks(html, regexp, opts?)

await this.utils.getAllBlocks(html, regexp, opts?) - obtém todos os blocos na página com as respectivas tags de fechamento, o método recebe uma string HTML e uma expressão regular que indica o início do bloco (quaisquer blocos que possuam tags de fechamento correspondentes, por exemplo <div>...</div>), retornando um array com todos os blocos encontrados

Opções opts:

  • searchStartIndex - indica o índice na string a partir do qual iniciar a busca, por padrão 0
const blocks = this.utils.getAllBlocks(html, /<div [^>]*?class="results"/)

.getAllBlocksByAttr(html, tag, attrName, attrRegExp, opts?)

await this.utils.getAllBlocksByAttr(html, tag, attrName, attrRegExp, opts?) - método semelhante ao .getAllBlocks, mas em vez de uma expressão regular para buscar o início do bloco, especifica-se o nome da tag, o nome do atributo para a busca (por exemplo id, class) e uma expressão regular que será aplicada ao valor do atributo definido

const blocks = this.utils.getAllBlocksByAttr(html, 'div', 'class', /results/)

await tools.*

Objeto global tools, permite acessar as funções integradas do A-Parser

Análogo às ferramentas do motor de modelos $tools.*

nota

tools.query não está disponível, deve-se usar this.query

await tools.createTemplate(string)

Permite usar o motor de modelos Template Toolkit dentro do scraper JavaScript.

let template = await tools.createTemplate("Hello [% content %]!")
template = typeof template == 'function' ? await template({content: 'World'}) : template
this.logger.put(template) // Output: Hello World!

Exemplo de uso "Scraper para tradução de marcação Markdown para HTML"

await this.sleep(sec)

await this.sleep(sec)

Define um atraso na thread por um número de segundos (sec), podendo ser fracionário.

await this.mutex.*

Mutex para sincronização entre threads, permite bloquear uma seção de código para uma única thread

.lock()

Aguardar o lock, a execução continuará na primeira thread que capturou o lock, as outras threads aguardarão a liberação do lock

.unlock()

Liberação do lock, a próxima thread continuará a execução se estiver aguardando o lock - .lock()

results.<array>.addElement()

O método results.<array>.addElement() permite preencher arrays em results de forma mais conveniente. Ao usá-lo, não é necessário lembrar a sequência das variáveis no array nem listá-las manualmente.

results.serp.addElement({
link: 'https://google.com',
anchor: 'Google',
snippet: 'Loreps ipsum...',
});

this.isContextAlive()

Este método é necessário para threads de longa duração que processam consultas em um loop, permitindo encerrar o trabalho corretamente ao parar ou excluir a tarefa

while (this.isContextAlive()) {
await this.request(...)
}