Pular para o conteúdo principal

Consultas para outros scrapers

await this.parser.request(parser, preset, overrideParams, query)

await this.parser.request(parser, preset, overrideParams, query)

Obtenção de resultados de outro scraper (embutido ou outro scraper JS), os seguintes argumentos são especificados:

  • parser - nome do scraper (SE::Google, JS::Custom::Example)
  • preset - predefinição de configurações do scraper chamado
  • overrideParams - hash com substituições de configurações do scraper chamado
  • query - consulta

Ignora parcialmente a predefinição do scraper chamado, que é definida pelo parâmetro preset. Especificamente, as configurações useproxy, proxyChecker, proxybannedcleanup são herdadas do scraper que chama await this.parser.request.

Em overrideParams, você pode substituir os parâmetros do scraper chamado; os seguintes sinalizadores também estão disponíveis:

overrideParams.resultArraysWithObjects

resultArraysWithObjects: 0 - define em que formato retornar os arrays de resultados do scraper chamado:

  • se ativado (1) - serão retornados arrays de objetos
    [{link: 'link1', anchor: 'anchor1'}, {link: 'link2', anchor: 'anchor2'}, ...]
  • se desativado (0) - serão retornados arrays padrão de valores
    ['link1', 'anchor1', 'link2', 'anchor2', ...]

Exemplo:

import { BaseParser } from 'a-parser-types';

class JS_DocExample extends BaseParser {
static defaultConf: typeof BaseParser.defaultConf = {
results_format: "$links.format('$link\n')",
results: {
arrays: {
links: ['Links', [
['link', 'link']
]]
}
}
}

async parse(set, results) {
let response = await this.parser.request('SE::Google', 'default', {
resultArraysWithObjects: 1,
pagecount: 1
}, set.query)
results.success = response.success;

if(response.success) {
response.serp.forEach(element => {
results.links.push(element.link);
});
}

return results;
}
}

Exemplo de resultado:

https://www.speedtest.net/
https://www.investopedia.com/terms/t/t-test.asp
https://www.cdc.gov/coronavirus/2019-ncov/testing/diagnostic-testing.html
https://fast.com/
https://www.thinkwithgoogle.com/feature/testmysite/
https://projectstream.google.com/speedtest
https://www.nhs.uk/conditions/coronavirus-covid-19/testing/
https://www.fda.gov/consumers/consumer-updates/coronavirus-disease-2019-testing-basics
https://zoom.us/test
https://www.gov.uk/get-coronavirus-test
https://en.wikipedia.org/wiki/Test_(assessment)
...

overrideParams.needData

needData: 1 - define se deve transmitir (1) ou não (0) data/pages[] na resposta, pode ser usado para otimização

overrideParams.needResults

needResults: [ ... ] - lista de resultados que devem ser retornados.

Exemplo:

let response = await this.parser.request('SE::Bing', 'default', {
needResults: [
'totalcount'
]
}, set.query)

Resultado:

{"success":1,"info":{"success":1,"retries":0},"totalcount":"2130000000"}
dica

Funciona de forma semelhante para API::Server::RedisAPI::Server::Redis

overrideParams.skipProxySettingsInheritance

skipProxySettingsInheritance: 0 - esta opção permite desativar a herança do parâmetro useproxy para o scraper chamado

Consultas para scrapers que suportam o modo de lote

Também é suportada a chamada a scrapers que operam em modo de lote. Para isso, em query, você deve passar um array de consultas no formato ['key1', 'key2', ...].

O resultado do processamento pelo scraper chamado estará contido no array bulkResults, abaixo um exemplo de tal array:

{
"bulkResults": [
{
"success": 1,
"someArrayResult": [...],
"someFlatResult": '...',
"query": "key1",
"data": "..."
},
{
"success": 1,
"someArrayResult": [...],
"someFlatResult": '...',
"query": "key2",
"data": "..."
},
{
"success": 1,
"someArrayResult": [...],
"someFlatResult": '...',
"query": "key3",
"data": "..."
}
],
"success": 1,
"info": {
"success": 1,
"retries": 1
}
}

Exemplo de chamada a outro scraper em modo de lote

import { BaseParser } from 'a-parser-types';

export class JS_Example_BulkQueries extends BaseParser {
static defaultConf: typeof BaseParser.defaultConf = {
version: '1.0.0',
results: {
flat: [
['views', 'Views count per month']
]
},
results_format: "$query: $views\\n",
SE_Yandex_Direct_Frequency_preset: 'default',
bulkQueries: 10 // estabelecemos o número de consultas no "lote"
};

static editableConf: typeof BaseParser.editableConf = [
['SE_Yandex_Direct_Frequency_preset', ['combobox', 'SE::Yandex::Direct::Frequency preset']]
];

async parse(set, results) {
const { success, bulkResults } = await this.parser.request(
'SE::Yandex::Direct::Frequency',
this.conf.SE_Yandex_Direct_Frequency_preset,
{ useAccounts: 1 },
set.bulkQueries.map((el) => el.query) // convertemos o array de objetos set.bulkQueries em um array do tipo [query1, query2, ... query10]
);
if(success) {
// preenchemos os resultados em results.bulkResults
for(let query_number = 0; query_number < set.bulkQueries.length; query_number++) {
results.bulkResults[query_number].views = bulkResults[query_number].views;
results.bulkResults[query_number].success = bulkResults[query_number].success;
}
}

return results;
}
}