Coleta de dados - Mercado Livre

como usar rvest para raspar dados no Mercado Livre

Pedro Carvalho Brom http://blackbeltr.com.br/
2019-01-11

Mercado Livre (ML) é um local “onde se compra e vende de tudo”. Outro dia meu notebook deu problema da abertura da tela e não tinha mais como ficar abrindo e fechando então o transformei em uma estação de mídia da minha casa (i3 com 8GB de ram), usando o Linux Mint MATE 19 e instalei o Stremio (Fica a dica).

Voltando ao ponto do ML. O note deu problema e tive que fazer uma pesquisa para avaliar os preços e saber se o que o vendedor está cobrando está acima ou abaixo do mercado, mas fiquei com preguiça (sim essa é uma habilidade dos programadores) de fazer um trabalho manual então resolvi abrir o RStudio e botar a mão na massa, mais ou menos uns 30 minutos depois depois cheguei neste script abaixo.

Depois foi simples garimpar os dados de modo mais eficiente. Façam os testes.


require(rvest) # para raspargem de dados
require(dplyr) # para uso de pipes
require(doSNOW) # processamento em paralelo

# TERMO DE BUSCA --------------------------------------------------------------
termo = "lenovo thinkpad e470" # adicione o termo de busca

# funcao para criar padrao das urls -------------------------------------------------------
get_url = function(termo) {
  # prefixos da url
  p1 = "https://lista.mercadolivre.com.br/%5B"
  p2 = termo %>% strsplit(., " ") %>% unlist() %>% paste0(., collapse = "-")
  p3 = "%5D_Desde_"
  p4 = paste0(0, 1)
  p5 = "_DisplayType_LF"
  
  # juntando tudo
  y = paste0(p1, p2, p3, p4)
  qtd = read_html(y) %>%
    html_nodes("aside div") %>% 
    html_text() %>% 
    {.[grepl("(resultados)$", .)]} %>% 
    gsub("\\D", "", .) %>% 
    as.numeric() %>% 
    {./50} %>% 
    ceiling() %>% 
    {1:.}
  p4 = paste0((qtd - 1) * 5, 1)
  y = paste0(p1, p2, p3, p4, p5)
  return(y)
}

# chamando url padrao para o termo de busca
URLs = get_url(termo)

# imprimindo as primeiras entradas
paste0(length(URLs), " página(s) de produtos")
URLs %>% head()

# criar raspagem de cada pagina -----------------------------------------------

# funcao para pegar os links
get_links = function(URL) {
  y = read_html(URL) %>% 
    html_nodes("div h2 a") %>% 
    html_attr("href") %>% 
    {.[grepl("mercadolivre.com.br", .)]} %>% 
    unique() %>% 
    unlist()
  return(y)
}

# pegar links dos produtos
url.produtos = NULL
for (i in 1:length(URLs)) {
  res = try({
    url.produtos = append(url.produtos, get_links(URL = URLs[i]))
  })
  if(inherits(res, "try-error")) {
    break
  }
}

# imprimindo as primeiras entradas
paste0(length(url.produtos), " produto(s) localizado(s) seguindo o termo de busca: ", termo)
url.produtos %>% head()

# funcao para coleta - argumentos ---------------------------------------------
#   @ descricao
#   @ valor
#   @ qdt vendidos

