Hoje vamos fazer uma coisa relativamente simples, mas bem legal. Vamos criar um BOT que irá se conectar com um anúncio do
Mercado Livre e irá dizer pra nós qual é a quantidade disponível desse produto no estoque do vendedor.
Por motivos variados talvez você precise fazer isso um dia, talvez não com o ML, mas com outro site. Vamos fazer algo específico: monitorar apenas a quantidade do produto no ML. Mas o exemplo de código que vamos criar serve para monitorar qualquer informação de qualquer site! Basta você saber um pouco de HTML e criar a lógica certa. Para este exemplo vamos usar Python 3.4.
Um pouco sobre
BeautifulSoup extraído e traduzido da
documentação oficial:
"Beautiful Soup é uma biblioteca Python para extrair dados de arquivos HTML e XML. Ele funciona com o seu analisador favorito para fornecer maneiras idiomáticas de navegar, pesquisar e modificar a árvore convertida (DOM). Ele comumente salva programadores horas ou dias de trabalho."
Palavras bonitas mesmo não concorda? A seguir vamos ver na prática.
Mão na massa
Considere esse anúncio que estava ativo na data de hoje:
É um G602 (eu tenho hihi).
Ostentações a parte vamos ao que interessa, no navegador Chrome ou Firefox, entre no anúncio e clique com o botão direito em cima do preço e selecione "exibir código fonte".
Aperte ctrl + F e busque pela palavra "Quantidade".
Você vai ver uma coisa +/- ao anexo 1.
Não precisa pensar muito pra ver que o input "productStockQuantity" tem os atributos "min" e "max" setados. E o atributo "max" está com o valor = 2.
Significa que mesmo que você queira comprar mais de 2 unidades, não vai poder. Por quê? Porque só tem 2 no estoque.
Podemos ver também que junto com esse input tem mais 2 outros e os 3 inputs estão dentro de uma tag div, que por sua vez está dentro de um form (id="productInfo").
Mas não é necessário acessar o form pra pegar o input de quantidade do produto, podemos acessar diretamente o input, vajamos o código necessário pra fazer tudo isso:
from bs4 import BeautifulSoup
from urllib.request import urlopen
url = 'http://produto.mercadolivre.com.br/MLB-713818524-mouse-logitech-g602-wireless-2500dpi-11-botoes-gar-3-anos-_JM'
html = urlopen(url).read()
soup = BeautifulSoup(html, 'html.parser')
quntidadeMaxima = soup.find(id="productStockQuantity")["max"]
print(quntidadeMaxima)
Então você verá no terminal o número 2.
Sempre quis dizer isso: mais fácil que isso é difícil! rsrs
Se você nunca desenvolveu em Python, para executar o código abaixo basta abrir um editor de texto colar esse código, ir até o diretório onde está o script e dar o comando:
python3 nomeDoScript.py
Para instalar o BeautifulSoup para Python 3 no Debian 8 e distribuições derivadas (Mint, Ubuntu etc) execute como root:
# apt-get install python3-bs4
Agora vamos entender o que foi feito.
Aqui importamos a biblioteca BeautifulSoup e urlopen para poder se conectar com o site e ler as tags html dele.
from bs4 import BeautifulSoup
from urllib.request import urlopen
Em seguida lemos todo o texto HTML do link abaixo e jogamos dentro de uma variável.
url = 'http://produto.mercadolivre.com.br/MLB-713818524-mouse-logitech-g602-wireless-2500dpi-11-botoes-gar-3-anos-_JM'
html = urlopen(url).read()
Aqui pegamos o texto html e passamos para o BeautifulSoup transformar em um objeto Python que podemos ler facilmente com a sintaxe Python.
soup = BeautifulSoup(html, 'html.parser')
Então pedimos ao BeautifulSoup buscar na tag de quantidade do produto (productStockQuantity) o valor do atributo "max", daí criamos uma variável e jogamos esse conteúdo dentro dela, depois mandamos imprimir o valor na tela.
quntidadeMaxima = soup.find(id="productStockQuantity")["max"]
print(quntidadeMaxima)
Desculpe possivelmente ofender sua inteligência, mas talvez você pense: "ué! Ele fez um script que lê uma quantidade de um produto anunciado? É melhor eu entrar no site e olhar ué...". Na verdade eu demonstrei como ler 1 produto a título de exemplo...
Imagine agora que por um motivo qualquer você têm 1000 anúncios cadastrados em um banco de dados e você precise monitorar esses anúncios a cada meia hora. Não vai dar pra você "entrar no site e olhar".
Mas você pode fazer uma função Python que retorna a quantidade disponível com base em uma url passada como parâmetro. Por Exemplo:
from bs4 import BeautifulSoup
from urllib.request import urlopen
def quantidadeDisponivelML(urlProduto):
html = urlopen(urlProduto).read()
soup = BeautifulSoup(html, 'html.parser')
quntidadeMaxima = soup.find(id="productStockQuantity")["max"]
return quntidadeMaxima
if __name__ == '__main__':
url = 'http://produto.mercadolivre.com.br/MLB-713818524-mouse-logitech-g602-wireless-2500dpi-11-botoes-gar-3-anos-_JM'
quantidadeDisponivel = quantidadeDisponivelML(url)
print(quantidadeDisponivel)
E imagine que você poderia chamar essa função de uma outra função que pega cada link e passa para essa retornar a quantidade etc.
Use sua criatividade! Um forte abraço a todos e até a próxima!