Voltar ao blogue
Guias
Gabriel CiociLast updated on Mar 31, 20265 min read

Como extrair dados das páginas do eBay para obter informações sobre preços

Como extrair dados das páginas do eBay para obter informações sobre preços

Deixe-me descrever-lhe a situação. Acabou de lançar a sua loja online de cartuchos de videojogos retro raros e não sabe bem como definir os preços dos produtos.

Definir o preço de um produto é sempre um desafio: se o preço for demasiado baixo, reduz a margem de lucro. Se o preço for demasiado alto, os clientes não se interessarão pelo produto e irão comprá-lo a um concorrente.

Decisões, decisões. O que podemos fazer? Diante deste problema, tem duas soluções:

  • Passar horas todos os dias a pesquisar os preços dos concorrentes
  • Ser inteligente e criar um script automático que faça esta tarefa rotineira por si automaticamente

Consegue adivinhar qual a opção que vamos escolher para este artigo? Como tempo é dinheiro e gosto de facilitar a minha vida sempre que posso, vamos optar pela segunda opção.

Se a primeira opção lhe parece mais divertida, mais vale ler este artigo na mesma. É evidente que tem tempo livre a mais.

Como a extração de dados do eBay ajudará a sua loja online

O eBay é o segundo maior site de comércio eletrónico dos EUA, cobrindo 19,7% do mercado. Com 182 milhões de utilizadores ativos, o eBay é um dos melhores sites que podemos usar para análise de preços.

Para este exemplo, iremos extrair apenas o preço do produto, mas o eBay é um tesouro de dados. Pode sempre extrair a secção de avaliações, extrair palavras-chave negativas, fazer uma análise de sentimento e determinar por que razão os clientes estão insatisfeitos com o produto que compraram.

Também pode extrair a secção «As pessoas que viram este artigo também viram» para descobrir o que os clientes querem. Pode usar esta informação para adicionar novos produtos à sua loja ou criar pacotes com desconto que incluam mais produtos. As pessoas vão adorar!

Como extrair dados do eBay com a WebScrapingAPI

Um dos maiores obstáculos no web scraping é evitar ser bloqueado pelo site em que está interessado. Felizmente, não precisa de se preocupar com isso quando tem a ferramenta certa. Neste caso, a WebScrapingAPI é a melhor solução por três razões simples:

  • Oferecemos 1.000 pedidos por mês com o pacote gratuito, sem necessidade de cartão de crédito.
  • A API tem um conjunto de proxies com mais de 100 milhões de IPs rotativos, garantindo que não haja sobreposição de pedidos.
  • Pode integrar a API deles com uma única linha de código.

Pode perguntar-se por que razão usamos uma API de scraping em vez de criarmos a nossa própria. A razão é muito simples: criar uma ferramenta de scraping do zero pode demorar algumas semanas.

O maior problema não é criar a ferramenta em si, mas sim ajustá-la para que os sites não a identifiquem como um bot.

Chave de acesso à API e autenticação

Aceda ao site da WebScrapingAPI e crie uma conta. Receberá uma chave de API e 1000 pedidos gratuitos.

Instale as dependências

O nosso projeto pessoal é leve e requer apenas duas dependências: axios e cheerio. O Axios é um cliente HTTP baseado em promessas para Node.JS. Utilizamos esta biblioteca para chamar a WebScrapingAPI. A segunda biblioteca, cheerio, é uma implementação enxuta do jQuery para o servidor, e utilizamo-la para analisar a página do produto. Utilize este comando para instalar as dependências:

npm install axios cheerio

Inicie o projeto

Crie um ficheiro index.js e cole o seguinte código nele:

const cheerio = require('cheerio');
const axios = require('axios');

const api_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const product_url = 'https://www.ebay.com/itm/174620280276?epid=4444&hash=item28a82e05d4:g:UpMAAOSwfY5gYDr6';
const api_url = `https://api.webscrapingapi.com/v1?api_key=${api_key}&url=${encodeURIComponent(product_url)}`;
const hour_in_ms = 1000 * 60 * 60;

let product_price = null;

const check_price = async () => {

	// Scrape the document

	// Parse the document

	// Process the results

	// Check for any price change in one hour
	setTimeout(check_price, hour_in_ms)

}

(async () => check_price())()

Como pode ver, usamos uma função recursiva com um tempo limite para extrair a página do produto a cada hora e verificar se houve alguma alteração de preço.

Extrair a(s) página(s)

Substitua // Scrape the document por este código:

let response;

try {
	response = await axios.get(api_url);
} catch (error) {
	console.log(error);
	process.exit();
}

const $ = cheerio.load(response.data);

Este código utiliza a WebScrapingAPI para rastrear a página de produtos do eBay e converte os resultados numa instância cheerio.

Inspecione o código-fonte

Raspámos toda a página do produto, mas precisamos apenas do preço do produto. Podemos usar a instância cheerio para obter o valor do preço. O seletor para o preço do produto é #mainContent [itemprop="price"].

Analise o HTML

Substitua // Analise o documento com o seguinte código:

let price = $('#mainContent [itemprop="price"]').html()

Processar os resultados

O preço vem neste formato: SÍMBOLO DA MOEDA VALOR. Precisamos de extrair apenas o valor. Substitua // Processar os resultados por este código:

price = parseInt(price
	.split(' ')[1]
	.replace('$', '')
	.replace(' ', '')
	.split(',').join('')
	.split('.')[0])

if(!product_price) {
	console.log(`Initial product price:`, price)
} else {
	if(product_price !== price) {
    		console.log('New price for product:', price)
	}
}

product_price = price

Este código irá limpar o preço realizando as seguintes ações:

  • Remover a moeda (US)
  • Remover o símbolo da moeda ($)
  • Remover quaisquer espaços em branco ( )
  • Remover as vírgulas do número
  • Remover as casas decimais

Assim que o preço for analisado, registamos o custo inicial ou o novo preço, caso tenha mudado entre as sessões de scraping.

Conclusão

Com algumas linhas de código e uma ferramenta fantástica como a WebScrapingAPI, conseguimos criar um script que obtém o preço de qualquer produto no eBay. A partir daqui, o céu é o limite. Pode levar o script para o próximo nível e implementar as seguintes melhorias:

  • Extrair o título do produto para facilitar a classificação de preços
  • Extrair vários produtos e comparar os preços
  • Extrair dados de outro site do eBay (como ebay.de ou ebay.ca) e comparar o preço do mesmo produto
  • Inverter a situação e extrair a página do produto da Amazon e fazer uma comparação de preços entre os dois sites para o mesmo produto
  • Implementar notificações por e-mail; deve usar o nodemailer para o fazer
  • Implementar notificações no Slack; pode usar esta biblioteca para concluir a tarefa

A melhor parte desta solução aplicada a um caso de uso real é que pode fazer tudo isto sem gastar dinheiro nem tempo precioso. Isto porque a WebScrapingAPI tem um período de teste gratuito de duas semanas que lhe permite usar todas as suas funcionalidades de graça!

Sobre o autor
Gabriel Cioci, Desenvolvedor Full-Stack @ WebScrapingAPI
Gabriel CiociDesenvolvedor Full-Stack

Gabriel Cioci é um programador Full Stack na WebScrapingAPI, responsável pela criação e manutenção dos sites, do painel do utilizador e das principais funcionalidades da plataforma destinadas aos utilizadores.

Comece a construir

Pronto para expandir a sua recolha de dados?

Junte-se a mais de 2.000 empresas que utilizam a WebScrapingAPI para extrair dados da Web à escala empresarial, sem quaisquer custos de infraestrutura.