get_atr_anuncio = function(url.prod) {
  y = read_html(url.prod)
  
  # titulo
  titulo = y %>% 
    html_nodes("div header") %>% 
    html_text() %>% 
    gsub("(\n|\t)", "", .) %>% 
    stringi::stri_trans_general(., "Latin-ASCII")
  if(length(titulo) == 0) {
    titulo = NA
  }
  
  # descricao
  descricao = y %>% 
    html_nodes("section div p") %>% 
    html_text() %>% 
    {.[2]} %>% 
    stringi::stri_trans_general(., "Latin-ASCII")
  if(length(descricao) == 0) {
    descricao = NA
  }
  
  # valor
  valor = y %>% 
    html_nodes("fieldset span") %>% 
    html_attr("content") %>% 
    {.[!is.na(.)]} %>% 
    as.numeric()
  if(length(valor) == 0) {
    valor = NA
  }
  
  # qtd vendidos
  qtd_vendidos = y %>% 
    html_nodes("dl div") %>% 
    gsub('(<div class="item-conditions">|</div>)', "", .) %>% 
    gsub("(\n|\t)", " ", .) %>% 
    gsub("\\D", "", .) %>% 
    as.numeric()
  if(length(qtd_vendidos) == 0) {
    qtd_vendidos = 0
  }
  y = cbind.data.frame(titulo, descricao, valor, qtd_vendidos)
  return(y)
}

# criar loop para base de dados -----------------------------------------------

cores = parallel::detectCores() # lendo quantos cores sua maquina tem
cl = makeSOCKcluster(cores) # criando os clusters de trabalho em paralelo
registerDoSNOW(cl) # registrando os clusters no sistema
pb = txtProgressBar(min = 1, max = length(url.produtos), style = 3) # barrinha de progresso
progress = function(n) setTxtProgressBar(pb, n) # colocando a barra de progresso como uma funcao de n
opts = list(progress = progress) # adicionando lista de opcoes com a barra de progresso
base = foreach(i = 1:length(url.produtos), # criando a base de dados em paralelo
               .options.snow = opts, 
               .combine = 'rbind', 
               .packages = c("stringi", "dplyr", "rvest")) %dopar% {
                 get_atr_anuncio(url.prod = url.produtos[i])
}
close(pb) # fechando a barra de progresso
stopCluster(cl) # parando os clusters de trabalho

base = base[complete.cases(base), ] # pegando apenas as linhas com informacoes completas

# imprimindo os primeiros resultados
paste0(nrow(base), " produto(s) localizado(s) seguindo o termo de busca: ", termo, " com tabelamento completo")
base %>% head()

# verifidando medidas resumo para o termo de busca
summary(base$valor)

# salvar a base de dados ------------------------------------------------------
# write.csv2(base, "base.csv", row.names = F)

[1] "1 página(s) de produtos"

[1] "https://lista.mercadolivre.com.br/%5Blenovo-thinkpad-e470%5D_Desde_01_DisplayType_LF"

[1] "29 produto(s) localizado(s) seguindo o termo de busca: lenovo thinkpad e470"

[1] "https://produto.mercadolivre.com.br/MLB-1097808875-notebook-lenovo-thinkpad-e470-i5-6200u-8gb-ram-ssd-240-_JM"   
[2] "https://produto.mercadolivre.com.br/MLB-1122641247-notebook-lenovo-e470-i7-hd1tb-geforce-940mx-_JM"              
[3] "https://produto.mercadolivre.com.br/MLB-1029182718-notebook-lenovo-e470-i5-8gb-de-ram-ssd-256gb-_JM"             
[4] "https://produto.mercadolivre.com.br/MLB-1102487323-note-lenovo-thinkpad-e470-intel-core-i7-7500u-8gb-1tb-14-_JM" 
[5] "https://produto.mercadolivre.com.br/MLB-1067881850-dell-optiplex-5050sff-i5-7-8gb-hd-1-tb-_JM"                   
[6] "https://produto.mercadolivre.com.br/MLB-1064692062-lenovo-notebook-thinkpad-e470-tela-14-intel-core-i5-7200u-_JM"

  |                                                                  
  |                                                            |   0%
  |                                                                  
  |==                                                          |   4%
  |                                                                  
  |====                                                        |   7%
  |                                                                  
  |======                                                      |  11%
  |                                                                  
  |=========                                                   |  14%
  |                                                                  
  |===========                                                 |  18%
  |                                                                  
  |=============                                               |  21%
  |                                                                  
  |===============                                             |  25%
  |                                                                  
  |=================                                           |  29%
  |                                                                  
  |===================                                         |  32%
  |                                                                  
  |=====================                                       |  36%
  |                                                                  
  |========================                                    |  39%
  |                                                                  
  |==========================                                  |  43%
  |                                                                  
  |============================                                |  46%
  |                                                                  
  |==============================                              |  50%
  |                                                                  
  |================================                            |  54%
  |                                                                  
  |==================================                          |  57%
  |                                                                  
  |====================================                        |  61%
  |                                                                  
  |=======================================                     |  64%
  |                                                                  
  |=========================================                   |  68%
  |                                                                  
  |===========================================                 |  71%
  |                                                                  
  |=============================================               |  75%
  |                                                                  
  |===============================================             |  79%
  |                                                                  
  |=================================================           |  82%
  |                                                                  
  |===================================================         |  86%
  |                                                                  
  |======================================================      |  89%
  |                                                                  
  |========================================================    |  93%
  |                                                                  
  |==========================================================  |  96%
  |                                                                  
  |============================================================| 100%

