Web Screaping em plataforma de busca de preços

Thiago Santos
4 min readNov 27, 2020

--

Realizado na plataforma Zoom entre os dias 23 á 27/11

Web Screaping

Muitas vezes também chamada de “raspagem web” e é uma técnica de coleta de dados em páginas web em tempo real, em outras palavras, consiste simplesmente em capturar os dados de um site, estrutura-los e armazena-los.

O meu foco nesse post é mais prático que teórico, então… mãos a obra.

Primeiramente, precisamos instalar duas bibliotecas do python que vão nos permitir trabalhar com web screaping de uma forma muito simples:

  • Selenium: É uma ferramenta bastante utilizada pela área de testes, para a criação de scripts automatizados. Necessitamos desta ferramentas, pois o conteúdo que queremos capturar do site é carregado dinamicamente. Através do Selenium, iremos acessar um browser e emular a navegação pelo conteúdo do site.
  • BeautifulSoup: É um pacote Python para análise de documentos HTML e XML, ele cria uma “árvore de análise” para páginas que podem ser usadas para extrair dados do HTML.

Após a instalação desses pacotes, precisamos decidir qual o browser iremos utilizar para realizar o acesso ao site, no meu caso eu escolhi utilizar o Google Chrome, então fiz o download do chromedriver e adicionei as minha variável de ambiente “Path”. Agora sim, finalmente já estamos prontos para o nosso código.

Vamos importar os pacotes python e criar duas variáveis, uma onde vamos passar o nome do produto e outra onde vamos passar a url do site.

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
produto="a21s"
url = "https://www.zoom.com.br/search?q="+produto

Depois, iremos instanciar o nosso webdriver, que vai permitir a navegação na pela página.

driver = webdriver.Chrome()
driver.get(url)

Se você seguiu todos os passos corretamente, ao executar seu código, você deverá ser levado para essa página:

Para poder interagir com o conteúdo da página utilizaremos o XPath (XML Path Language), que é uma linguagem de consulta para selecionar elementos de um documento XML / HTML. Ela vai nos ajudar a encontrar um elemento específico no HTML da página com precisão e rapidez. Se você quiser entender melhor o que é o XPath poderá ler esse ótimo post que fala sobre o assunto.

Seguindo com o nosso código… Vamos copiar o XPath do botão “Ver preços”, para que, com o auxilio do Selenium, possamos clicar e ser redirecionado para a listagem de preço deste produto por lojas.

Basta apenas copiar a o elemento html como XPath

Iremos utilizar o método find_element do webdriver, passando o XPath do elemento como parâmetro, e depois executaremos a ação “click” no elemento indicado pelo XPath.

driver.find_element_by_xpath(‘//*[@id=”resultArea”]/div[3]/div/div[1]/div[2]/div[3]/a’).click()

Se você executar o código novamente, deverá ser redirecionado até a página com a listagem de preços do produto por loja.

Agora chegamos na parte mais simples, que consiste em, identificar o conteúdo que queremos, capturara-lo e salva-lo em uma variável.

element = driver.find_element_by_xpath('//*[@id="__next"]/div[1]/div[3]/div[2]/div/div/section[4]/div[2]/div[2]/div/ul')
html_content = element.get_attribute('outerHTML')

No nosso caso, se observamos bem o conteúdo que queremos está organizado em uma lista não ordenada no html. Queremos então os itens desta lista que é justamente onde está localizado as informações de preço, parcelamento, desconto e etc.

soup = BeautifulSoup(html_content,'html.parser')
lista = soup.findAll(name='li')
for l in lista:
print('Samsung A21s : '+l.text+'\n')
driver.quit()

Utilizamos o Beautiful Soup para “parsear” no html que foi salvo na nossa variável “html_content”, e criamos uma lista com todos os resultados de itens de uma lista não ordenada do html, percorremos e lista e imprimimos o resultado. Por ultimo, apenas encerramos a nossa janela do browser com o comando “driver.quit()”. A saída no console, se você executar o código deverá ser algo similar a imagem abaixo.

Se você quiser pode por exemplo, automatizar a coleta de informações e salvar em alguma base de dados, no meu caso eu automatizei a coleta com uma ferramenta incrível de automação de fluxo de trabalho, o Apache Airflow e salvei os dados coletados em um arquivo csv.

Depois utilizando uma ferramenta de visualização de dados em java script chamada D3, e criei uma visualização que mostra a alternação do preço de um smartphone durante a semana do black friday de 2020.

Link do código completo no gitlab: https://gitlab.com/thiago555sans/webscreaping_zoom/-/blob/master/Zoom.py

Link do notebook com o código da visualização em montada em D3: https://observablehq.com/@thiagosantos/alteracao-de-precos

--

--