Raspando Dados de Anúncios do Mercado Livre com Beautiful Soup
Extraindo dados de anúncios da página de tendências do Mercado Livre
Primeiro me sinto na obrigação de agradecer ao Mercado Livre pela disponibilidade dos dados. O que demonstra uma infraestrutura poderosa por trás dos códigos, pra suportar uma imensidão de requisições inimaginável pra mim, e sem travar. E nem to falando só do meu crawler, mas de todos os que possam existir e fazem a mesma extração de dados que eu, além do acesso de vendedores, compradores e curiosos.
Beautiful Soup vs Selenium
Quanto ao crawler, confesso que fiquei impressionado com o quanto se pode fazer com poucas linhas de código. Primeiro, minha intenção era usar o Selenium Webdriver pra conseguir esses dados, mas devido a uma experiência anterior e por ainda estar engatinhando no Beautiful Soup, uni o útil ao agradável. Aprendi um pouco mais dessa biblioteca e resolvi o problema de desempenho que estava me incomodando no Selenium. Não sou cientista da computação, mas uma rápida olhada no Gestor de Tarefas do Windows já mostra o quanto um navegador consome de memoria, e o Selenium é completamente dependente de um browser. Beautiful Soup usou em média a décima parte do pico de memória do Selenium, fazendo a extração de dados mais rápido inclusive. Em tarefas parecidas (extração de um conjunto de links e acesso a esses links pra extrair novos dados), o Selenium atingiu picos de 2,5GB de memoria RAM enquanto o Beautiful Soup ficou aí na casa dos 250MB no máximo de consumo.
A que serve?
Bom, não é novidade pra ninguém o tamanho do Mercado Livre. Desde vendas até vendedores, no Brasil, os caras são imbatíveis. E sempre me perguntei como prever os produtos que seriam moda no ML. O que tá sendo vendido, por quanto ta sendo vendido, qual é a média de preço para aquele produto.
Vamos dizer que você seja um vendedor, tem lá sua loja física ou virtual e está interessado em vender pelo ML. Bom, a primeira inclinação que eu teria é buscar na área de tendências da plataforma, descobrir o que está fazendo sucesso por lá. Vai que tenho em estoque. Agora vamos dizer que você já venda no pelo ML e quer se manter inteirado no que é tendência, pra começar a oferecer.
Pra isso que esse script serve.
Num primeiro momento o crawler retira os dados da seção de tendências do ML e salva em um arquivo csv pra posterior analise. Aí, usem a biblioteca que preferirem para fazer essa analise. Eu usei o pandas, mas isso é outra história.
Bora Codar!
O que vamos extrair?
Vamos extrair os dados da página abaixo que mostra as buscas mais populares do Mercado Livre.
Primeira coisa importando as bibliotecas que vamos usar:
Depois a gente tem que criar um csv e deixar ele aberto para, conforme os dados forem sendo extraídos, sejam inseridos no arquivo.
Optei por já dizer em qual codificação queria gerar o arquivo (encoding=’utf-8'), mas é opcional.
Um comentário interessante é que o preço é dividido em duas class no ML, então tive que criar duas colunas no csv, uma para o campo dos reais, e a outra para o campo dos centavos.
O próximo passo foi criar duas listas vazias pra fazer um for nelas, e acessar cada link de anúncio extraído em loop.
Logo depois criei três funções que fazem o trabalho todo.
A primeira delas acessa a página de tendências do Mercado Livre e copia os links das buscas mais populares.
No fim, pega todos os links de buscas populares na página de tendências e dá um append na lista acessar[ ], uma das listas vazias que foram criadas antes. E vai “printando” o está sendo feito. Sou ansioso, e se não tivesse nada me dizendo em que passo vamos, não conseguiria deixar o processo terminar.
A intenção é deixar essa informação guardada na lista pra gente usar daqui há pouco.
A segunda função acessa os links na lista “acessar” e copia os links de produtos para a lista vazia “produtos”, para que a gente entre em cada um deles e raspe os dados dos anuncio da primeira página. Nossa intenção é saber quais produtos estão na primeira página de cada busca e estudar as características desses anúncios.
Mais um print do que está sendo feito pra eu não largar o processo logo nos trinta segundos iniciais.
A terceira função extrai os dados de cada anúncio das paginas conseguidas no quadro de tendências.
Optei por usar o método try/except pra incluir um valor nulo toda vez que o script esbarrasse em uma exceção. O motivo é simples: extrair a maior quantidade possível por execução do script.
Digamos que o ao ser executado o crawler encontre um erro e feche. Como a quantidade de dado extraído é perdida após um erro, preferi salvar o que conseguisse, e preencher os dados faltantes com um valor nulo. Assim, na última requisição foram extraídos dados de 597 anúncios dos quais 562 foram mantidos, após filtro e tratamento pelo pandas.
De cada anúncio são extraídos os seguintes dados: categorias, titulo, preço, centavos, vendas_estado, descrição.
Essa função também fecha o arquivo csv quando acaba o loop em for pra manter os dados salvos.
O Resultado
Depois de rodar o script, temos o seguinte resultado:
Eu sei. Quase chorei quando vi essa coisa linda. Agora é tratar esse cara e estudar o que podemos encontrar nele.
Acabei de limpar os dados com o Pandas e devo publicar um outro artigo contando mais essa história.
Não vou disponibilizar o código porque, quem quiser aprender, acho bacana copiar e digitando pra conseguir guardar melhor. E é um script tão pequeno que pode ser copiado olhando em uns 10 min.
Fui. Até a próxima.
Linkedin Profile: Lincoln Menezes