Podemos usar argumentos do terminal para distinguir entre as três opções que implementámos no nosso scraper. Existem opções que pode usar para analisar argumentos do terminal no Node, mas gosto de manter as coisas simples. É por isso que vamos usar process.argv, que gera uma matriz de argumentos. Note que os dois primeiros itens desta matriz são «node» e o nome do seu script. Por exemplo, se executar `node scraper.js raw_html`, a matriz de argumentos ficará assim:
[
'/usr/local/bin/node',
'path_to_directory/scraper.js',
'raw_html'
]
Ignorando os dois primeiros elementos, vamos usar a seguinte lógica:
- o primeiro argumento especificará a função que queremos executar;
- o segundo apontará para o nosso alvo (o site que queremos rastrear);
- o terceiro apontará para o servidor proxy;
- e o quarto apontará para o seletor CSS.
Assim, o comando para executar o nosso scraper deve ficar assim:
~ » node scraper.js raw_html https://webscrapingapi.com http://1.255.134.136:3128
Isto traduz-se simplesmente em extrair o HTML bruto da página inicial da WebScrapingAPI e utilizar http://1.255.134.136 como middleware de proxy. Agora, a parte final consiste em codificar a lógica para estes argumentos, de modo a que o nosso código compreenda o comando de execução:
const ACTION = process.argv[2]
const TARGET = process.argv[3]
const PROXY = process.argv[4]
const SELECTOR = process.argv[5]
switch (ACTION) {
case 'raw_html':
console.log(await raw_html(PROXY, TARGET))
break
case 'json_response':
console.log(await json_response(PROXY, TARGET))
break
case 'select_css':
SELECTOR ? console.log(await select_css(PROXY, TARGET, SELECTOR)) : console.log('Please specify a CSS selector!')
break
default:
conssole.log('Please choose between `raw_html`, `json_response` and `select_css`')
}
E é basicamente isso. Parabéns! Criou com sucesso um scraper web totalmente funcional utilizando um proxy com o node-fetch. Desafio-o agora a adicionar mais funcionalidades a este scraper, criar a sua própria versão e utilizá-la como um recurso no seu portfólio pessoal.