Como podemos utilizar a WSA no nosso projeto? Vejamos este exemplo rápido em que fazemos scraping na Amazon para encontrar a placa gráfica mais cara numa página. Este exemplo está escrito em JavaScript, mas pode fazê-lo em qualquer linguagem de programação com a qual se sinta à vontade.
Primeiro, precisamos de instalar alguns pacotes para nos ajudar com a solicitação HTTP (got) e a análise do resultado (jsdom) usando esta linha de comando no terminal do projeto:
npm install got jsdom
O nosso próximo passo é definir os parâmetros necessários para fazer a nossa solicitação:
const params = {
api_key: "XXXXXX",
url: "https://www.amazon.com/s?k=graphic+card"
}
É assim que preparamos a solicitação à WebScrapingAPI para que ela faça o scraping do site por nós:
const response = await got('https://api.webscrapingapi.com/v1', {searchParams: params})
Agora precisamos de ver onde cada elemento da placa gráfica está localizado dentro do HTML. Usando a Ferramenta do Desenvolvedor, descobrimos que a classe s-result-item contém todos os detalhes sobre o produto, mas só precisamos do seu preço.
Dentro do elemento, podemos ver que existe um contêiner de preço com a classe a-price e a subclasse a-offscreen, de onde extrairemos o texto que representa o seu preço.
A WebScrapingAPI irá devolver a página em formato HTML, pelo que precisamos de a analisar. O JSDOM irá resolver o problema.
const {document} = new JSDOM(response.body).window
Depois de enviar o pedido e analisar a resposta recebida da WSA, precisamos de filtrar o resultado e extrair apenas o que é importante para nós. A partir do passo anterior, sabemos que os detalhes de cada produto estão na classe s-result-item, por isso percorremos esses elementos. Dentro de cada elemento, verificamos se a classe do contêiner de preço a-price existe e, se existir, extraímos o preço do elemento a-offscreen dentro dela e colocamo-lo numa matriz.
Descobrir qual é o produto mais caro deve ser canja agora. Basta percorrer a matriz e comparar os preços entre si.
Envolvendo tudo numa função assíncrona, o código final deve ficar assim:
const {JSDOM} = require("jsdom");
const got = require("got");
(async () => {
const params = {
api_key: "XXX",
url: "https://www.amazon.com/s?k=graphic+card"
}
const response = await got('https://api.webscrapingapi.com/v1', {searchParams: params})
const {document} = new JSDOM(response.body).window
const products = document.querySelectorAll('.s-result-item')
const prices = []
products.forEach(el => {
if (el) {
const priceContainer = el.querySelector('.a-price')
if (priceContainer) prices.push(priceContainer.querySelector('.a-offscreen').innerHTML)
}
})
let most_expensive = 0
prices.forEach((price) => {
if(most_expensive < parseFloat(price.substring(1)))
most_expensive = parseFloat(price.substring(1))
})
console.log("The most expensive item is: ", most_expensive)
})();