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.
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:
É 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:
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.
Em seguida lemos todo o texto HTML do link abaixo e jogamos dentro de uma variável.
Aqui pegamos o texto html e passamos para o BeautifulSoup transformar em um objeto Python que podemos ler facilmente com a sintaxe Python.
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.
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:
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!
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
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()
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)
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!
Favoritando...
*---------------------------------------------*/
Blog: www.fernandosales.com.br