ошибка rvest в методе использования(«xml_find_all») при чтении списка в read_html

#r #rvest

Вопрос:

Я просматривал rvest ниже на веб-странице с несколькими страницами через lappy, однако я обнаружил ошибку: Ошибка в методе использования(«xml_find_all») : нет применимого метода для «xml_find_all», применяемого к объекту класса «список».

Не совсем уверен, как это исправить:

 url <-'https://www.bunnings.com.au/products/bathroom-plumbing/plumbing/pipe-fittings/push-fit-pipe-fittings?L0=productsamp;L1=bathroom-plumbingamp;L2=plumbingamp;L3=pipe-fittingsamp;L4=push-fit-pipe-fittingsamp;pageSize=36amp;page=1'

get_last_page <- function(html){
  
  pages_data <- html %>% 
    html_nodes('.MuiPaginationItem-sizeLarge') %>% 
    html_text()                   
  
  pages_data[(length(pages_data)-1)] %>%            
    unname() %>%                                     
    as.numeric()                                     
}

first_page <- read_html(url)
(latest_page_number <- get_last_page(first_page))

list_of_pages <- str_c(url, '?page=', 1:latest_page_number)

bun <- list_of_pages %>%
  lapply(read_html)
  data.frame(  
  paint = bun %>% html_nodes(".product-title") %>% html_text(), 
  price = bun %>% html_nodes(".price-medium-size p") %>% html_text()
  )
 

Ответ №1:

Вы можете объединить выходные данные в одном кадре данных с map_df

 library(rvest)

result <- list_of_pages %>%
  purrr::map_dfr(~{
    bun <- .x %>% read_html
    data.frame(paint = bun %>% html_nodes(".product-title") %>% html_text(), 
              price = bun %>% html_nodes(".price-medium-size p") %>% html_text())
    }, .id = 'id')

result
 

В id столбце показано, из какой ссылки поступают данные.

Ответ №2:

Ваш bun объект-это список. Вот откуда возвращается lapply . Вы не можете передать список html_nodes кому . Вы, вероятно, тоже захотите подать заявку поверх этого списка. Может sapply быть, в этом случае будет работать лучше

 dd <- data.frame(  
  paint = sapply(bun, . %>% html_nodes(".product-title") %>% html_text()), 
  price = sapply(bun, . %>% html_nodes(".price-medium-size p") %>% html_text())
)
 

Комментарии:

1. Спасибо. Есть ли в любом случае возможность немного лучше отредактировать выходные данные, поскольку товары находятся в столбцах A, C и D с ценами в столбцах E, F и G?