Automatização da coleta de preços de produtos de um mercado


 

Olá pessoal, desenvolvi este pequeno projeto e Python e gostaria de compartilhar não apenas para meu aprimoramento, mas para que possamos ver quantas aplicabilidades possui o mais simples projeto de automação.

Objetivo da automação: Acessar a pagina de carnes do site do Supermercado, coletar os nomes, preços e registrar no Excel.

Como foi feito: utilizando o Python, foi necessário instalar as bibliotecas, Selenium para coletar os dados da página e a biblioteca Openpyxl para manipulação do Excel.

Passo a Passo:

*Importei os componentes necessários da biblioteca Selenium e a biblioteca Openpyxl

*Defini qual será o navegador utilizado na automação (Edge)

*Em seguida eu criei uma pasta de trabalho (Excel)

*Abri a página desejada

*Selecionei a planilha1 da pasta de trabalho e escrevi Nome e Preço na primeira linha (cabeçalho)

*A partir deste ponto o script precisaria realizar um loop até chegar na decima página do site.

*Cada vez que uma pagina é carregada ele deveria esperar até 100 segundos para que o botão da próxima pagina se tornasse visível e clicavel.

*então ele coletaria os itens, os preços, e a localização do botão de próxima página.

*Ainda nesta página, ele incluiria cada item e preços na planilha do Excel.

*Depois ele envia um clique no botão de próxima página. Até a decima página

*Saindo do loop, ele salva a planilha com o nome “planilha.xlsx”

 


#inportar as bibliotecas e conteudos utilizados

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
import openpyxl

#definir o navegador utilizado
drive= webdriver.Edge()

#abrir a planilha
planilha=openpyxl.Workbook()

#acessar a pagina desejada
drive.get("https://www.savegnago.com.br/carnes")

#setar a aba da planilha
sheet=planilha['Sheet']

#inserir o cabeçalho
sheet['A1'].value='Nome'
sheet['B1'].value='Preço'

#rodar até alcançar a 10a pagina do site
while drive.current_url != "https://www.savegnago.com.br/carnes?page=10":
   
   #aguardar o botão de proxima pagina se tornar visivel
   WebDriverWait(drive, 100).until(expected_conditions.visibility_of_element_located((By.XPATH, '//a[@class="savegnagoio-store-theme-8-x-buttonNext"]')))
   
   #aguardar o botaão se tornar clicavel
   WebDriverWait(drive,100).until(expected_conditions.element_to_be_clickable((By.XPATH, '//a[@class="savegnagoio-store-theme-8-x-buttonNext"]')))
   
   #encontrar todos os itens da pagina atual
   itens=drive.find_elements(By.XPATH,"//span[@class='vtex-product-summary-2-x-productBrand vtex-product-summary-2-x-brandName t-body']")
   
   #encontrar os preços destes itens
   preços=drive.find_elements(By.XPATH,"//p[@class='savegnagoio-store-theme-8-x-priceUnit']")
   
   #encontrar o botão de proxima pagina da pagina atual
   clique = drive.find_element(By.XPATH, '//a[@class="savegnagoio-store-theme-8-x-buttonNext"]')

   #para cada item, inserir o item e o preço na planilha que está aberta
   for item, preço in zip(itens, preços):
      sheet.append([item.text, preço.text])
   
   #avançar para a pagina seguinte
   clique.click()

salvar a planilha
planilha.save("planilha.xlsx")

Assista a execução:
Aplicabilidade: Para pessoa física, uma solução como essa ajudaria muito as pessoas que desejam realizar uma cotação em diferentes mercados já que é muito mais fácil realizar comparações utilizando planilhas ao invés de navegar pelas paginas simultaneamente. Para pessoa jurídica o principio da solução pode ser utilizado em diferentes páginas, para obter informações de processos judiciais, cotação, enriquecimento de dados a partir de sites externos, dados de tabela Fipe, horários disponíveis de uma página de agendamento, etc...



Comentários