Monitorando produtos no ML com Python 3 via BeautifulSoup

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.

[ Hits: 8.168 ]

Por: Pedro Ferrarezi em 10/10/2016


Introdução



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!

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

PDFBox - Aplicativo Java para baixar o DOU completo

Leitura recomendada

Interagindo com servidores HTTP com Python

Python - Enviando Backup para Servidor Secundário

Python - Usando requests anônimos através da rede Tor

Criando Speed Test com Python

Como isolar seus projetos Python com virtualenv (ambiente virtual)

  
Comentários
[1] Comentário enviado por fernando-sales em 11/10/2016 - 18:56h

Muito bom
Favoritando...

*---------------------------------------------*/
Blog: www.fernandosales.com.br

[2] Comentário enviado por marciogeraldo08 em 19/10/2016 - 10:17h

Muito interessante. Parabéns e obrigado pelo post.

[3] Comentário enviado por SawyeRv2 em 07/11/2016 - 11:40h

Olá, muito bom o artigo, favorito!

Amigo uma duvida, consigo usar ele em um pagina php, onde são lançadas vagas em um DB, mas não tenho acesso à ele;

A duvida é usar este mesmo modelo de código para monitorar quando estas vagas caem no DB e ficam disponíveis para uso no sistema?
Sabe me dar alguma dica sobre isto?!

Grato.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts