<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr" class="gmail_signature"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Boa noite pessoal,</div><div><br></div><div>Estou tentando reproduzir um tutorial de web scraping no r que está disponível na seguinte página: <a href="https://sillasgonzaga.github.io/2016-11-18-olx1/" target="_blank">https://sillasgonzaga.github.io/2016-11-18-olx1/</a></div><div> </div><div>Em determinada etapa aparece o seguinte erro:</div><div><div>Error in `[[<-.data.frame`(`*tmp*`, "adicional", value = character(0)) : </div><div>  replacement has 0 rows, data has 50 In addition: Warning message:</div><div>In function_list[[k]](value) : NAs introduced by coercion</div><div>Timing stopped at: 3 0.75 4.94</div></div><div><br></div><div>Ao que parece existe um problema com o número de linhas do dataframe quando as informações são extraídas, mas não consigo detectar qual o problema, alguém poderia me ajudar?</div><div><br></div><div>O código que estou executando é o que segue abaixo:</div><div><br></div><div><div># Pacotes para instalar no R:</div><div>if(!require(c('magrittr','rvest','readr','stringr','curl','tidyr','dplyr')))</div><div>{install.packages(c('magrittr','rvest','readr','stringr','curl','tidyr','dplyr')</div><div>                    ,type='binary',dep=T)}</div><div>library("magrittr") # não vivo sem esse pacote</div><div>library("rvest") # principal pacote para web-scraping</div><div>library("readr") # usado para extrair numeros de texto</div><div>library("stringr") # usado para o data cleaning</div><div>library('curl') # usado como suporte para o rvest</div><div>library("tidyr") # data cleaning</div><div>library("dplyr") # data cleaning</div><div><br></div><div>url_apt <- "<a href="http://rj.olx.com.br/rio-de-janeiro-e-regiao/imoveis/aluguel/apartamentos" target="_blank">http://rj.olx.com.br/rio-de-janeiro-e-regiao/imoveis/aluguel/apartamentos</a>"</div><div>number_pages <- 245 #hard coded</div><div># Criar vetor com todos os urls para as páginas do olx</div><div>lista_urls <- paste0(url_apt, "?o=", 1:number_pages)</div><div><br></div><div>limparString <- function(x) {</div><div>  # x = string coletado do olx</div><div>  x %<>% str_replace_all("[\t]", "")</div><div>  x %<>% str_replace_all("[\n]", "")</div><div>  x %<>% str_replace_all("Apartamentos", "")</div><div>  x %<>% str_replace_all("Anúncio Profissional", "")</div><div>  x %<>% str_replace("-", "")</div><div>  x %<>% str_replace_all("[R$]", "")</div><div>  x %<>% str_replace_all("[.]", "")</div><div>  x %<>% str_trim()</div><div>  return(x)</div><div>}</div><div><br></div><div>extrairAnuncios <- function(url_pagina, info_adicional) {</div><div>  ### INPUTS:</div><div>  # url_pagina: url de uma pagina do olx com uma lista de links de anúncios.</div><div>  # info_adicional: variavel booleana. se verdadeiro, faz o scraping de dados adicionais do anuncio</div><div>  # ... deve ser usado apenas para apartamentos, pois a sintaxe do html para quartos é diferente</div><div>  mycurl <- curl(url_pagina, handle = curl::new_handle("useragent" = "Mozilla/5.0"))</div><div>  mycurl <- read_html(mycurl)</div><div>  </div><div>  x <- mycurl %>% html_nodes(".OLXad-list-link")</div><div>  </div><div>  # extrair link do anuncio</div><div>  col_links <- mycurl %>% html_nodes(".OLXad-list-link") %>% html_attr("href")</div><div>  # extrair titulo do anuncio</div><div>  col_titles <- mycurl %>% html_nodes(".OLXad-list-link") %>% html_attr("title")</div><div>  # extrair preço</div><div>  precos <- lapply(x, . %>% html_nodes(".col-3"))</div><div>  precos %<>% lapply(html_text)</div><div>  precos %<>% unlist()</div><div>  precos %<>% limparString()</div><div>  precos %<>% as.numeric()</div><div>  col_precos <- precos</div><div>  # extrair bairros</div><div>  bairros <- mycurl %>% html_nodes(".OLXad-list-line-2") %>% html_text()</div><div>  bairros %<>% str_replace_all("[\t]", "")</div><div>  bairros %<>% str_replace_all("[\n]", "")</div><div>  bairros %<>% str_replace_all("Apartamentos", "")</div><div>  bairros %<>% str_replace_all("Aluguel de quartos", "")</div><div>  bairros %<>% str_replace_all("Anúncio Profissional", "")</div><div>  bairros %<>% str_replace("-", "")</div><div>  bairros %<>% str_trim()</div><div>  col_bairros <- bairros</div><div>  # extrair informações adicionais de apartamento</div><div>  </div><div>  if (info_adicional) {</div><div>    adicional <- mycurl %>% html_nodes(".mt5px") %>% html_text()</div><div>    adicional %<>% str_replace_all("[\t]", "")</div><div>    adicional %<>% str_replace_all("[\n]", "")</div><div>    col_adicionais <- adicional</div><div>    </div><div>  }</div><div>  return(data.frame(link = col_links,</div><div>                    titulo = col_titles,</div><div>                    preco = col_precos,</div><div>                    bairro = col_bairros,</div><div>                    adicional = col_adicionais,</div><div>                    stringsAsFactors = FALSE))</div><div>}</div><div><br></div><div>url_teste <- lista_urls[1]</div><div>system.time(df <- extrairAnuncios(url_teste, info_adicional = TRUE))</div></div><div><br></div><div>Agradeço a ajuda,</div><div><br></div><div><div style="color:rgb(136,136,136);font-family:arial,sans-serif;text-align:center"><font style="font-size:10pt"><b>Hélder  Santos</b></font></div><div style="color:rgb(136,136,136);font-family:arial,sans-serif;font-size:12.6667px;text-align:center"><font size="1"><b>Eng. Agr. Salvador-BA</b></font></div></div><div style="text-align:center"><br></div></div></div></div></div></div></div></div></div>