[1] "4 produto(s) localizado(s) seguindo o termo de busca: lenovo thinkpad e470 com tabelamento completo"

                                                         titulo
1      Notebook Lenovo Thinkpad E470-i5 6200u-8gb Ram - Ssd 240
5                       Dell Optiplex 5050sff I5 7ª 8gb Hd 1 Tb
10    Notebook Lenovo Thinkpad E470 Core I5 8gb Hd 500gb W10pro
18 Notebook Lenovo T430 I5-3320m 4gb Hd 320gb - Novo De Vitrine
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      descricao
1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Notebook Corporativo Fabricante Lenovo Modelo E470Linha Corporativa ThinkpadProcessador i5 6200uMemoria 8Gb DDR4 (Apenas 1 pente de 8GB 2400Mhz, tem mais um slot disponivel para expansao).SSD 240 Gb Leitor de biometriaUSB 3.0Tela de 14 polegadas.Manual carregador original.Windows 10 pro original.Notebook novo nunca usado, tem manual, caixa original.Disponivel para retirada em Osasco.Chypps Tecnologia.
5  So a CPU, nao acompanha teclado e mause.Todos os produtos estao funcionando e em perfeito estado:tem 6 meses de garantiaSao fotos reais sem caixa, sem nota e sem uso.COMPUTADOR DELL 5050 INTEL CORE I5 - 7ª GERACAO / 8GB MEMORIA RAM DDR4 / HD 500GB SATA 3 7200RPM WINDOWS 10 PRO, A PRONTA ENTREGA.Produtividade e capacidade de expansao excelentescomputadores expansiveis com recursos essenciais aos negocios de que as empresas precisam, com espaco para adicionar outros perifericos.Design inovador e compacto para maior conveniencia.Obtenha flexibilidade: com recursos avancados em um design inteligente e com duas orientacoes, o 5050 permite que voce maximize seu ambiente de trabalho. As torres podem ser configuradas na parte de cima ou de baixo da mesa e, ao mesmo tempo, o formato pequeno pode ser combinado ao novo suporte para All in One de formato pequeno a fim de criar solucoes versateis e flexiveis para qualquer situacao no escritorio.Seguro e unificado: essas tampas de cabo opcionais reduzem a bagunca, evitam o acesso a portas e cabos na parte traseira do sistema e combinam perfeitamente com o design elegante, de modo que seu sistema tenha um aspecto unificado e fique protegido.Acesso facil: com um design que nao requer o uso de ferramentas e um painel lateral removivel simples, voce tem acesso facil a componentes importantes do sistema, como memoria e unidades, para que seu sistema possa ser atualizado, mantendo-se viavel pelos proximos anos.5050 em torre e de formato pequeno: performance avancada. Solucoes inteligentes.Performance avancada. Solucoes inteligentes.Capacite seu sucesso: com os processadores Intel(R) de 7ª geracao, este e o computador mais rapido de todos.Performance excelente e rapida: a DDR4 de 2400 MHz atualizada e a memoria mais rapida e eficiente disponivel, de modo que voce possa trabalhar sem que ocorram travamentos ou falhas.Conecte-se com facilidade: duas DisplayPort, suporte para 3 telas nativas e 1 HDMI, alem de portas legadas que fornecem conexao ampla aos seus dispositivos e as suas redes.Confiabilidade comprovada. Alto nivel de seguranca.Sempre atualizado: cada computador 5050 e disponibilizado com o Dell Command Suite, o que facilita as atualizacoes de driver, BIOS e firmware. Essas ferramentas gratuitas possibilitam configuracoes de sistema ou BIOS flexiveis e automatizadas para sua empresa, permitindo que voce gerencie sua frota de forma facil e segura, todas as vezes.Trabalhe remotamente com confianca: o Intel(R) Systems Management opcional possibilita recursos de gerenciamento fora da banda remoto e avancado para aumentar a produtividade e reduzir os riscos.Formato pequeno: 1. Largura 9,26 cm (3,7") | 2. Profundidade 29 cm (11,4") | 3. Altura 29,2 cm (11,5") | Peso maximo 5,14 kg (11,31 lb)Processador7ª geracao do Processador Intel(R) Core™ i5-7500 (4 nucleos, 6 MB, 3,4 GHz)Sistema operacional (Windows 10 Pro.)Windows 10 Pro de 64 bits - em Portugues (Brasil)Memoria 8GB), DDR4, 2400 MHzDisco Rigido (HD)Disco rigido (HD) de 1 TB (7200 RPM) - 3,5"Leitor e Gravador de CD/DVD (DVD+/-RW 8x) - 9,5 mmConectividadeSem WirelessServicos de suporte de hardwarePortas10 portas USB externas: 6 USB 3.0 (2 frontais/4 traseiras) e 4 USB 2.0 (2 frontais/2 traseiras), 1 frontal com PowerShare2 portas USB 2.0 internas1 RJ-451 serial2 DisplayPort 1.21 HDMI 1.42 PS/21 UAJ1 saida de linhaSlotsFormato pequeno:1 conector M.2 1 PCIe x16 de meia altura1 PCIe x4 de meia altura (aberto)
10                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   LINK COM DESCONTO: https://produto.mercadolivre.com.br/MLB-1157062960-notebook-lenovo-thinkpad-e470-core-i5-8gb-hd-500gb-w10pro-_JM?quantity=1&variation=31301633864OBS: Usado poucas vezes, esta novo, sem marcas de uso.Notebook Lenovo Thinkpad E470 Intel Core I5 7200u 8gb(2x4gb) HD de 500gb 14" Windows 10 PRO Preto 20h20008brPoderoso e seguro, o ThinkPad E470 e leve o suficiente para voce leva-lo onde for necessario. Projetado para aumentar a produtividade, possui tela de 14 polegadas com otima resolucao e teclado ergonomico. O notebook ideal para quem busca a qualidade e seguranca de um ThinkPad e nao abre mao de um otimo custo/beneficio.Informacoes Tecnicas:ProcessadorIntel(R) Core™ i5-7200U (2.5GHz; 3MB Cache)Sistema OperacionalWindows 10 Pro 64Leitor Biometrico: SIMTela14" HD LED Antirreflexo (1366x768)GraficosIntel(R) HD Graphics (integrado ao processador)Memoria8GB (1x8GB) 2400MHz DDR4Disco RigidoHD 500GBUnidade OticaNao inclusoDimensoes339 x 242 x 23,7 mm e 1,87 kgDispositivo ApontadorUltraNav™ (Trackpoint + Touchpad)BateriaLi-Polymer 3 celulas (45Wh)Portas1x HDMI, 2x USB 3.0 (1x energizada), 1x USB 2.0ConectividadeWireless 1x1 AC, Gigabit Ethernet e Bluetooth 4.1OutrosLeitor de impressoes digitais, Leitor de cartoes 4 em 1, Chip de seguranca e Dolby Audio Premium
18                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                PRODUTO USADO EM EXCELENTE ESTADO COMPONENTES:NOTEBOOK LENOVO T430 i5-3320M 4Gb HD 320gb DVD/RW SISTEMA OPERACIONAL- WINDOWS 10 PRO- BRINDE MOUSE Exbom MS-10 ? ou Conforme Disponibilidade*FOTOS REAIS!*CONFIGURACAO:O ThinkPad mais vendido no mundoO T430 possui alto desempenho, com processadores Intel(R) Core 3a geracao e tecnologia vPRO (alguns modelos), para usuarios que buscam um equipamento resistente, seguro e com caracteristicas avancadas de gerenciamento remoto e grande autonomia de bateria.Testado com especificacoes militaresO T430 atende a oito rigidas especificacoes militares (Estados Unidos) contra variacoes ambientais extremas, incluindo temperatura, pressao, poeira, umidade e testes de vibracoes. Durabilidade acima dos padroes e o sistema ativo de protecao para disco rigido (Active Protection SystemT), resultam em um equipamento seguro e realmente confiavel.Teclado ThinkPad PrecisionErgonomico e facil de limpar, permite uma digitacao mais confortavel e reduz a probabilidade de erros, retroiluminado.UltraNav(R)>Combinacao de dois dispositivos apontadores, o Touchpad e o tradicional TrackPoint vermelho (localizado entre as teclas G, H e B, pode ser alcancado pelos dedos, sem remover a mao de cima do teclado).Roll CageCabinete interno fabricado com liga de magnesio que envolve todos os principais componentes da maquina, como placa mae e tela, e distribui o esforco fisico de impactos de forma eficiente, evitando maiores danos em caso de acidentes.Imagens e graficos avancadosModelos com telas 14", somados com a tecnologia Intel(R) HD GraphicsWiFi e Bluetooth(R)Nao importa onde voce esteja, voce sempre podera ser conectar facilmente a uma rede sem fio com o Lenovo Access ConnectionsT.Dolby(R) Advanced AudioT v2Aproveite uma experiencia mais envolvente com a tecnologia de som "surround", seja participando de uma video conferencia ou assistindo a um filme.Webcam integrada de 720p HD e microfones digitais duplosClareza de imagem e som, vao fazer com que a suas participacoes em video conferencias sejam muito mais reais.Marca: LenovoModelo: T430Especificacoes- Processador: Intel i5 3320M 2.6Ghz- Memoria RAM: 4GB- HD: 320GB- DVD- 4 USBPortas- Mini DisplayPort- VGA- 2x USB 3.0- 2x USB 2.0 (1x energizada)- Combo jack- Leitor de cartoes 4 em 1- Express CardMicrofone- Microfones duplos de alta definicao com redutor de ruidos- Alto-falantes- Auto-falantes Stereo com tecnologia Dolby(R) Advanced AudioT v2GARANTIA DE 06 MESES
     valor qtd_vendidos
1  3799.98            2
5  2799.00            8
10 2000.00            1
18 1299.00           14

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1299    1825    2400    2474    3049    3800 

Citation

For attribution, please cite this work as

Brom (2019, Jan. 11). blackbeltR Blog: Coleta de dados - Mercado Livre. Retrieved from https://blackbeltR.github.io/blog/posts/2019-01-11-coleta-de-dados-mercado-livre/

BibTeX citation

@misc{brom2019coleta,
  author = {Brom, Pedro Carvalho},
  title = {blackbeltR Blog: Coleta de dados - Mercado Livre},
  url = {https://blackbeltR.github.io/blog/posts/2019-01-11-coleta-de-dados-mercado-livre/},
  year = {2019}
}